![1 搜尋字串:](https://rvso.com/image/1542109/1%20%E6%90%9C%E5%B0%8B%E5%AD%97%E4%B8%B2%EF%BC%9A.png)
我有一個很大的用戶群組列表及其各自的用戶名。現在,我想進一步過濾它們。每個使用者的使用者群組都位於一個單元中(使用者名稱 - 使用者群組),因此這表示單一單元中可能有 10-15 個使用者群組。我只想要由“WTS”組成的行,然後將由“WTS”組成的用戶組行放入新單元格中。
我該怎麼做呢?
範例資料:
使用者群組 1 WTS_A、BTS_B、WTS_C、
我想要 WTS_A 和 WTS_C。
答案1
根據我對你的問題的理解,我建議一個兩步驟解決方案。
步驟1- 使用 Excel 中的文字分列功能,將單列文字轉換為多列。使用空格和逗號作為分隔符號。
第2步- 使用自訂 VBA 函數僅將所需儲存格連接到以逗號分隔的單一儲存格。
完成「文字到列」程序後,在工作表上按 ALT + F11 開啟 VBA 編輯器。從插入選單插入模組。將建立 Module1 並且其程式碼編輯器將會開啟。如果沒有,請雙擊左側窗格中的 Module1 以開啟其程式碼編輯器。
將以下程式碼貼到相同的內容中。
Public Function TXTJOIN(argument1 As Range) 'Accept input range
result = ""
colcounter = argument1.Columns.Count
rowcounter = argument1.Rows.Count
If rowcounter > 1 Then
TXTJOIN = CVErr(xlErrValue) 'If row counter > 1 return #VALUE! Error
Exit Function
End If
If colcounter > 255 Then
TXTJOIN = CVErr(xlErrValue) 'If col counter > 255 return #VALUE! Error
Exit Function
End If
For Each element In argument1
If Left(element, 3) = "WTS" And Len(element) > 3 Then
result = result & element & ","
End If
Next element
If result = "" Then
TXTJOIN = result
Else
TXTJOIN = Left(result, Len(result) - 1)
End If
End Function
這將建立一個自訂 TXTJOIN 函數來檢查起始字串是否為「WTS」並連接所有由逗號分隔的此類列
儲存並退出 VBA 編輯器。返回工作表,現在轉到最右列並輸入此函數,指定適用的列範圍。沿著適用行的長度複製或向下拖曳它。您應該在相應的單元格中獲得預期的字串。僅複製其他位置的值並刪除其餘列以清理工作表。
您將獲得#VALUE!在類似情況下此函數會出錯。
您將多維數組傳遞給它,例如 A1:D12
您向其傳遞超過 255 個列範圍。
您將多行數組傳遞給它,例如 A1:A12
讓我知道這是否適合您。
限制 - 假設使用者 ID 以空格或逗號分隔。如果兩者在一起且沒有逗號或空格,則此函數將無法單獨識別兩者。
答案2
您有兩個任務:搜尋有效(有趣)的數據,然後對其進行格式化。
1 搜尋字串:
可以使用「尋找」或「搜尋」功能來搜尋 WTS 等字串。當找到字串時,它們都會向您顯示一個數值,如下所示:FIND("WTS";A1) 或 SEARCH("WTS";A1)
對第一行執行此操作。選擇包含公式副本的儲存格,然後為所有資料行選擇其下方的儲存格並貼上。公式將自動更新為 FIND("WTS";B1)...FIND("WTS";C1)...
我建議此時手動過濾以隱藏出現錯誤的行:#VALUE!
只需刪除那些不提供結果的行即可。
2 拆分用戶群組資料:
當儲存格中有多個由字串(例如破折號“-”)分隔的項目時,請選擇儲存格並使用資料 -> 文字到列 -> 分隔符號 -> 新增分隔符號 - 選擇其他並輸入破折號。
這將獲取您的資料並將其放在多個單元格中,例如 Usergroup1 Usergroup2 Usergroup3 ...
3 額外提示:
如果您想對剛剛拆分的多個儲存格使用查找或搜尋功能,請將這些儲存格串聯成一個儲存格(基本上反轉分割過程),然後搜尋串聯的值。 A7 = 連接(A1;A2;A3) A8 = 尋找(「WTS」;A7)