簡體   English   中英

Excel:檢查列中是否存在單元格字符串值,並獲取對該字符串的所有單元格引用

[英]Excel: Check if cell string value exists in column, and get all cell references to that string

我懷疑這可能是VBA的工作,這超出了我的能力范圍。 但是這是場景:

工作表1(CAS1)中的A列包含x行文本值

工作表2(CAS2)中的A列包含x行文本值

A部分-對於CAS1中的每個行值,我需要知道該字符串是否包含在CAS2中的任何單元格中。 不完全匹配,字符串只能是搜索到的單元格的一部分。

B部分-我需要知道CAS2中包含CAS1值的每個單元格的單元格值(如果它們確實存在,則可以在與CAS1中正在搜索的單元格相鄰的單元格中列出它們)。

我嘗試了以下嘗試A部分的嘗試,但都無濟於事:

vlookup(A1,sheet2!A:A,1,false)
NOT(ISNA(MATCH(A1,sheet2!A:A,0)))
ISNUMBER(MATCH(A1,sheet2!A:A,0))
COUNTIF(sheet2!A:A,A1)>0 
IF(ISERROR(MATCH(A1,sheet2!A:A, 0)), "No Match", "Match")

我知道CAS2中的某些單元格值包含CAS1中的單元格值,所以我不知道為什么它們返回false或No Match。 我懷疑這可能取決於文本內容的性質。 所以這是一些示例數據:

CAS1

LQ056
RV007H
RV008
RV009H
TSN304
TSN305

CAS2

RV009-satin-nickel-CO.jpg
STR314.jpg
STR315.jpg
HCY001.jpg
RV008-oval-rad-CO.jpg
HCY001-BRAC006.jpg

任何幫助,將不勝感激。

通過VBA可以解決此問題(至少,我認為VBA解決方案比可能的Excel解決方案容易得多)。 您需要一個宏,該宏針對CAS1中的每一行,搜索CAS2中每一行的內容並返回地址。

For Each cell In Sheets("CAS1").Range("A1:A" & Sheets("CAS1").Range("A1").End(xlDown).Row) '<-- check each cell of the range A1:A? of sheet CAS1 (adapt "A" and "1" if they're different)
    recFound = 0 '<-- count how many findings there are
    For Each cell2 In Sheets("CAS2").Range("A1:A" & Sheets("CAS2").Range("A1").End(xlDown).Row) '<-- check in each cell of the range A1:A? of sheet CAS2 (adapt "A" and "1" if they're different)
        If InStr(cell2.Value, cell.Value) <> 0 Then '<-- if the value in cell is contained in the value in cell2..
            recFound = recFound + 1 '<-- account the new finding
            cell.Offset(0, recFound) = Split(cell2.Address, "$")(1) & Split(cell2.Address, "$")(2) '<--write the address on the right of the currently searched cell
        End If
    Next cell2
Next cell

以上所有內容均應包含在宏中,例如Sub makeMySearch() ,應運行該宏以獲取結果。 如我的代碼中所述,我假設數據在A1:A? 在兩張紙上; 但是它們當然可能例如在B5:B? 表1和C7:C? 表2的內容。您需要清楚地使代碼適應當前數據。

不需要VBA。 一些簡單的數組公式可以完成這項工作。

要查看CAS2中是否存在CAS1中的條目:

=OR(ISNUMBER(SEARCH(A2,CAS2_)))

將返回TRUE或FALSE。 但是必須在按下ENTER 鍵的同時按住CTRL-SHIFT鍵輸入此公式。如果正確執行此操作,Excel會將括號{...}放在可以在公式欄中看到的公式周圍。

SEARCH函數返回一個結果數組,該數組將為#VALUE! 錯誤或數字。

為了返回地址,可以在CAS1中的一個單元格附近輸入以下數組公式

=IFERROR(ADDRESS(LARGE(ISNUMBER(SEARCH($A2,CAS2_))*ROW(CAS2_),COLUMNS($A:A)),1),"")

向右填寫以獲取最大可能的地址,然后選擇組並填寫。

在這種情況下,返回的數組是一個0或1 *行號(即行號)的字符串。 我假設CAS2中的數據在A列中,但是您可以根據需要更改列號(甚至可以根據需要進行計算,方法是將ADDRESS函數中的1替換為COLUMN(CAS2_)

CAS1_和CAS2_是兩個文本組的命名范圍或絕對范圍引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM