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

これは 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 にインポートし、区切り文字としてコンマを使用してテキストを列に分割します。
3 つの行を下に移動し、「label1 label2 label3」の 1 つのセットを「data」列の上に移動します。
「ラベル」列と空白行を削除します。
列を書式設定されていないテキストとして Word にコピーします。
挿入 > 表 -表、テキストを列数 = 3 の表に変換します。
Excel にコピーし直して、カンマ区切り ( &","&)で行ごとに連結します。

于 2013-04-22T19:37:40.237 に答える