将列表与表进行比较,并使用excel VBA输出新条目

时间:2014-11-01 06:18:31

标签: excel vba 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 个答案:

答案 0 :(得分:1)

我刚刚回答了一个与此类似的问题 Here is the link在此示例中,它基于数组。您可以稍微修改一下以获得结果。

  1. 是的,您需要确定要检查的列表的最后一行。 - GetLastRow(见下文)
  2. vLoopup并不像Match那样有效,或者与Match匹配。您可以使用worksheetFunction.Match跳转到第一次出现,甚至看看是否有任何匹配。
  3. 需要考虑的步骤:

    • 确定要检查的列表的最后一行。 - 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