返回列表 上一主題 發帖

[發問] 從儲存格左邊開始搜尋字串

[發問] 從儲存格左邊開始搜尋字串

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

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

未命名.jpg (184.19 KB)

未命名.jpg

本帖最後由 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
複製代碼
test.gif

TOP

回復 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

參考附檔:
Xl0000191-v01.rar (28.58 KB)

TOP

回復 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))&""

參考附檔:
Xl0000191.rar (81.27 KB)

TOP

回復 9# 准提部林


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

材質搜尋函數.rar (25.64 KB)

TOP

回復 9# 准提部林

感謝准提部林版大的協助,謝謝.

TOP

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〕。

TOP

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

TOP

感謝各位大大的幫忙,經測試後是成功的,小弟我感激不盡

TOP

沒考慮到 全取出,
全取出如下:
  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
複製代碼
test.gif

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題