Khi bạn làm việc với trang tính — đặc biệt là trang tính của người khác — bạn có thể đang tìm cách đếm số ký tự trong sổ làm việc.

Macro sau đây rất hữu ích về mặt đó. Nó đếm số ký tự trong toàn bộ sổ làm việc, bao gồm bất kỳ ký tự nào trong bất kỳ hộp văn bản nào được chèn trong các trang tính khác nhau.

Sub CountCharacters()

Dim wks As Worksheet     Dim rng As Range     Dim rCell As Range     Dim shp As Shape

Dim bPossibleError As Boolean     Dim bSkipMe As Boolean

Dim lTotal As Long     Dim lTotal2 As Long     Dim lConstants As Long     Dim lFormulas As Long     Dim lFormulaValues As Long     Dim lTxtBox As Long     Dim sMsg As String

On Error GoTo ErrHandler     Application.ScreenUpdating = False

lTotal = 0     lTotal2 = 0     lConstants = 0     lFormulas = 0     lFormulaValues = 0     lTxtBox = 0     bPossibleError = False     bSkipMe = False     sMsg = ""



For Each wks In ActiveWorkbook.Worksheets         ' Count characters in text boxes         For Each shp In wks.Shapes             If TypeName(shp) <> "GroupObject" Then                 lTxtBox = lTxtBox + shp.TextFrame.Characters.Count             End If         Next shp

' Count characters in cells containing constants         bPossibleError = True         Set rng = wks.UsedRange.SpecialCells(xlCellTypeConstants)

If bSkipMe Then             bSkipMe = False         Else             For Each rCell In rng                 lConstants = lConstants + Len(rCell.Value)

Next rCell         End If

' Count characters in cells containing formulas         bPossibleError = True         Set rng = wks.UsedRange.SpecialCells(xlCellTypeFormulas)

If bSkipMe Then             bSkipMe = False         Else             For Each rCell In rng                 lFormulaValues = lFormulaValues + Len(rCell.Value)

lFormulas = lFormulas + Len(rCell.Formula)

Next rCell         End If     Next wks

sMsg = Format(lTxtBox, "#,##0") & _       " Characters in text boxes" & vbCrLf     sMsg = sMsg & Format(lConstants, "#,##0") & _       " Characters in constants" & vbCrLf & vbCrLf

lTotal = lTxtBox + lConstants

sMsg = sMsg & Format(lTotal, "#,##0") & _       " Total characters (as constants)" & vbCrLf & vbCrLf

sMsg = sMsg & Format(lFormulaValues, "#,##0") & _       " Characters in formulas (as values)" & vbCrLf     sMsg = sMsg & Format(lFormulas, "#,##0") & _       " Characters in formulas (as formulas)" & vbCrLf & vbCrLf

lTotal2 = lTotal + lFormulas     lTotal = lTotal + lFormulaValues

sMsg = sMsg & Format(lTotal, "#,##0") & _       " Total characters (with formulas as values)" & vbCrLf     sMsg = sMsg & Format(lTotal2, "#,##0") & _       " Total characters (with formulas as formulas)"



MsgBox Prompt:=sMsg, Title:="Character count"



ExitHandler:

Application.ScreenUpdating = True     Exit Sub

ErrHandler:

If bPossibleError And Err.Number = 1004 Then         bPossibleError = False         bSkipMe = True         Resume Next     Else         MsgBox Err.Number & ": " & Err.Description         Resume ExitHandler     End If End Sub

Macro có vẻ khá dài, nhưng nó được cấu trúc rất tốt theo đúng chức năng của nó. Đầu tiên, nó xem qua tất cả các hộp văn bản trong một trang tính.

Nếu chúng không được nhóm (bạn không thể đếm các ký tự trong các hộp văn bản được nhóm), thì các ký tự trong chúng sẽ được đánh số. Sau đó, macro sẽ đánh dấu các ký tự trong các ô chứa hằng số. Cuối cùng, nó đếm tất cả các ký tự được sử dụng trong các ô chứa công thức. Số dư của macro được sử dụng để trình bày thông tin trong hộp thông báo.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2284) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: