如何将行传输到excel中的关系边缘

时间:2013-01-19 03:18:10

标签: excel vba

我在excel表中有以下数据

A,B,C
D,E,F

我想将其转换为

A,B
A,C
B,C
D,E
D,F
E,F

我有以下宏,只能做到这一点:

A,B
A,C
D,E
D,F

如何调整以下代码以达到此目的?

Dim targetRowNumber As Long
targetRowNumber = Selection.Rows(Selection.Rows.Count).Row + 2

Dim col1 As Variant
Dim cell As Range

Dim sourceRow As Range: For Each sourceRow In Selection.Rows

    col1 = sourceRow.Cells(1).Value
    For Each cell In sourceRow.Cells

        If Not cell.Column = Selection.Column Then
            Selection.Worksheet.Cells(targetRowNumber, 1) = col1
            Selection.Worksheet.Cells(targetRowNumber, 2) = cell.Value
            targetRowNumber = targetRowNumber + 1
        End If

    Next cell

Next sourceRow

1 个答案:

答案 0 :(得分:0)

我在你的宏中添加了第二个循环来实现我理解的结果:

Dim targetRowNumber As Long
targetRowNumber = Selection.Rows(Selection.Rows.Count).Row + 2

Dim col1 As Variant
Dim cell As Range
Dim colCounter As Long
Dim colCounter2 As Long

Dim sourceRow As Range: For Each sourceRow In Selection.Rows

    For colCounter = 1 To Selection.Columns.Count - 1

        'col1 = sourceRow.Cells(colCounter).Value
        'For Each cell In sourceRow.Cells
        col1 = sourceRow.Cells(colCounter).Value
        For colCounter2 = colCounter + 1 To Selection.Columns.Count
            Set cell = sourceRow.Cells(, colCounter2)

            If Not cell.Column = Selection.Column Then
                Selection.Worksheet.Cells(targetRowNumber, 1) = col1
                Selection.Worksheet.Cells(targetRowNumber, 2) = cell.Value
                targetRowNumber = targetRowNumber + 1
            End If

        Next colCounter2

    Next colCounter

Next sourceRow

请注意,如果将选区复制到局部变量(数组)中以便在其中工作,在数组中创建结果,然后在完成后将内容复制回工作表,则性能会大大提高。除非您正在处理更大的数据集,否则这可能并不重要。