請各位大神幫忙
在"收貨地址"內,搜尋"需查找內容"的資料,並回傳被搜尋到的內容
需查找的內容字數不一、位置不一,也有可能一個地址有兩個"需查找內容"在內(可二擇一顯示)
例如行2.行6,各有關鍵字在"需查找內容"內
有找到則回傳被"需查找內容"搜索到的欄位
沒有則顯示"-"
請問這樣有辦法做到嗎?還是回傳欄位只能單純顯示"有找到"、"無找到"
電腦版本是使用office2016,附google試算表
https://docs.google.com/spreadsheets/d/1VVgOl6O-S8N2sdb7uhlTfMwlkT0rKpH2mKcT8vB65bo/edit#gid=0
VBA :
Private Sub CommandButton1_Click()
For i = 2 To Range("B2").End(xlDown).Row
  Cells(i, 3) = ""
  For k = 2 To Range("E2").End(xlDown).Row
    If RTrim(Cells(i, 2)) Like "*" & RTrim(Cells(k, 5)) & "*" Then
      If RTrim(Cells(i, 3)) <> "" Then
        Cells(i, 3) = RTrim(Cells(i, 3)) & ","
      End If
      Cells(i, 3) = RTrim(Cells(i, 3)) + RTrim(Cells(k, 5))
    End If
  Next k
  If Cells(i, 3) = "" Then
    Cells(i, 3) = "-"
  End If
Next i
End Sub

好讚喔!我成功了!!!謝謝rogeryao大師
如果我需要分成不同工作表sheet1(地址+回傳結果)和sheet2(需查找內容)的話,公式要怎麼修改呢?我自己試都失敗QQ



Private Sub CommandButton1_Click()
For i = 2 To Worksheets("工作表1").Range("B2").End(xlDown).Row
  Worksheets("工作表1").Cells(i, 3) = ""
  For k = 2 To Worksheets("工作表2").Range("A2").End(xlDown).Row
    If RTrim(Worksheets("工作表1").Cells(i, 2)) Like "*" & RTrim(Worksheets("工作表2").Cells(k, 1)) & "*" Then
      If RTrim(Worksheets("工作表1").Cells(i, 3)) <> "" Then
        Worksheets("工作表1").Cells(i, 3) = RTrim(Worksheets("工作表1").Cells(i, 3)) & ","
      End If
      Worksheets("工作表1").Cells(i, 3) = RTrim(Worksheets("工作表1").Cells(i, 3)) + RTrim(Worksheets("工作表2").Cells(k, 1))
    End If
  Next k
  If Worksheets("工作表1").Cells(i, 3) = "" Then
    Worksheets("工作表1").Cells(i, 3) = "-"
  End If
Next i
'
MsgBox "搜尋完成"
Worksheets("工作表1").Activate
End Sub
我的做法比較笨,先在D欄建一輔助欄。
D2:
=IFERROR(MATCH(""&E2&"",B:B,0),"")
再將公式複製到D3:D8,主要是抓取那筆記錄包含E欄關鍵字。
C2:
=IFERROR(VLOOKUP(ROW(),$D$2:$E$10,2,0),"-")
再將公式複製到C3:C10,主要是顯示包含的關鍵字。
這只能針對每個關鍵字只有一筆符合記錄,每筆記錄只能符合一個關鍵字。
我習慣資料逐一橫列處理,所以先將要「查找內容」轉置貼到欄位位置。
(1) 輔助格 (淡紫色網底的儲存格) 如果地址包含關鍵字,則回傳關鍵字。
C3 儲存格公式:如果 $B3 (地址) 儲存格包含 C$2 關鍵字,則回傳 C$2 關鍵字,若無則回傳空值。為什麼使用 COUNT 函數請看這篇文章 Excel 布林搜尋多個關鍵字。
=IF(COUNT(SEARCH(C$2, $B3)), C$2, "")
下圖淡紫色網底的儲存格,可以看到如果地址包含查找內容,就會回傳
(2) 輔助格 (深紫色網底的儲存格) 將輔助格 (淡紫色) 可能有多個符合的關鍵字,用逗號黏在一起,如果沒有內容則回傳 - 符號。
I3 儲存格公式:使用 Office 365 或 Google 試算表才支援的 TEXTJOIN 函數,將 C3:H3 欄位值,用逗號黏在一起。如果比較舊版 Excel 則要自行改寫成 C3&","&D3 ...。再使用 LEN 判斷黏在一起的欄位值文字長度是否是 0,如果是 0 ,則回傳 - 符號。
=IF(LEN(TEXTJOIN(",", 1, C3:H3))>0, TEXTJOIN(",", 1, C3:H3), "-")

可自行線上操作的連結
請問如果"需查找內容"內的資料多達上百條,還適合將資料逐一橫列處理嗎?雖然得到了回傳的搜尋結果,中間可以用隱藏忽略,但似乎不利於將來"需查找內容"的資料更新&新增。
「回傳搜尋結果」從 I 欄往前移到 C 欄,日後新增的關鍵字就比較方便往最右邊放。

C3 欄位格公式中「需查找內容」儲存格範圍,雖然還沒有到 Z 欄,可以用 D3:Z3 預留比較彈性的範圍
=IF(LEN(TEXTJOIN(",", 1, D3:Z3))>0, TEXTJOIN(",", 1, D3:Z3), "-")
上百條還不會到 Excel 的規格及限制工作表上的總列數和欄數 限制:1,048,576 列乘以 16,384 欄。但是如果日後資料真得太多,我不會使用 Excel 太複雜的操作以及速度會變慢兩個原因,而改用資料庫。
可自行線上操作的連結「工作表2」