在Excel中,如何将未排序的逗号分隔数据从一列提取并转换为多列?

k10s72fa  于 2023-10-21  发布在  其他
关注(0)|答案(3)|浏览(102)

在Excel中,我有一个表,其中行对应于调查的受访者,列对应于受访者对某些问题的回答。
当被问及受访者在他们的土地上种植什么时,他们可以返回一些品种,如谷物,油籽,玉米等。
不幸的是,这个问题的所有答案都被输入到Excel表格的一个单元格中,用逗号分隔,但没有任何顺序。(单元格也可能是空的。)
| 列A|色谱柱B|
| --|--|
| 受调查者1|谷物、油籽|
| 答辩人2|油籽、玉米、谷类|
| 答辩人3|玉米、油籽|
我需要的是每个可能的答案的唯一列(我可以手工完成,因为可能的答案不是那么多),如果该字符串包含在原始单元格中,则每行中有一个“1”,如果该字符串不包含在原始单元格中,则为“0”。结果应如下所示:
| 列A|色谱柱B|谷物|油籽|玉米|
| --|--|--|--|--|
| 受调查者1|谷物、油籽| 1 | 1 | 0 |
| 答辩人2|油籽、玉米、谷类| 1 | 1 | 1 |
| 答辩人3|玉米、油籽| 0 | 1 | 1 |
我想不出有什么办法能自动做到这一点...任何帮助将不胜感激!!!

vsmadaxz

vsmadaxz1#

将此公式放在C2中,并复制/粘贴到三列

=IF(NOT(ISERROR(SEARCH(C$1,$B2))),1,0)

az31mfrm

az31mfrm2#

您可以创建一个自动化的文本到列,这是一个逗号分隔的值,但你可以得到真或假的逗号,空格等需要

Sub Text2Columns()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
Select Case UCase(ws.Name)
    Case "Sheet2", "Sheet3"
        'do nothing
    Case Else
        ws.Columns(1).TextToColumns Destination:=ws.Range("A1"), 
DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
            Tab:=False, _
            Semicolon:=False, _
            Comma:=True, _
            Space:=False, _
            Other:=False, OtherChar:="|", _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 
1)), _
            TrailingMinusNumbers:=True
End Select
Next ws
Application.ScreenUpdating = True
End Sub
xdnvmnnf

xdnvmnnf3#

这里是一个动态数组解决方案(替代方法),它动态地创建头部并溢出1 s和0 s,它还检查确保它不返回任何**FALSE POSITIVES**:

·单元格C1中使用的公式

=LET(
     a, DROP(B1:B4,1),
     b, SEQUENCE(,MAX(LEN(a)-LEN(SUBSTITUTE(a,",",))+1)),
     c, UNIQUE(TOROW(TEXTSPLIT(TEXTAFTER(","&a,",",b),","),2),1),
     w, LAMBDA(x,y,N(ISNUMBER(FIND(","&INDEX(c,,y)&",",","&INDEX(a,x)&",")))),
     VSTACK(c,MAKEARRAY(ROWS(a),COLUMNS(c),w)))

测试用例一:

如果您将头文件分开拆分,请尝试以下公式:

·单元格C2中使用的公式

=MAKEARRAY(ROWS(B2:B4),COLUMNS(C1:E1),LAMBDA(x,y,
 N(ISNUMBER(FIND(","&INDEX(C1:E1,y)&",",","&INDEX(B2:B4,x)&",")))))

相关问题