【问题标题】:Using loop and sum functions with Vlookup在 Vlookup 中使用循环和求和函数
【发布时间】:2015-12-22 11:35:20
【问题描述】:

我有一个宏,它实质上在 Sheet1 中的 C 列中搜索值“Rec”并复制 D 列中的相应值,然后将其粘贴到 Sheet2 的 B 列中的最后一个打开的单元格中。它只是做它应该做的事情,如下所示:

Sub FindPasteGSVInNextCell()

Worksheets("Sheet2").Activate

Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
WorksheetFunction.VLookup("Rec", Sheet1.Range("C2:H25"), 2, False)

End Sub

我现在想要代码,而不是仅仅搜索单个“Rec”值,而是在 C 列中搜索所有带有“Rec”的行,并将它们在 D 列中的所有对应值相加,然后放置该总和进入Sheet2。

我假设我需要某种“直到”循环或其他东西,但我不确定如何格式化它......我是 VBA 的初学者,所以任何帮助将不胜感激。

【问题讨论】:

  • 您可以简单地在第二张纸上使用sumif 等式。
  • 我同意@ScottCraner,这可以通过 SUMIF 公式轻松完成,无需 vba。您尝试使用 VBA 执行此任务是否有特定原因?
  • 我认为它需要合并 VBA,因为它将是一个大电子表格,当新数据填充 Sheet1 时会每天更新。它必须运行约 40 个不同类别的数据总和,并将它们中的每一个导入 Sheet2 上的相应日期。因此,我认为基本 sumif 不会起作用,因为如果有意义的话,它所计算的主数据集每天都会发生变化。可能会更复杂,但从长远来看,我认为 vba 会做得很多更容易——只需要弄清楚这个循环的东西..

标签: vba excel loops vlookup


【解决方案1】:

vlookup 将不起作用,因为它将继续仅获取“Rec”的第一个实例。

在表 2 上列出 A 列中的所有可能类别,然后在 B1 列中列出

 = sumif(Sheet1!C:C,A1,Sheet1!D:D)

然后复制下来。这将为您按类别获取总数。

如果您想使用 VBA,您仍然需要在某处设置类别列表,可以是硬编码的,也可以在可以循环访问的某处列出。

如果您的列表在 Sheet2 的 A 列中,那么您将:

dim ws as worksheet
set ws = Worksheets("Sheet2")
For each i in ws.range(ws.Range("A1"),ws.Range("A1").offset(xldown)).Cells
    i.offset(,1) = WorksheetFunction.Sumif(Worksheets("Sheets1").Range("C:C"), _
        i,Worksheets("Sheets1").Range("D:D"))
next i

【讨论】:

  • 好的,谢谢,我会试一试,看看它是否适用于我的应用程序。 ——快速思考一下,你觉得可能尝试某种类型的 If..Then 循环怎么样?例如,如果代码写道:如果当前行在 C 列中包含“Rec”,在 A 列中包含“一些其他条件”,则运行 Vlookup,否则移动到下一行,直到它遇到空白行。让我知道您对这种方法的想法
  • @Willarci3 Vlookup 将不起作用。它遍历第二个参数中的范围,直到找到第一个参数。一旦找到参数,它就会停止循环。要使其工作,您需要将第二个参数中的范围设为单个单元格。这会破坏 Vlookup 的目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多