我試圖在我的第一張表中獲取具有特定條件的行號匹配,Sheet1然后復制格式并將其粘貼Sheet2到查找值匹配的第二張表中。
我在 Sheet1 中有這樣的資料:
| 一個 | 乙 | |
|---|---|---|
| 標題 | 狀況 | |
| 1 | 顏色1 | 一個 |
| 2 | 顏色2 | 乙 |
| 3 | 顏色4 | C |
| 4 | 顏色2 | D |
| 5 | 顏色1 | 一個 |
| 6 | 顏色2 | D |
在 Sheet2 中是這樣的:
像這樣:
| 一個 | 乙 | C | |
|---|---|---|---|
| 標題 | 狀況 | ||
| 1 | 顏色1 | 一個 | |
| 2 | 顏色2 | D | |
| 3 | 顏色5 | C | |
| 4 | 顏色2 | 乙 |
我來到以下代碼來完成第一列匹配(結果在 C 列):
Sub colorcopy()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng1 As Range, rng2 As Range, lookup1 As Range, lookup2 As Range, result As Range
Dim mtch As Variant
Dim i As Long, lr1 As Long, lr2 As Long
Set ws1 = Sheet1
Set ws2 = Sheet2
With ws1
lr1 = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
With ws2
lr2 = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Set rng1 = ws1.Range("A1:A" & lr1)
Set rng2 = ws1.Range("B1:B" & lr1)
For i = 1 To lr2
Set lookup1 = ws2.Range("A" & i)
Set lookup2 = ws2.Range("B" & i)
Set result = ws2.Range("C" & i)
mtch = Application.Match(lookup1, rng1, 0)
If Not IsError(mtch) Then
ws1.Range("A" & mtch).Copy result
End If
Next i
End Sub
但后來我希望代碼能夠在多個條件下作業 (2)。
我想從 Sheet1 中的查找值復制 A 列和 B 列的資料匹配的單元格,以在 Sheet2 中匹配。
在公式形式中,這將像=MATCH(1,INDEX((Range1=Value1)*(Range2=Value2),),0)第一行一樣完成。這似乎無法用于Application.Match,但我被困在這里。
sheet1的顏色是這樣的:

當前代碼的結果是這樣的:
想要的結果是:

uj5u.com熱心網友回復:
這是有關此事的較早帖子,但是(正如我之前在評論中提到的),在查找/匹配任何值時連接值很少是一個好主意。而是使用以下公式:
=MATCH(1,INDEX((Range1=Value1)*(Range2=Value2),),0)
在您當前的代碼中,這將導致一個更改:
mtch = Application.Match(lookup1, rng1, 0)
進入;
mtch = ws1.Evaluate("MATCH(1,(A:A=""" & lookup1.Value & """)*(B:B=""" & lookup2.Value & """),0)")
注意 1:由于這是一個陣列公式,它可能需要大量處理,并且計算時間會變得很長
注意2:作業表公式包含一個INDEX()不再需要的嵌套,因為Evalute()將處理所有公式,就好像它們是 CSE 輸入的一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405386.html
標籤:
上一篇:將公式轉換為值并洗掉特殊字符
