как преобразовать три столбца в матрицу с помощью макроса - PullRequest
1 голос
/ 04 июня 2011

Мне нужна помощь в преобразовании трех столбцов в матрицу с помощью макроса 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 голосов
/ 12 августа 2011

Вы также можете выполнить это без VBA.

Предположим, ваша таблица данных находится в диапазоне A1: C9. Предположим, что первое число (0) в сетке данных 3 на 3 - это ячейка 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)))

Скопируйте эту формулу во все 9 ячеек сетки 3 на 3.

Это обобщено для любого размера данных.

0 голосов
/ 06 июня 2011

Не совсем уверен, что именно вы подразумеваете под матрицей. Для приведенного ниже кода я предположил, что вы искали способ чтения данных в первых двух столбцах как данных строк и столбцов выходной таблицы. Предположим, что входные данные находятся в столбцах 1 - 3 «Sheet1»

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...