0

次のような形式のグループとユーザー名を含むExcelドキュメントがあります。

Group1          user1
                user2
                user3
Group2          user2
                user4
Group3          user5

などなど。各グループは単一の行であり、すべてのユーザーがセル内の複数行のエントリとして表示されます。

1行形式である必要があるので、CSVとしてエクスポートして、何か便利なことができます。

どのように変換されるか(Excelホットキー、Pythonスクリプトなど)は関係ありませんが、次のように表示する必要があります。

Group1         user1
Group1         user2
Group1         user3
Group2         user2
Group2         user4
Group3         user5
4

2 に答える 2

0

自分の質問に答えるべきかどうかはわかりませんが、同僚が答えを出すことができました。

VBSを使用して、特に必要なことを実行するモジュールを作成することができました。以下のコードは、iColumn変数が複数行のデータを含む列です。

コードのクレジットはhttp://excel.tips.net/T003263_Splitting_Information_into_Rows.htmlに移動します

Sub CellSplitter1()
    Dim Temp As Variant
    Dim CText As String
    Dim J As Integer
    Dim K As Integer
    Dim L As Integer
    Dim iColumn As Integer
    Dim lNumCols As Long
    Dim lNumRows As Long

    iColumn = 2

    Set wksSource = ActiveSheet
    Set wksNew = Worksheets.Add

    iTargetRow = 0
    With wksSource
        lNumCols = .Range("IV1").End(xlToLeft).Column
        lNumRows = .Range("A65536").End(xlUp).Row
        For J = 1 To lNumRows
            CText = .Cells(J, iColumn).Value
            Temp = Split(CText, Chr(10))
            For K = 0 To UBound(Temp)
                iTargetRow = iTargetRow + 1
                For L = 1 To lNumCols
                    If L <> iColumn Then
                        wksNew.Cells(iTargetRow, L) _
                          = .Cells(J, L)
                    Else
                        wksNew.Cells(iTargetRow, L) _
                          = Temp(K)
                    End If
                Next L
            Next K
        Next J
    End With
End Sub
于 2011-04-07T15:34:04.047 に答える
0

私がタスクを誤解していない限り、ジョブを実行するためのコードははるかに単純になる可能性があります。これは機能するはずです:

Sub ungrouper()

    'Assumes that users column does not contain blank cells.

    Dim users() As Variant
    Dim groups() As Variant
    Dim rngUsers As Range
    Dim rngGroups As Range

    Dim j As Integer
    Dim k As Integer

    'Change Column to match layout of your workbook.
    Set rngUsers = Range("B1", Range("B1").End(xlDown))
    users = rngUsers

    j = 1
    k = 1

    'Change column offset to match the layout of your workbook.
    Set rngGroups = rngUsers.Offset(0, -1)
    groups = rngGroups

    Do While j <= UBound(users)
        If groups(j, 1) = Empty Then
            groups(j, 1) = groups(j - 1, 1)
        End If
        j = j + 1
    Loop

    rngGroups.Value = groups

End Sub
于 2011-04-08T13:00:32.520 に答える