1

VBAマクロも初めてのExcelで問題が発生しました。すべてのシートで同じ 2 つの列で構成される Excel ファイルに 4 つのシート (シート 1、シート 2、シート 3、シート 4) があります。列、つまり「人名」と「シーケンス数」 私のシートは次のようになります。

シート 1
人名 | シーケンス番号
ジョン            
ジョン
ジョン
マシュー
王子
ラージ
ラージ
鯨
シート 2
人名 | シーケンス番号
ジョン            
ジョン
マシュー
マシュー
王子
王子
ラージ
ラージ
ラージ
鯨
鯨
シート 3
人名 | シーケンス番号
ジョン            
ジョン
ジョン
ジョン
マシュー
王子
砂の
ラージ
ラージ
ラージ
鯨

目的のマクロを実行した後、この形式の出力が必要です

シート 1
人名 | シーケンス番号
ジョン 1
ジョン 2
ジョン 3
マシュー 1
プリンス1
ラージ 1
ラージ 2
クジラ 1
シート 2
人名 | シーケンス番号
ジョン 4
ジョン 5
マシュー 2
マシュー 3
プリンス2
プリンス3
ラージ 3
ラージ 4  
ラージ 5
クジラ 2
クジラ 3
シート 3
人名 | シーケンス番号
ジョン 6
ジョン 7
ジョン 8
ジョン9
マシュー 4
プリンス4
サンディ 1
ラージ 6
ラージ 7
ラージ 8
クジラ 4

つまり、シート 1 では、"John" という名前の値に 4 つのカウントがあるため、シーケンス番号 1,2,3,4 で印刷され、シート 2 では同じ値 "John" が再び 2 回表示されているので、シーケンス番号列では、カウントはシート 1 (5,6) から継続しています。シーケンス番号列の値が「Mathew」に変わると、カウントが割り当てられます (1) シート 1、特定の値「Mathew」のシート 2 では、シート 1 からカウントがインクリメントされ、同じように印刷されます。シート 3. これで、すべての値に適用されます。

データが膨大で手動で操作することは不可能であるため、これに関して私を助けてください。マクロで道を教えてください。前もって感謝します。

4

1 に答える 1

0

次のコードを入力し、「Microsoft Scripting Runtime」への参照を追加して ([ツール] > [参照])、辞書構造を使用できるようにします。

Sub CountOccurence()
' Reference: Microsoft Scripting Runtime

Application.ScreenUpdating = False

Set oDict = New Dictionary
Dim Shts() As Variant
Dim wS As Worksheet
Dim r As Integer, rLast As Integer
Dim i As Integer

Shts = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

For i = 0 To 3 Step 1

    Set wS = Sheets(Shts(i))

    rLast = wS.Cells(1, 1).CurrentRegion.Rows.Count

    For r = 2 To rLast Step 1

        If Not (oDict.Exists(wS.Cells(r, 1).Value)) Then

            oDict.Add wS.Cells(r, 1).Value, 1

        Else

            oDict.Item(wS.Cells(r, 1).Value) = oDict.Item(wS.Cells(r, 1).Value) + 1

        End If

        wS.Cells(r, 2).Value = oDict.Item(wS.Cells(r, 1).Value)

    Next r

Next i

Set oDict = Nothing


Application.ScreenUpdating = True
End Sub
于 2013-07-10T16:11:55.933 に答える