0

我有一个格式如下的 CSV:

label1,data1
label2,data2
label3,data3

label1,data4
label2,data5
label3,data6

... etc ...

我正在尝试将它在 Excel 中转换为这种格式:

label1,label2,label3
data1,data2,data3
data4,data5,data6

我认为使用内置工具不可能做到这一点,所以我正在考虑为它编写一个宏,但我是 PowerShell/C# 人员,而不是 VB 人员。任何帮助或指导将不胜感激!

4

2 回答 2

1

我将假设这是一次性的事情,并且电子表格公式将适合您。

您可以在 OzGrid 上使用来自mikerickson的自定义电子表格函数来连接所有具有公共标签的数据。

首先,您需要获取所有唯一值:

示例 1

然后你需要使用这个自定义函数来查找和连接具有公共标签的值:

Function ConcatIf(ByVal compareRange As Range, ByVal xCriteria As Variant, _
    Optional ByVal stringsRange As Range, Optional Delimiter As String) As String
    Dim i As Long, j As Long, criteriaMet As Boolean

    Set compareRange = Application.Intersect(compareRange, _
    compareRange.Parent.UsedRange)

    If compareRange Is Nothing Then Exit Function
    If stringsRange Is Nothing Then Set stringsRange = compareRange
    Set stringsRange = compareRange.Offset(stringsRange.Row - compareRange.Row, _
    stringsRange.Column - compareRange.Column)

    For i = 1 To compareRange.Rows.Count
        For j = 1 To compareRange.Columns.Count
            If (Application.CountIf(compareRange.Cells(i, j), xCriteria) = 1) Then
                ConcatIf = ConcatIf & Delimiter & CStr(stringsRange.Cells(i, j))
            End If
        Next j
    Next i
    ConcatIf = Mid(ConcatIf, Len(Delimiter) + 1)
End Function

示例 2

如果需要,您可以进行额外的连接来组合您的标签:

示例 3

然后,您可以将其直接粘贴到文本编辑器中,也可以按原样使用,如果需要,可以将其保存为 csv:

示例 4

然后你在 excel 中打开它并根据需要转置它:

示例 5

有点绕圈子的方法,但在我看来,这比编写宏要容易 - 至少稍微有点。祝你好运。

于 2013-04-22T19:34:15.063 回答
0

最合适的技术可能在某种程度上取决于您需要执行此操作的频率以及您拥有多少数据块,但宏不是必需的:

导入 Excel 并将文本拆分为以逗号作为分隔符的列。
分流三行并将一组“label1 label2 label3”移动到“数据”列上方。
删除“标签”列和空白行。
将列作为无格式文本复制到 Word 中。
插入 > 表格 - 表格,将文本转换为列数 = 3 的表格。
复制回 Excel 并使用逗号分隔符 ( &","&)按行连接

于 2013-04-22T19:37:40.237 回答