将 headers 存储在字符串数组 VBA 中
Storing headers in string array VBA
VBA 的新手,我正在尝试从根本上查找 sheet 中的列 headers 到另一个,如果匹配则复制数据...
有人告诉我可以将我的 headers 存储在一个字符串数组中,然后循环并将 headers 与我的数组进行比较以查看它们是否匹配。
ie: For each c In
Sheet1.Range("A1:BA1").offset(rownumber -1)
但我不确定那是什么意思?如何将 headers 存储在字符串数组中?对不起,如果这是一个超级基本的问题。我用谷歌搜索了它,但没有找到任何解释如何执行此操作或它意味着什么的内容。
我的项目:
sheet1 的研究数据。如果出现问题,我想单击一个按钮,该按钮只会将匹配的列数据复制到指定 sheet 中的新行。从那里将审查数据,然后使用另一个按钮将数据导出到 MS SQL table。
即:
Sheet1
A B C D E
ID CUR Region Amount Y/N
1 USD NA Y
Sheet2
A B C D E
Region CUR Amount Type Misc
因此,如果列 E = Y,则将该行中的所有相关数据复制到新的 sheet:
Sheet2 (output)
A B C D E
Region CUR Amount Type Misc
NA USD Null Null
Sheet2 有 Sheet1 中没有的列,反之亦然...而且每个 sheet 中的列顺序也不相同。真正的 sheet 很大,有很多列,每次刷新数据时行数都会改变。我需要循环直到 Sheet1 中的 Col A 为空。
这是我拼凑的一段代码,我认为它可以满足您的需求。我认为变量名是不言自明的,但如果不是,请跟进。
代码搜索源 sheet 的 header 行中的每个单元格,以查看它是否存在于目标 sheet 中。如果是,它会复制相应的信息。
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
如何将我的 headers 存储在字符串数组中?
一个很实用的方法:
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
循环遍历数组
VBA 的新手,我正在尝试从根本上查找 sheet 中的列 headers 到另一个,如果匹配则复制数据...
有人告诉我可以将我的 headers 存储在一个字符串数组中,然后循环并将 headers 与我的数组进行比较以查看它们是否匹配。
ie: For each c In
Sheet1.Range("A1:BA1").offset(rownumber -1)
但我不确定那是什么意思?如何将 headers 存储在字符串数组中?对不起,如果这是一个超级基本的问题。我用谷歌搜索了它,但没有找到任何解释如何执行此操作或它意味着什么的内容。
我的项目: sheet1 的研究数据。如果出现问题,我想单击一个按钮,该按钮只会将匹配的列数据复制到指定 sheet 中的新行。从那里将审查数据,然后使用另一个按钮将数据导出到 MS SQL table。
即:
Sheet1
A B C D E
ID CUR Region Amount Y/N
1 USD NA Y
Sheet2
A B C D E
Region CUR Amount Type Misc
因此,如果列 E = Y,则将该行中的所有相关数据复制到新的 sheet:
Sheet2 (output)
A B C D E
Region CUR Amount Type Misc
NA USD Null Null
Sheet2 有 Sheet1 中没有的列,反之亦然...而且每个 sheet 中的列顺序也不相同。真正的 sheet 很大,有很多列,每次刷新数据时行数都会改变。我需要循环直到 Sheet1 中的 Col A 为空。
这是我拼凑的一段代码,我认为它可以满足您的需求。我认为变量名是不言自明的,但如果不是,请跟进。
代码搜索源 sheet 的 header 行中的每个单元格,以查看它是否存在于目标 sheet 中。如果是,它会复制相应的信息。
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
如何将我的 headers 存储在字符串数组中?
一个很实用的方法:
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
循环遍历数组