使用Excel VBA比较列表并输出新条目

在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? 

所有的反馈意见。

前几天我刚刚回答了一个很类似的问题。
这里是链接在这个例子中,它是基于一个数组。 你可以修改这个稍微得到你的结果。

  1. 是的,你需要确定你正在检查的列表的最后一行。 – GetLastRow(见下文)
  2. vLoopup的效率不如Match,或Match with Match。 您可以使用worksheetFunction.Match跳过第一次出现,甚至查看是否有任何匹配。

考虑的步骤:

  • 确定您正在检查的列表的最后一行。 – GetLastRow
    (见下文)

  • 创build一个原始列表的数组

  • 确定第二个列表的最后一行

  • 对第一张纸上的每个物品执行第二张纸上每个物品的循环。 – 循环内循环,这是你可能想使用匹配或什么的地方,虽然我不知道使用WorksheetFunction保存多less时间,它只是在后台工作。 但它仍然在做你的代码工作和类似的工作。

  • 为UnMatched项目创build一个数组 – 使用ReDim为您的数组设置一次大一号的大小。

  • 将不匹配的项目添加到原始工作表。 (见下文)

这些大部分是一遍又一遍的。 通过逐个单元格循环一次,将项目添加到数组。 检查是否有一个值=另一个值。 如果是这样,匹配=真..那样的事情。 看看链接,看看另一个例子。

为此,请使用.Cells而不是.Range。 .Cells(row#,Col#)格式非常适合循环。 只要有一个行#或列#的variables,并增加它循环。 这与单击工作表上的向下箭头实际上是一样的。 您也可以使用string定义公式。

 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