我有一个很长的用户组列表及其各自的用户名。现在,我想进一步过滤它们。每个用户的用户组都在一个单元格中(用户名 - 用户组),这意味着一个单元格中可能有 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 由空格或逗号分隔。如果两个用户 ID 连在一起而没有逗号或空格,则此函数不会分别识别这两个用户 ID。
答案2
您有两个任务:搜索有效(有趣)的数据,然后对其进行格式化。
1 搜索字符串:
可以使用 Find 或 Search 函数来搜索字符串(例如 WTS)。当找到字符串时,它们都会显示一个数值,如下所示:FIND("WTS";A1) 或 SEARCH("WTS";A1)
对第一行执行此操作。选择包含公式副本的单元格,然后选择其下方的所有数据行的单元格并粘贴。公式将自动更新为 FIND("WTS";B1)...FIND("WTS";C1)...
我建议此时手动过滤以隐藏出现错误的行:#VALUE!
只需删除那些没有给出结果的行即可。
2 拆分用户组数据:
当单元格中有多个由字符串分隔的条目(例如破折号“-”)时,请选择您的单元格并使用数据->文本到列->分隔->添加分隔符 - 选择其他并输入破折号。
这会将您的数据放在多个单元格中,例如 Usergroup1 Usergroup2 Usergroup3 ...
3 额外提示:
如果您想对刚刚拆分的多个单元格使用查找或搜索功能,请将这些单元格连接成一个单元格(基本上是反转拆分),然后搜索连接的值。A7 = CONCATENATE(A1;A2;A3) A8 = FIND("WTS";A7)