Excel-kolomnummer uit kolomnaam

Hoe haal ik het kolomnummer uit de kolomnaam in Excel met behulp van Excel-macro?


Antwoord 1, autoriteit 100%

Ik denk dat je dit wilt?

Kolomnaam naar kolomnummer

Sub Sample()
    ColName = "C"
    Debug.Print Range(ColName & 1).Column
End Sub

Bewerken: inclusief het omgekeerde van wat je wilt

Kolomnummer naar kolomnaam

Sub Sample()
    ColNo = 3
    Debug.Print Split(Cells(, ColNo).Address, "$")(1)
End Sub

OPVOLGING

Als ik het salarisveld helemaal bovenaan heb, laten we zeggen in cel C (1,1). Als ik nu het bestand verander en de salariskolom naar een andere plaats verschuif, zeg F (1,1) dan zal ik het moeten wijzigen de code, dus ik wil dat de code controleert op salaris en het kolomnummer vindt en vervolgens de rest van de bewerkingen uitvoert volgens dat kolomnummer.

In dat geval raad ik aan om .FINDte gebruiken. Zie dit voorbeeld hieronder

Option Explicit
Sub Sample()
    Dim strSearch As String
    Dim aCell As Range
    strSearch = "Salary"
    Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    If Not aCell Is Nothing Then
        MsgBox "Value Found in Cell " & aCell.Address & _
        " and the Cell Column Number is " & aCell.Column
    End If
End Sub

MOMENTOPNAME


Antwoord 2, autoriteit 2%

Terwijl je op zoek was naar een VBA-oplossing, was dit mijn beste resultaat op Google bij het zoeken naar een formule-oplossing, dus ik zal dit toevoegen voor iedereen die hier kwam zoals ik deed:

Excel-formule om het getal uit een kolomletterte retourneren (uit de opmerking van @A. Klomp hierboven), waarbij cel A1 uw kolomletter(s) bevat:

=kolom(indirect(A1&”1″))

Omdat de indirecte functie vluchtig is, wordt elke cel opnieuw berekend, dus als je er veel hebt, kan dit je werkmap vertragen. Overweeg een andere oplossing, zoals de functie ‘code’, die u het nummer geeft voor een ASCII-teken, beginnend met ‘A’ bij 65. Merk op dat u hiervoor moet controleren hoeveel cijfers er in de kolomnaam staan, en verander het resultaat afhankelijk van ‘A’, ‘BB’ of ‘CCC’.

Excel-formule om de kolomletter van een cijferte retourneren (uit deze vorige vraag Hoe zet je een kolomnummer (bijv. 127) om in een Excel-kolom (bijv. AA), beantwoord door @Ian ), waarbij A1 uw kolomnummer bevat:

=substitute(address(1,A1,4),”1″,””)

Houd er rekening mee dat beide methoden werken ongeacht het aantal letters in de kolomnaam.

Hopelijk helpt dit iemand anders.


Antwoord 3

U kunt dit allemaal overslaan en uw gegevens in een tabel zetten. Raadpleeg vervolgens de tabel en de koptekst en het zal volledig dynamisch zijn. Ik weet dat dit van 3 jaar geleden is, maar iemand kan dit nog steeds nuttig vinden.

Voorbeeldcode:

Activesheet.Range("TableName[ColumnName]").Copy

U kunt ook gebruiken:

activesheet.listobjects("TableName[ColumnName]").Copy

U kunt dit referentiesysteem zelfs in werkbladformules gebruiken. Het is erg dynamisch.

Hopelijk helpt dit!


Antwoord 4

Schrijf en voer de volgende code uit in het onmiddellijke venster

?cells(,"type the column name here").column

Bijvoorbeeld ?cells(,"BYL").columnzal 2014. De code is niet hoofdlettergevoelig, daarom mag u ?cells(,"byl").columnen de output zal nog steeds hetzelfde zijn.


Antwoord 5

Gebaseerd op het antwoord van Anastasiya. Ik denk dat dit het kortste vba-commando is:

Option Explicit
Sub Sample()
    Dim sColumnLetter as String
    Dim iColumnNumber as Integer
    sColumnLetter = "C"
    iColumnNumber = Columns(sColumnLetter).Column
    MsgBox "The column number is " & iColumnNumber
End Sub

Voorbehoud: de enige voorwaarde om deze code te laten werken, is dat een werkblad actief is, omdat Columnsgelijk is aan ActiveSheet.Columns. 😉


Antwoord 6

Hier is een pure VBA-oplossing omdat Excel samengevoegde cellen kan bevatten:

Public Function GetIndexForColumn(Column As String) As Long
    Dim astrColumn()    As String
    Dim Result          As Long
    Dim i               As Integer
    Dim n               As Integer
    Column = UCase(Column)
    ReDim astrColumn(Len(Column) - 1)
    For i = 0 To (Len(Column) - 1)
        astrColumn(i) = Mid(Column, (i + 1), 1)
    Next
    n = 1
    For i = UBound(astrColumn) To 0 Step -1
        Result = (Result + ((Asc(astrColumn(i)) - 64) * n))
        n = (n * 26)
    Next
    GetIndexForColumn = Result
End Function

In principe doet deze functie hetzelfde als elke Hex to Dec-functie, behalve dat er alleen alfabetische tekens voor nodig zijn (A = 1, B = 2, …).
De meest rechtse char telt enkel, elke char aan de linkerkant telt 26 keer de char rechts er naar toe (waardoor AA = 27 [1 + 26], AAA = 703 [1 + 26 + 676]).
Het gebruik van UCase() maakt deze functie hoofdletterongevoelig.


Antwoord 7

Naar mijn mening is de eenvoudigste manier om het kolomnummer te krijgen:
Sub Sample()
ColName = ActiveCell.Column
MsgBox ColName
End Sub

Other episodes