我有兩張不同的圖紙,其中包含500多個名稱。我需要查看一張紙上的名字是否存在於另一張紙上。如果它在指定的列中確定是或否。使用VBA檢查單元格值是否存在於兩張不同的圖紙中
這個名字在一張紙上就像是ASmith,然後是另一張紙上的ASMITH,因此不需要區分大小寫。
我很困惑的VBA部分。我在java中編程,在java中做這種事對我來說很簡單。但在Excel中,並不是那麼重要。你的幫助表示讚賞。 TIA
我有兩張不同的圖紙,其中包含500多個名稱。我需要查看一張紙上的名字是否存在於另一張紙上。如果它在指定的列中確定是或否。使用VBA檢查單元格值是否存在於兩張不同的圖紙中
這個名字在一張紙上就像是ASmith,然後是另一張紙上的ASMITH,因此不需要區分大小寫。
我很困惑的VBA部分。我在java中編程,在java中做這種事對我來說很簡單。但在Excel中,並不是那麼重要。你的幫助表示讚賞。 TIA
首先,Visual Basic不關心區分大小寫,所以當比較兩張表時,您需要使用VBA.UCase將所有內容轉換爲大寫。我還包括修剪功能,因爲這個詞本身可能有空格。任何需要創建兩個可比較字符串的文本操作都必須進行研究。我推薦使用expert guidance來處理Excel宏中的文本字符串
因此......假設兩張表都在同一個工作簿中,最好的出發點是從Visual Basic編輯器中獲取兩張表的代號(默認情況下,Sheet1/Sheet2等)。在下面,我假定Sheet1是輸出表格,而Sheet2是您正在搜索的數據。如果你不能罰款代號,你可以在下面的代碼替換表(「SheetName1」)和表(「SheetName2」):
Dim SourceRow as Long
Dim DestRow as Long
For DestRow = 1 to 10
For SourceRow = 1 to 10
If VBA.Trim(VBA.UCase(Sheet1.Cells(DestRow,"DestCol"))) = VBA.Trim(VBA.UCase(Sheet2.Cells(SourceRow,"SourceCol"))) then
Sheet1.Cells(DestRow,"OutputCol") = "Yes"
Goto NextDestRow
End If
Next SourceRow
Sheet1.Cells(DestRow,"OutputCol") = "No"
NextDestRow:
Next DestRow
的代碼假定您在單個列搜索數據在每張紙上以及我寫過「DestCol」和「SourceCol」的地方,你應該簡單地插入該列的數值(其中A = 1,B = 2等)。 「OutputCol」是要將輸出放置在目標工作表上的列
循環假定您對每張工作表上的行1至10感興趣;根據需要調整
嘗試是這樣的:
Sub HTH()
With Sheet1.Range("B1", Sheet1.Cells(Rows.Count, "B").End(xlUp))
.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],Sheet2!C[-1],1,FALSE)),""NO"",""YES"")"
.Value = .Value
End With
End Sub
注意
假設查找值在Sheet1列A,查找列是Sheet2的A列宿是/否在Sheet1中柱B顯示是否找到值。 Vlookup不區分大小寫。您將需要更改R1C1參考/列以適合您的工作簿。
它會執行得非常快。
你只需要比較一個列表與另一個列表,還是兩者對彼此? –
你有沒有考慮過VLookUp http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspx? – Fionnuala
應該提及在哪張表和哪張表上指定的列?爲什麼你不解釋它更簡單的方式比我們可以幫助你,而不是做出假設 – niko