如何为vlookup设置Excel VBA Loop

时间:2018-11-12 08:52:26

标签: excel vba loops

我有一个仪表板(下图),在其中我可以手动添加条目。然后是一个日志(下图),其中所有条目都借助IFVlookup函数进行记录。

我需要一个代码,以便日志中的每个输出单元格都能找到仪表板中的所有条目并给出答案。我认为将使用vlookup的循环。

Image

[编辑] 将Dasboard表视为离散表,在该表中手动输入条目。 将日志表视为连续表,其中保留每个日期每个小时的记录。仪表板表中的条目将发布到日志表中。附加了新图片New Image

我已经在日志表的输出列中输入了此功能:

 =IF( AND(H3=$B$3,I3>= $C$3,I3<$D$3) ,$E$3,0)  + IF(AND(H3=$B$4,I3>= 
 $C$4,I3<$D$4) ,$E$4,0) + IF (AND(H3=$B$5,I3>= $C$5,I3<$D$5), $E$5,0)

这对我来说很适合绘制条目,但是问题是仪表板中的每一行我都必须在上面添加一个新的IF-And函数。因此,例如,如果我想添加仪表板的第四行以与病假同步,则必须添加

+If(AND(H3=$B$6,I3>=$C$6,I3<$D$6),$E$6,0)

我希望仪表板中的每一行都以某种方式自动添加,例如: i =变量

= If (AND(H3=$B$i,I3>= $C$i,I3<$D$i), $E$i,0)

只有一个i会大于0,而其余的将为零。因此该函数应该返回我所有i的总和,而不仅仅是最后一次迭代。

1 个答案:

答案 0 :(得分:0)

也许只是手动填写公式?如果坚持使用宏,例如

Sub test()
Range("K3").Value = "X"
Range("K3:K10").FillDown
End Sub

用公式替换“ X”,保持“” 将K10替换为您想要的高度

----编辑----

让我为您分解一下

  1. match(H3,B:B,0),将在B中找到= H的正确行,在H3情况下它将找到B3

  2. INDEX(B:E, MATCH(H3,B:B,0),2)->现在它找到B3,索引让您找到C3(注意2,3 ,4在后面的代码中,它表示B3中的列)

  3. 和(I3> = ...,J3> = ...)现在我们已经有了开始时间和结束时间,我们使用I和J进行比较

  4. 如果3.为true,则查找输出列,否则为0

  

= IF(AND(I3> = INDEX(B:E,MATCH(H3,B:B,0),2),J3> = INDEX(B:E,MATCH(H3,B:B,0) ,3)),INDEX(B:E,MATCH(H3,B:B,0),4),0)