2012-09-26 22 views
0

下面的附件是一張表格,它將顯示我在這裏討論的內容。但這是我正在尋找的。正如你可以在Final的表格中看到的那樣,以整潔的順序顯示所有列表。我正在尋找一種方法來取代單元格,如果excel中存在特定的標準VBA

這是最終用戶看到的。現在在某些情況下,如Orig這樣的文檔發送給我時,如果有的話需要導入新的行。我一直注意到的是,雖然這條線幾乎完全相同,但客戶意見卻不盡相同。

而且在最終表格中,我們如何以紅色輸入評論,因此我無法複製和替換所有內容。我想要做的只是替換客戶評論和所需的發貨日期。

我想參考採購訂單,零件和描述作爲參考點,然後將新客戶的評論和所需的出貨日期替換成新的,即使沒有變化,我仍然希望將它作爲Senario替換。

有人可以告訴我一個腳本在VBA將做到這一點?

我想過用這樣的事情做到這一點:

With Intersect(wsJL.UsedRange, wsJL.Columns("Q")) 
     .AutoFilter 1, "<>Same" 
     With Intersect(.Offset(2).EntireRow, .Parent.Range("B:U")) 
      .Copy wsJAR.Cells(Rows.Count, "B").End(xlUp).Offset(1) 
      .EntireRow.Delete 
     End With 
     .AutoFilter 
    End With 

但我遇到了一個問題,即這不是一個EntireRow概念,而是兩個單獨的電池不能在一起,否則這將是一個對我來說更容易。

有沒有使用這個腳本或其他喜歡它的方法來獲得我期待的結果?

感謝您的幫助提前,如果你可以提供任何。

Example Sheet

回答

1

解決了它。

有點不同,不是我想要的,但它是最簡單的答案。加入兩個單元在最終標籤的數據的末尾:

對於O2-O4

=IFERROR(INDEX(Orig!$J$2:$J$4,MATCH(1,INDEX((Orig!$B$2:$B$4=$A2)*(Orig!$D$2:$D$4=$B2),0),0)),"")

對於P2-P4

=IFERROR(INDEX(Orig!$E$2:$E$4,MATCH(1,INDEX((Orig!$B$2:$B$4=$A2)*(Orig!$D$2:$D$4=$B2),0),0)),"")

,然後創建了一個新腳本:

Option Explicit 

Sub One() 

    Dim wsFIN As Worksheet 'Final 
    Dim wsORI As Worksheet 'Original 
    Dim lastrow  
    Set wsFIN = Sheets("Final") 
    Set wsORI = Sheets("Orig") 

     lastrow = wsFIN.Range("B" & Rows.Count).End(xlUp).Row 
     wsFIN.Range("O2:P" & lastrow).Copy wsFIN.Range("I2:J" & lastrow) 
     wsFIN.Range("I2:J" & lastrow).Borders.Weight = xlThin 
     wsFIN.Range("I2:J" & lastrow).Font.Size = 12 
     wsFIN.Range("I2:J" & lastrow).Font.Name = "Calibri" 

End Sub 

它的工作原理,但我希望有一點清潔。這是最終的結果。

Solution

+0

+1解決你自己的問題:) –

0

那麼,如果我明白你需要什麼,沒有一個簡單的4線答案,這一個。但這是一個簡單的90行答案。您需要保持枚舉符合兩張表中的列定義,即「最終」和「原始」。您可能需要更改範圍定義(表格名稱等)。您需要執行VBE Menu/Tools/References並檢查「Microsoft Scripting Runtime」以獲取字典對象。對不起,如果它似乎羅嗦,但應該很容易維護。

Option Explicit 

' This is the definition of the columns on "Final" sheet 
Enum final_record 
    fr_partid 
    fr_descr 
    fr_vendorid 
    fr_po 
    fr_due 
    fr_quantdue 
    fr_status 
    fr_orig 
    fr_desired 
    fr_comment 
    fr_dayslate 
    fr_pri 
    fr_shoporder 
    fr_remarks 
    fr_end 
End Enum 

' This is the definition of the columns on "Orig" sheet 
Enum orig_record 
    or_po 
    or_partid 
    or_vendorid 
    or_descr 
    or_comment 
    or_status 
    or_quant 
    or_balance 
    or_orig 
    or_requested 
    or_end 
End Enum 

Sub UpdateDescrAndShipDate() 
' Update comments and required ship date if matches po/partid/description. 
' Else add a new row. 
Dim lRows As Long, lRow As Long, rFinal As Range, rOrig As Range, sKey As String 
Dim lTarget As Long, lNew As Long 
Dim dictTarget As New Scripting.Dictionary 

' Get Final rows into dict by key 
    Set rFinal = Worksheets("Final").Range("A1") 

    lRows = rFinal.Offset(65000, 0).End(xlUp).Row - rFinal.Row 
    For lRow = 1 To lRows 
     sKey = rFinal.Offset(lRow, fr_po).Value & "|" & _ 
       rFinal.Offset(lRow, fr_partid).Value & "|" & _ 
       rFinal.Offset(lRow, fr_descr).Value 

     If Not dictTarget.Exists(sKey) Then 
      dictTarget.Add sKey, lRow 
     Else 
      MsgBox "Invalid duplicate key? " & sKey 
     End If 
    Next 
    lNew = lRows 

' Run through Orig rows, and write to Orig based on key value 
    Set rOrig = Worksheets("Orig").Range("A1") 

    lRows = rOrig.Offset(65000, 0).End(xlUp).Row - rOrig.Row 

    For lRow = 1 To lRows 
     sKey = rOrig.Offset(lRow, or_po).Value & "|" & _ 
       rOrig.Offset(lRow, or_partid).Value & "|" & _ 
       rOrig.Offset(lRow, or_descr).Value 

     If dictTarget.Exists(sKey) Then 
' update 
      lTarget = dictTarget(sKey) 
      rFinal.Offset(lTarget, fr_comment).Value = rOrig.Offset(lRow, or_comment).Value 
      rFinal.Offset(lTarget, fr_desired).Value = rOrig.Offset(lRow, or_requested).Value 
     Else 
' new row 
      lNew = lNew + 1 
      rFinal.Offset(lNew, fr_partid).Value = rOrig.Offset(lRow, or_partid) 
      rFinal.Offset(lNew, fr_descr).Value = rOrig.Offset(lRow, or_descr) 
      rFinal.Offset(lNew, fr_vendorid).Value = rOrig.Offset(lRow, or_vendorid) 
      rFinal.Offset(lNew, fr_po).Value = rOrig.Offset(lRow, or_po) 
      rFinal.Offset(lNew, fr_due).Value = rOrig.Offset(lRow, or_balance) 
      rFinal.Offset(lNew, fr_quantdue).Value = rOrig.Offset(lRow, or_orig) 
      rFinal.Offset(lNew, fr_status).Value = rOrig.Offset(lRow, or_status) 
      rFinal.Offset(lNew, fr_orig).Value = "" 
      rFinal.Offset(lNew, fr_desired).Value = rOrig.Offset(lRow, or_requested) 
      rFinal.Offset(lNew, fr_comment).Value = rOrig.Offset(lRow, or_comment) 
      rFinal.Offset(lNew, fr_dayslate).Value = "" 
      rFinal.Offset(lNew, fr_pri).Value = "" 
      rFinal.Offset(lNew, fr_shoporder).Value = "" 
      rFinal.Offset(lNew, fr_remarks).Value = "" 
     End If 
    Next 

End Sub 
相關問題