2012-08-31 47 views
0

我有一個包含三個工作表的工作簿。我需要根據工作簿A上列A和C以及工作表上列B和D的條件(索引?),將工作簿B上列K(行)中的值與工作簿A中列CF(行)的值一起更改B.也就是說,這些工作表具有不同順序的數據,不能簡單地循環和複製。我需要在工作表A中找到CF(行)的行號,其中工作表A和C的列與工作表A B和D的列相同。根據兩個OTHER列的值獲取一列的值,然後更改另一個工作表上的列

PsuedoSQL

UPDATE 
    Worksheet B 
SET 
    Worksheet B.K = Worksheet A.CF 
FROM 
    Worksheet A 
WHERE 
    Worksheet A.B = Worksheet B.B 

選擇從工作表A,列CF WHERE AA和AC等於工作表BB和BD與SET工作表BK(行)爲Value worksheetA.CF(行)

的我有一個查找代碼,在工作表A列A中查找帶有匹配文本的LAST列,但沒有任何索引或映射。

Public Function FindPnum(keyword As Variant) As Variant 
    Dim ws As Worksheet 
    Dim rng1 As Range 
    Dim rng2 As Range 
    Dim tRow As Long 
    Dim tCol As Integer 

    Set ws = Sheets("Data") 
    Set rng1 = ws.Cells.Find(keyword, ws.[b2], xlValues, , xlByRows, xlPrevious) 
    Set rng2 = ws.Cells.Find(keyword, ws.[b2], xlValues, , xlByColumns, xlPrevious) 

    If Not rng1 Is Nothing Then 
     FindPnum = Cells(rng1.Row, rng2.Column).Address(0, 0) 
    End If 

End Function 
+0

因此,讓我嘗試和發現你想要的東西。如果工作表A中的列A和C等於工作表B中的列B和D,那麼將工作表B中的列K設置爲等於工作表A中的列CK? – AxGryndr

+0

@AxGryndr好吧,既然你說得這麼雄辯......這就是我的意思,但不完全是。工作表中的數據不是相同的順序,因此我假定需要一個搜索功能來循環瀏覽工作表B並在工作表A中查找匹配的行,並返回THAT行CF值來填充工作表B的K值(與CF行ID不一樣的行ID) – PenguinCoder

+0

好的,我們討論表A上的一個實例和表B上的一個實例? – AxGryndr

回答

1

這裏試試這個

Sub pair() 
Dim r, r2, found 
r = 8 
r2 = 2 
found = False 
Application.ScreenUpdating = False 
Sheets(2).Activate 
Do Until Len(Cells(r, 2).Value) = 0 
Do Until Len(Sheets(1).Cells(r2 + 1, 2).Value) = 0 Or found = True 
    If Sheets(2).Cells(r, 2).Text = Sheets(1).Cells(r2, 2).Text Then 
     If Sheets(2).Cells(r, 11).Value <> 0 Then 
      Sheets(2).Cells(r, 11).Value = Sheets(1).Cells(r2, 84) 
     End If 
     found = True 
    Else 
     r2 = r2 + 1 
    End If 
Loop 
r2 = 2 
r = r + 1 
found = False 
Loop 
Application.ScreenUpdating = True 
End Sub 

我想這應該這樣做。

+0

@AxGrynder感謝您的幫助。我結束了聊天中的最後一個建議 - 查找:'= IF(ISNA(VLOOKUP(B21151,'Sheet 1'!B:CF,83,FALSE)),0,VLOOKUP(B21151,'Sheet 1'! B:CF,83,FALSE)),然後將它傳送到該列中的所有其他單元格。現在工作! – PenguinCoder

+0

@PenguinCoder您可以更改If(Isna())for Iferror()。小語句,更易於調試。 – AxGryndr

相關問題