2017-06-29 58 views
0

需要兩件事情的幫助。VBA - 僅在行x中的單元格標題相等時返回ducplicate-txt,否則返回行y對應於輸入值的返回日期

圖片Excel表單的:

數1:

另一個代碼將粘貼的和「由於金額」的最高值從7行「由於沒有支付」成B1和B2。因此,我需要兩個代碼分別用於'應付金額'和'應付未付款',它檢查第6行中是否存在來自B1和B2的值的任何重複。如果存在,則文本'多個日期與F1和F2應顯示「相同的量」。如果沒有,那麼第4行的相應日期應顯示在F1和F2中。

但有一些與第5行中的值有關的例外情況。這兩個代碼的工作方式應該完全相同,但使用「應付金額」或「到期未付款」作爲基礎。爲了簡化方案中,進出口使用關於「由於金額」的代碼作爲示例:

  • 如果輸入值(B1)顯示在行不止一次7 至少兩個出現值都位於如果輸入值(B1)在第7行中出現多次(012),那麼輸出(F1)應該是'具有相同數量的若干日期'
  • 如果輸入值(B1)在第7行出現多於一次的出現值位於第5行中的相同值(「Amound due」)下,則輸出(F1)應該是來自第4行的相應日期值。

實施例相關的圖象I鏈接:

  • 最高「金額due'值是10(第7行),並且由於該值位於A7和C7,其中兩個是一個」金額到期'欄,那麼F1中的輸出應該是'與SAM量相關的幾個日期'。
  • 最高的'到期未支付'值是5(在第7行),並且由於該值位於E7和F7,它們是'到期未付'列和'到期未付款'列,則輸出爲F2應該是4行中的相應日期 - 在這種情況下是16年12月30日(這也導致我的下一個問題......)

數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 

希望這是可以理解的。
傑夫

回答

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的公式,照顧的偏移適用日期,我們「縮短「水平排列一個,並在日期方面向右偏移一個。

+0

嗨羅恩!謝謝你的回答。我已經測試了一下,並且據我所見,這就像一個冠軍!我將在今天和明天的真實測試案例場景中進行一些進一步測試,並讓您知道結果。但是這看起來不錯(當我試圖自己解決它時,我可能已經複雜了)。謝謝 - 非常感謝! – Jeff