如何使用宏将三列转换为矩阵

时间:2011-06-03 20:47:30

标签: excel-vba vba excel

我需要一些帮助,使用excel宏将三列转换为矩阵。 这是一个例子:

由此:

A A 0
A B 23
A C 3
B A 7
B B 56
B C 33
C A 31
C B 6
C C 5

到此:

   A   B  C
A  0  23  3
B  7  56 33
C 31   6  5

希望你能帮帮我 谢谢

2 个答案:

答案 0 :(得分:0)

不完全确定矩阵究竟是什么意思。对于下面的代码,我假设您正在寻找一种方法来读取前两列中的数据作为输出表的行和列数据。假设输入数据位于“Sheet1”的第1 - 3列

Sub ConvertTableOfData()
Dim testArray(1 to 3)
Dim chkROW as Integer
Dim chkCOL as Integer
Dim chkVAL as Integer

'// index the Row and Column headers
testArray(1) = "A"
testArray(2) = "B"
testArray(3) = "C"

'// Iterate through every row in the initial dataset
For i = 1 to Worksheets("Sheet1").Cells(1, 1).End(xlDown).Row

    With Worksheets("Sheet1")
        '// Assign the Output Row and Column values 
        '// based on the array indices
        For j = 1 to UBound(testArray, 1)
            If .Cells(i, 1) = testArray(j) Then
                chkROW = j
            End If
            If .Cells(i, 2) = testArray(j) Then
                chkCOL = j
            End If
        Next j

        '// store the actual value
        chkVAL = .Cells(i, 3)
    End With

    '// output table (in Sheet2)
    With Worksheets("Sheet2")
        .Cells(chkROW, chkCOL) = chkVAL
    End With
Next i

'// Add headers to Output table
For i = 1 to 3
    With Worksheets("Sheet2")
        .Cells(i + 1, 1) = testArray(i)
        .Cells(i, i + 1) = testArray(i)
    End With
Next i
End Sub

答案 1 :(得分:0)

您也可以在没有VBA的情况下执行此操作。

假设您的数据表在A1:C9范围内。 假设3乘3数据网格中的第一个数字(0)是单元格F3,上面一行中有A,B,C,左边一列中有A,B,C。

在单元格F3中输入公式

=INDEX($C$1:$C$9,SUMPRODUCT(--($A$1:$A$9=$E3),--($B$1:$B$9=F$2),ROW($A$1:$A$9)))

将此公式复制到3乘3网格中的所有9个单元格。

这概括为任何大小的数据。