在第一列中包含一次数字,并将它们转换为列标题

时间:2015-10-12 13:21:15

标签: excel vba excel-vba csv

我正在处理来自医院的数据,当我将.csv扩展名添加到我的文本文件时,它们按以下方式输出:

Data Sample

如果只有一种方法可以在第一列中包含数字,并将它们转换为列标题,那么管理会容易得多。然后在第二列中的前十个,在下面添加并转置它们,然后进行下一个十。最终产品看起来像这样:

Final Result

我尝试过手动转置它们,但由于有数百万个文件,因此CSV非常广泛。我已经在Excel中寻找一种方法来做到这一点,但我什么都没发现。

有人可以帮助我使用宏吗?

2 个答案:

答案 0 :(得分:1)

如果数字完全重复,可以使用excel公式。

如果数据位于A列和A列中。 B,以下公式可以放在C2中:

=INDEX($B:$B,(ROW(C1)-1)*10+COLUMN(A$1))

然后根据需要向右和向下复制。

答案 1 :(得分:0)

您没有提到每个“行”的行号序列(1,90,100,120 ...)是否始终相同。从你的样本中,我将假设这些数字以无限的方式重复。

首先,将CSV导入Microsoft Access。假设您的第一列称为RowID,第二列称为Description。 RowID是一个整数,Description是备注字段。

添加第三列,即整数,并将其命名为“Ord”(无引号)。

在Access的VBA编辑器中添加一个包含此GroupIncrement函数的新模块:

Function GroupIncrement(ByVal sGroup)
    Static Num, LastGrp

    If (StrComp(LastGrp, Nz(sGroup, "")) <> 0) Then
        Num = 0
    End If
    Num = Num + 1
    GroupIncrement = Num

    LastGrp = sGroup
End Function

创建一个新查询,将MyTable替换为包含CSV数据的Access表的名称:

UPDATE (SELECT * FROM [MyTable] 
 ORDER BY [RowID]) SET [Ord]=GroupIncrement([RowID])

创建第三个查询:

TRANSFORM First([Description])
SELECT [Ord]
FROM [MyTable]
GROUP BY [Ord]
PIVOT [RowID]

这应该将数据放入您想要的格式(左侧有一个额外的列,Ord)。

在Access中,突出显示该查询并选择“外部数据”,然后在“导出”部分中选择“Excel”。将查询导出到Excel。

在Excel中打开文件并删除Ord列。