Board logo

標題: [發問] 從儲存格左邊開始搜尋字串 [打印本頁]

作者: show780106    時間: 2015-11-24 08:48     標題: 從儲存格左邊開始搜尋字串

各位大大好,小弟我想請教一個問題

我想在這一些資料中搜尋出"cotton","polyester","leather","polyurethane"等等有關材質的英文
但這些材質名稱會同時出現在同一格儲存格
但小弟我只需要從左邊開始搜尋到我要的關鍵字
並在欄位B帶出關鍵字即可,如圖片中所示
感謝各位大大的幫助,謝謝.

[attach]22581[/attach]
作者: hcm19522    時間: 2015-11-24 10:41

http://blog.xuite.net/hcm19522/twblog/359554303
作者: yen956    時間: 2015-11-24 11:12

試試看:
  1. Sub test()
  2.     [B:B] = ""
  3.     For i = 1 To [A65536].End(xlUp).Row
  4.         For j = 1 To [C1].End(xlDown).Row
  5.             c = InStr(Cells(i, 1), Cells(j, 3))
  6.             If c > 0 Then
  7.                  Cells(i, 2) = Cells(j, 3)
  8.             End If
  9.         Next
  10.     Next
  11. End Sub
複製代碼

作者: yen956    時間: 2015-11-24 11:38

補圖
[attach]22585[/attach]
作者: 准提部林    時間: 2015-11-24 12:28

同一格〔同時〕含有〔多個〕關鍵字, 如何取? 以何為優先? 或全取出?
作者: yen956    時間: 2015-11-24 13:56

沒考慮到 全取出,
全取出如下:
  1. Private Sub CommandButton1_Click()
  2.     Dim I As Integer, J As Integer, Col1 As Integer, Num As Integer
  3.     [B:H] = ""
  4.     For I = 1 To [A65536].End(xlUp).Row
  5.         Col1 = 2
  6.         For J = 1 To [J1].End(xlDown).Row
  7.             Num = InStr(Cells(I, 1), Cells(J, 10))
  8.             If Num > 0 Then
  9.                  Cells(I, Col1) = Cells(J, 10)
  10.                  Col1 = Col1 + 1
  11.             End If
  12.         Next
  13.     Next
  14. End Sub
複製代碼
[attach]22588[/attach]
作者: show780106    時間: 2015-11-24 14:45

感謝各位大大的幫忙,經測試後是成功的,小弟我感激不盡
作者: show780106    時間: 2015-11-24 15:31

yen956版大您好,我發現一個問題,當在帶出欄位B,C,D,的時候,資料會先以欄位J1,J2,J3,J4依序帶出
例如欄位A="SDLFSKLSDpolesterSDASDcottonDFDSCCV",
欄位B=cotton,欄位C=polester
若我想從欄位A的左邊開始搜尋抓出關鍵字
欄位B我希望=polester ,欄位C=cotton
這樣該如何撰寫程式呢?
作者: 准提部林    時間: 2015-11-24 18:53

G1:G4
cotton
polyester
leather
polyurethane


B1.陣列公式:右拉四格,下拉(依出現次序顯示)
=INDEX($G:$G,RIGHT(SMALL(IF(1-ISERR(FIND($G$1:$G$4,$A1)),FIND($G$1:$G$4,$A1)*10^5+ROW($1:$4),10^9+4^8),COLUMN(A$1)),5))&""


<陣列公式>輸入法:
輸入或修改公式完成後,游標留在〔編輯列〕,先不要按Enter,
同時按住〔Shift + Ctrl〕不放,再按〔Enter〕。

作者: show780106    時間: 2015-11-24 23:00

回復 9# 准提部林

感謝准提部林版大的協助,謝謝.
作者: show780106    時間: 2015-11-25 18:39

回復 9# 准提部林


    准提部林版大您好,如果要再新增其他材質在G1:G20的話,函數會無法正確帶出或呈現空白
如附檔所示,我希望在G2下陣列公式(函數),參照搜尋關鍵字在 工作表:材質!D2:D20
我希望參照位置爾後可以再新增,所以位置拉到D20,希望版大能夠協助,謝謝.
作者: 准提部林    時間: 2015-11-25 19:14

回復 11# show780106


G2.陣列公式:
=INDEX(材質!$D:$D,RIGHT(SMALL(IF(1-ISERR(0/(FIND(材質!$D$1:$D$20,"|"&$D2)>1)),FIND(材質!$D$1:$D$20,$D2)*10^5+ROW($D$1:$D$20),10^9+4^8),COLUMN(A$1)),5))&""

參考附檔:
[attach]22599[/attach]
作者: 准提部林    時間: 2015-11-25 19:48

回復 11# show780106

Sub TEST()
Dim xArea As Range, Arr, Brr, N&, i&, TR, T, TT$, xClmn As Range, xR As Range
Application.ScreenUpdating = False
[D:D].Copy [G:G]
Set xArea = Range([G2], [G65536].End(xlUp))
Set xClmn = Range([材質!D2], [材質!D65536].End(xlUp))
For Each xR In xClmn
  If xR <> "" Then xArea.Replace xR, "_||" & xR & "_", Lookat:=xlPart
Next
 
Arr = xArea.Value
ReDim Brr(1 To UBound(Arr), 1 To xClmn.Count)
For i = 1 To UBound(Arr)
  TR = Split(Arr(i, 1), "_"):   N = 0:   TT = ""
  For Each T In TR
    If Left(T, 2) = "||" And InStr(TT, T) = 0 Then
     TT = TT & T:   N = N + 1:   Brr(i, N) = Mid(T, 3)
    End If
  Next
Next i
 
With [G2].Resize(UBound(Arr), xClmn.Count)
   .Value = Brr
   .Columns.AutoFit
End With
Beep
End Sub

參考附檔:
[attach]22601[/attach]
作者: yen956    時間: 2015-11-25 19:57

本帖最後由 yen956 於 2015-11-25 19:59 編輯

還是准版大的公式利害!!
由左至右依序全取出:
  1. Private Sub CommandButton1_Click()
  2.     Dim I As Integer, J As Integer
  3.     Dim Col1 As Integer, Num As Integer
  4.     [B:H] = ""
  5.     For I = 1 To [A65536].End(xlUp).Row
  6.         For J = 1 To [J1].End(xlDown).Row
  7.             Num = InStr(Cells(I, 1), Cells(J, 10))
  8.             If Num > 0 Then
  9.                  Cells(J, 11) = Num
  10.             Else
  11.                  Cells(J, 11) = 10000
  12.             End If
  13.         Next
  14.         [J:K].Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlNo
  15.         Col1 = 2
  16.         For J = 1 To [J1].End(xlDown).Row
  17.             If Cells(J, 11) < 9999 Then
  18.                 Cells(I, Col1) = Cells(J, 10)
  19.                 Col1 = Col1 + 1
  20.             End If
  21.         Next
  22.     Next
  23.     [K:K] = ""
  24. End Sub
複製代碼
[attach]22602[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)