将标题存储在string数组VBA中

新的VBA,并试图本质上查找列表中的列标题到另一个,如果匹配复制数据…

有人告诉我,我可以将我的标题存储在一个string数组中,然后循环并将标题与我的数组进行比较,以查看它们是否匹配。

ie: For each c In Sheet1.Range("A1:BA1").offset(rownumber -1) 

但我不确定这是什么意思? 如何将我的标题存储在string数组中? 对不起,如果这是一个超级基本的问题。 我GOOGLE了,没有发现任何解释如何做到这一点或它的意思。

我的项目:关于工作表1的研究数据。 如果出现问题,我想单击一个button,只将匹配的列数据复制到指定工作表中的新行。 从那里数据将被审查,然后另一个button将数据导出到MS SQL表。

即:

 Sheet1 ABCDE ID CUR Region Amount Y/N 1 USD NA $54 Y Sheet2 ABCDE Region CUR Amount Type Misc 

所以如果列E = Y,那么复制该行中的所有相关数据到一个新的表:

 Sheet2 (output) ABCDE Region CUR Amount Type Misc NA USD $54 Null Null 

Sheet2有不在Sheet1中的列,反之亦然…每个表中的列顺序也不相同。 真正的工作表很多,列数很多,每次刷新我的数据时,行数都会改变。 我需要这个循环,直到Sheet1中的列A为空。

如何将我的标题存储在string数组中?

一个非常实用的方法:

 Dim hdlist As String Dim sep As String hdlist = "ID|CUR|Region|Amount|Y/N" ' Change this line sep = "|" Dim hdnames() As String hdnames = Split(hdlist, sep, -1, vbBinaryCompare) 

然后你可以使用For循环遍历数组。

以下是我认为满足您的需求的一段代码。 我认为variables名称是自解释的,但如果不是,请跟进。

代码将search原始工作表标题行中的每个单元格,以查看它是否存在于目标工作表中。 如果是这样,它复制相应的信息。

 Dim wsOrigin As Worksheet Dim wsDest As Worksheet Dim nCopyRow As Long Dim nPasteRow As Long Dim rngFnd As Range Dim rngDestSearch As Range Dim cel As Range Const ORIGIN_ROW_HEADERS = 1 Const DEST_ROW_HEADERS = 1 Set wsOrigin = Sheets("Sheet1") Set wsDest = Sheets("Sheet2") nCopyRow = ActiveCell.Row nPasteRow = wsDest.Cells(Rows.Count, 1).End(xlUp).Row + 1 Set rngDestSearch = Intersect(wsDest.UsedRange, wsDest.Rows(DEST_ROW_HEADERS)) For Each cel In Intersect(wsOrigin.UsedRange, wsOrigin.Rows(ORIGIN_ROW_HEADERS)) On Error Resume Next Set rngFnd = rngDestSearch.Find(cel.Value) If rngFnd Is Nothing Then 'Do Nothing as Header Does not Exist Else wsDest.Cells(nPasteRow, rngFnd.Column).Value = wsOrigin.Cells(nCopyRow, cel.Column).Value End If On Error GoTo 0 Set rngFnd = Nothing Next cel