将标题存储在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