我遇到了同樣的問題,使用數據透視表...完美的總結,但不適用於文本矩陣。
我剛剛「舉起」了一些我使用過的代碼示例。在這裏,我有列A-D中的數據,並在列F周圍構建矩陣(在同一張表中)。
檢查是否有幫助。
我仍然無法讓代碼看起來正確,所以請注意,代碼窗口之前有很多代碼開始。
代碼示例1:
'Fill in the values
Sheets("TempFile").Select
ListRow = 1
MisMatchCounter = 0
Do Until Cells(ListRow, 1).Value = ""
' Get table entry from third column of list.
TableEntry = Cells(ListRow, 3).Value
On Error Resume Next
If Err.Number > 0 Then MsgBox Err.Number
' Get position of product name within range of row titles.
If TableEntry <> "" Then
TableRow = Application.Match(Cells(ListRow, 1), Range("F3:" & MYLastRowAddress), 0) ' 2 rows less than reality
' Get position of product size within range of column titles.
TableColumn = Application.Match(Cells(ListRow, 2), Range("G2:" & MYLastColAddress), 0)
Set CellToFill = Range("F2").Offset(TableRow, TableColumn)
' If there's already an entry in the cell, separate it from the new entry with a comma and space.
If Err.Number = 0 Then
If CellToFill.Value <> "" Then
CellToFill.Value = CellToFill.Value & ","
CellToFill.Value = CellToFill.Value & TableEntry
Else
CellToFill.Value = TableEntry
End If
Else
MisMatchCounter = MisMatchCounter + 1
Sheets("Errors").Cells(MisMatchCounter, 1).Value = ListRow
Sheets("Errors").Cells(MisMatchCounter, 2).Value = Cells(ListRow, 1)
Sheets("Errors").Cells(MisMatchCounter, 3).Value = Cells(ListRow, 2)
Sheets("Errors").Cells(MisMatchCounter, 4).Value = Cells(ListRow, 3)
Sheets("Errors").Cells(MisMatchCounter, 5).Value = Cells(ListRow, 4)
End If
End If
On Error GoTo 0
ListRow = ListRow + 1
Loop
代碼示例2:
Sub CreateManualMatrix()
Dim TableRow, TableColumn As Integer
Dim TableEntry As String
Dim CellToFill As Range
'Sheet is called Lijst
'Column A is names for top row
'Column B is names for left column
'Column C is value for Matrix
'Matrix Top Row starts at H1
'Matrix Left Column starts at G2
MatrixLastColAddress = Range("H1").End(xlToRight).Address
MatrixLastRow = Range("G65536").End(xlUp).Row
LijstReadColumn = 3
LijstCurrentRow = 2 'make 1 if no header is used
Do Until Sheets("Lijst").Cells(LijstCurrentRow, 1).Value = ""
' Get table entry from third column of list.
TableEntry = Sheets("Lijst").Cells(LijstCurrentRow, LijstReadColumn).Value
' Get position of Employee name within Matrix.
TableColumn = Application.Match(Sheets("Lijst").Cells(LijstCurrentRow, 1), Range("H1:" & MatrixLastColAddress), 0)
' Get position of Qualification Name within Matrix titles.
TableRow = Application.Match(Sheets("Lijst").Cells(LijstCurrentRow, 2), Range("G2:G" & MatrixLastRow), 0)
Set CellToFill = Range("G1").Offset(TableRow, TableColumn)
' If there's already an entry in the cell, separate it from the new entry with a comma and space.
If CellToFill.Value <> "" Then CellToFill.Value = CellToFill.Value & ","
' Add the new entry to the cell.
CellToFill.Value = CellToFill.Value & TableEntry
LijstCurrentRow = LijstCurrentRow + 1
Loop
End Sub
[這聽起來像你沒有使用很多MS堆棧,所以我把它作爲一個評論,而不是回答。] SQL Server Reporting Services將很好地處理這種情況,併爲您提供出色的Excel輸出。你可以從SSRS查詢MySQL數據庫。但是如果你沒有MS SQL服務器,這是一個不好的選擇。 –
您是否嘗試過使用帶有最大聚合函數的數據透視表? – PowerUser
嘗試過,但不起作用。 – Dylan