问:VBA,找到相应标题的列号(整数)(第1行,字符串)

时间:2017-11-23 15:13:50

标签: vba function for-loop

大家好我在一张纸上有以下内容(我有一个shittonne数据,但为了保持简单我使用它):

Name    Adres    City
Berend  Laan 123 Warsnveld
Jacq    Laan 456 Leiden
Steph   Laan 789 Almere

假设列标题保持不变但用户添加了行,我如何找到原始列标题的列号(Name,Adres,City)。

我考虑过制作标题的字符串变量(strName等)和列的整数(iColName等)。 然后我需要检查哪个列号的预设名称(strName等)与工作表上的名称相匹配,并将此值放在整数变量(iColName等)中,最好是通过循环。这部分是我卡住的地方。

我需要检查字符串"Name",变量strName(原始位置1,1)到第1行(最多255列)的每个单元格,直到我得到一个匹配并将其放入相应的iColName(最后一部分是稍后进行复制/粘贴操作,并确保它可以正常工作,无论用户添加了多少列。)

我希望自己明确表达,并期待着您的回复。

提前致谢。

更新:可能需谨慎提及我想在工作簿中写入(可能已更改的)数据。

UPDATE2:简而言之,我需要一个循环来检查原始标题的字符串变量(这些是事先设置的)到工作表的所有列标题。当它们匹配时,我希望匹配的标题的列号存储在相应的Integer变量中。

1 个答案:

答案 0 :(得分:0)

您不需要VBA

如果标题在第一行中是唯一的,那么像=MATCH("Adres",$1:$1,0)这样简单的内容将返回 Adres 的列号。如果第1行中不存在 Adres ,它将返回#N/A

如果您真的想使用VBA,可以使用FIND命令:

Sub Test()

    Dim rFoundRange As Range

    Set rFoundRange = ThisWorkbook.Worksheets("Sheet1").Rows(1) _
        .Find(What:="Adres", LookAt:=xlWhole, SearchDirection:=xlNext)

    If Not rFoundRange Is Nothing Then
        MsgBox "Found in column " & rFoundRange.Column

        'Copy the cell in row 5 of the found column to A1 of Sheet2.
        ThisWorkbook.Worksheets("Sheet1").Cells(5, rFoundRange.Column).Copy _
            Destination:=ThisWorkbook.Worksheets("Sheet2").Range("A1")

    Else
        MsgBox "Not found"
    End If

End Sub