VBA新手,我试图将工作表中的列标题查找到另一个,如果匹配复制数据...
有人告诉我,我可以将我的标题存储在一个字符串数组中然后循环并将标题与我的数组进行比较,以查看它们是否匹配。
ie: For each c In
Sheet1.Range("A1:BA1").offset(rownumber -1)
但我不确定这意味着什么?如何将标题存储在字符串数组中?对不起,如果这是一个超级基本问题。我用谷歌搜索了一下,没有找到解释如何做到这一点或它意味着什么。
我的项目: sheet1的研究数据。如果出现问题,我想单击一个按钮,该按钮仅将匹配的列数据复制到指定工作表中的新行。从那里将检查数据,然后另一个按钮将数据导出到MS SQL表。
即:
Sheet1
A B C D E
ID CUR Region Amount Y/N
1 USD NA $54 Y
Sheet2
A B C D E
Region CUR Amount Type Misc
因此,如果列E = Y,则将该行中的所有相关数据复制到新工作表中:
Sheet2 (output)
A B C D E
Region CUR Amount Type Misc
NA USD $54 Null Null
Sheet2的列不在Sheet1中,反之亦然......此外,每个工作表中列的顺序也不相同。真正的工作表很多,有很多列,每次刷新数据时行数都会改变。我需要循环,直到Sheet1中的Col A为空。
答案 0 :(得分:2)
如何将标题存储在字符串数组中?
一种非常实用的方式:
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
循环来遍历数组。
答案 1 :(得分:1)
这是我认为符合您需求的一段代码。我认为变量名称是自解释的,但如果没有,请跟进。
代码搜索原始工作表标题行中的每个单元格,以查看它是否存在于目标工作表中。如果是,则复制相应的信息。
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