VBA - 仅当行x中的单元头相等时返回ducplicate-txt,否则从y行返回对应于输入值

时间:2017-06-29 11:09:05

标签: excel vba excel-vba

需要两件事的帮助。

Excel工作表的图片:

第1名:

另一个代码会将第7行的“应付金额”和“未付款”的最高值粘贴到B1和B2中。由此,我需要两个代码,分别为'到期金额'和'到期未支付',检查第6行中B1和B2的值是否有重复。如果有,则文本'几个日期与相同数量'应显示在F1和F2中。如果没有,那么第4行的相应日期应显示在F1和F2中。

但是有一些与第5行中的值相关的例外情况。这两个代码应该完全相同,但使用“应付金额”或“未付款”作为基础。为了简化场景,我使用'Amount due'的代码作为示例:

  • 如果输入值(B1)在第7行中出现多次,则至少有两个出现的值位于第5行的相同值(“应付金额”)下,则输出(F1)应为'具有相同数量的多个日期'
  • 如果输入值(B1)在第7行中出现多次,则第5行中没有出现的值位于相同的值(“Amound due”)下,则输出( F1)应该是第4行的相应日期值。

与我链接的图片相关的示例:

  • 最高'应付金额'值为10(第7行),由于此值位于A7和C7(两者均为“应付金额”列),因此F1中的输出应为“多个日期”与山姆数'。
  • 最高'未付款'值为5(第7行),由于该值位于E7和F7,即'Amound due'和'Due not paid'列,然后输出F2应该是第4行的相应日期 - 在这种情况下是30.12.16(这也引导我进入下一期......)

2号:

正如您所看到的,每对“到期金额”和“到期未付款”列都链接到一个日期(即“未付款”列始终属于其左侧的日期)。在上述第二种情况下,是否有可能“到期未支付”代码在“应付金额”列上方提取位于其左侧的日期。因此在图中,F2中的输出应该是30.12.16,因为代码在第7行中的“未支付”中取得最高值,这在第F列中 - 并且由于库存E中的副本是“应付金额”,输出应该是一个日期。

我目前的代码:

Sub test()  

  Dim Range1  As Range  
  Set Range1 = ActiveSheet.Range("A6:F6")  

   For Each cell In Range1  
    If WorksheetFunction.CountIf(Range1, Range("B1").Value) > 1 Then  
    ActiveSheet.Range("F1").Value = "Several dates with the same amount"  
   Else  
    ActiveSheet.Range("F1").FormulaArray = "=INDEX(A3:F3,MATCH(B1,A6:F6,0))"  
   End If  
   Next  

End Sub  

希望这是可以理解的 杰夫

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题相对于您想要的过于简化,但以下两个公式将返回您在图片中显示的内容。假设您有更多的数据行,您需要根据实际情况进行调整:

F1:  =IF(COUNTIFS($A$5:$F$5,"Amount Due",$A$7:$F$7,B1)>1,"Several dates with the same amount",SUMPRODUCT((A7:F7=B1)*(A5:F5="Amount Due")*A4:F4))
F2:  =IF(COUNTIFS($A$5:$F$5,"Due not paid",$A$7:$F$7,B2)>1,"Several dates with the same amount",SUMPRODUCT((B7:F7=B2)*(B5:F5="Due not paid")*A4:E4))

请注意,关于F2中的公式,为了处理适用日期的偏移,我们将水平数组“缩短”一个,并将其相对于日期偏移一个。