当涉及到vba并需要一些帮助时,我完全是新手。基本上在一张表中我有一张表和另一张表(同一工作簿)我有一个每日更改的列表,我需要相应地更新该表,即相应地添加和/或删除条目。我认为我开始的想法是:
1) Do I need to determine the size of the table/list since it's changing
2) Shall I make use of vlookup combined with a nested loops to compare each cell of the list with each cell of the table?
感谢所有反馈。
答案 0 :(得分:1)
我刚刚回答了一个与此类似的问题 Here is the link在此示例中,它基于数组。您可以稍微修改一下以获得结果。
需要考虑的步骤:
确定要检查的列表的最后一行。 - GetLastRow
(见下文)
创建原始列表数组
确定第二个列表的最后一行
对第二张表格中的每个项目执行循环 针对第一个项目。 - 循环内循环,这是在哪里 你可能想要使用Match或其他东西,虽然我不确定 它使用WorksheetFunction节省了多少时间 只是在后台工作。但它仍然在做工作 和你可以编码的类似工作。
为其创建数组 UnMatched项目 - 使用ReDim为您的数组设置它的大小为1 一次更大。
将不匹配的项目添加到原始工作表。 (见下文)
大部分内容都是一遍又一遍。通过一次循环一个单元格将项目添加到数组。检查一个值是否=另一个值。如果是这样,match = true ..那样的事情。查看链接以查看其他示例。
要执行此操作,请使用.Cells,而不是.Range。 .Cells(row#,Col#)格式非常适合循环。只需为Row#或列#设置一个变量,然后将其递增为循环。它实际上与单击工作表上的向下箭头相同。您还可以使用字符串定义公式。
Dim r As Long ' Or Integer although I've read that Long is more efficient.
r = 4
Sheets("Sheet1").Cells(r, 3) = "Hello There C4!"
'Result = Sheet1!C4 = Hello There C4
示例:这是将unMatched项目添加到原始列表的运行方式。您只想添加尚未存在的那些。
Private Sub AddToSheet()
Call GetLastRow
r = lastRow + 1
i = 0
For i = 0 To n
Sheets("Sheet1").Cells(r, 1) = unMatchedArray(i)
r = r + 1
Next i
End Sub
Private Sub GetLastRow()
' checking Range("A1:A65536")
lastRow = Sheets("Sheet1").Cells(65536, 1).End(xlUp).Row
End Sub