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 .FIND
te 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").column
zal 2014. De code is niet hoofdlettergevoelig, daarom mag u ?cells(,"byl").column
en 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 Columns
gelijk 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