Giả sử dữ liệu đủ nhỏ để vừa trong một cột trên bảng tính, tôi sẽ sao chép tất cả các cột vào một cột và tạo một bảng trụ đơn giản để đếm từng giá trị cho tôi.
Để chạy nó thường xuyên, tôi sẽ tạo VBA Macro, không phải VB Script. Quy trình dưới đây sẽ tự động thực hiện toàn bộ trong Excel 2010. (Một số mã bảng trục có thể khác trong các phiên bản trước của Excel.)
Sub CreateSummary()
' This macro assumes there is nothing else below the data being summarized
' and that there are no empty cells in any of the columns of data.
Const FIELDNAME As String = "FreeText"
Dim v As Variant
Dim sht As Worksheet, rTop As Range, r As Range
Dim pc As PivotCache, pt As PivotTable
Set v = Application.InputBox("Select first cell of table to be summarized." _
, "Create Summary", Type:=8)
If TypeName(v) = "Range" Then
Set rTop = v
Else
Exit Sub
End If
Set sht = rTop.Parent
' create new summary worksheet
sht.Copy
ActiveSheet.Name = sht.Name & " Summary"
Set sht = ActiveSheet
Set rTop = sht.Range(rTop.Address)
' add header
rTop.Rows.EntireRow.Insert
With rTop.Offset(-1)
.Value = FIELDNAME
.Font.Bold = True
.BorderAround XlLineStyle.xlContinuous
End With
' Grab data from other columns and move it to first column
Application.ScreenUpdating = False
Application.StatusBar = "Converting table to one column ..."
Set r = rTop.Offset(0, 1)
Do While r.Value <> ""
sht.Range(r, r.SpecialCells(xlCellTypeLastCell)).Cut
rTop.End(xlDown).Offset(1).Select
sht.Paste
Set r = r.Offset(0, 1)
Application.StatusBar = Application.StatusBar & "."
DoEvents
Loop
rTop.Select
Application.ScreenUpdating = True
' create PivotTable
Application.ScreenUpdating = False
Application.StatusBar = "Creating pivot table..."
Set r = Range(rTop.Offset(-1), rTop.End(xlDown))
With ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=r.Address)
With .CreatePivotTable(TableDestination:=rTop.Offset(-1, 2))
.AddDataField .PivotFields(FIELDNAME), "Count", xlCount
.AddFields FIELDNAME, , , True
End With
End With
Application.ScreenUpdating = True
Application.StatusBar = False
Set r = Nothing
Set rTop = Nothing
Set sht = Nothing
MsgBox "Done creating summary."
End Sub