将 CSV 转换为行而不是列

将 CSV 转换为行而不是列

我有一个文件,其中 A 列包含唯一引用(例如公司名称),B 列中返回一个或多个与该唯一值相关的值(例如帐户)。这些值以逗号分隔,有些公司只有一个帐户,有些则有多个。使用“文本到列”,我便可以在与公司名称相同的行上获得单独的列中的所有帐号。

我希望将每个帐号放在一个新行上,每个帐号都对应公司名称,这样我就有一张只有 2 列宽的工作表,可以在单个帐户级别进行搜索,同时返回正确的公司。这可能吗?

答案1

您可以使用 Excel 公式“手动”分隔数据。如果您使用此公式,它将找到逗号的第一个出现位置,然后修剪到该出现位置:

=IF(A1="","",IFERROR(MID(A1,1,FIND(",",A1)-1),A1))

在我们拥有初始数据的单元格下(在我们的例子中,A1 是我们的初始数据),我们需要索引数据以不包括我们刚刚删除的内容:

=MID(A1,LEN(B1)+2,LEN(A1))

以下是所有组件协同工作的示意图:

在此处输入图片描述

答案2

@Jonnie,如果您要使用 TextToColumns 将帐号分散到各个列中。然后转到菜单“屏幕”,然后单击右侧宏上方的图标。输入宏的名称,然后单击“创建”。然后将下面的代码粘贴到两行之间,并使用 sub。关闭 VBA 窗口以返回到您的数据。单击数据中的任意位置。再次单击宏的图标,选择您的宏名称,然后单击运行。

Dim data As Range
Dim i As Integer
Dim j As Integer

Set data = ActiveCell.CurrentRegion 'Selecting the active region

For i = data.Rows.Count To 1 Step -1 'for all row (start at bottom)
    For j = 3 To data.Columns.Count 'for all columns (start at third column)
        If Not IsEmpty(data(i, j)) Then 'if there is a value
            data.Rows(i + 1).Insert 'insert a new row below
            data(i + 1, 1) = data(i, 1) 'copy the company
            data(i + 1, 2) = data(i, j) 'copy the account number
            data(i, j).Clear 'delete the original value
        End If
    Next j
Next i

这将产生一个列表

company A; accno 1
company A; accno 2
company B; accno 3
company C; accno 4

相关内容