- ベストアンサー
Excelマクロ質問
下記のようなデータがあるとき、同じ文字列がいくつ存在するか、 結果を出すマクロを教えていただけないでしょうか。 ある列データ a a b b b これを、 1列目 2列目 a 2 b 3 という風に、1列目をユニークにして、2列目に数を表示させたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
シート1のA列にデータが並んでいる。 タイトル行などは無くて,1行目からいきなりデータが列記されている。 作成例:エクセルに出来ることはエクセルにやらせる sub macro1() dim target as range worksheets("Sheet1").select range("1:1").insert range("A1") = "head" ’一意のリストをエクセルに作成させる set target = range("A1:A" & range("A65536").end(xlup).row) target.advancedfilter _ action:=xlfiltercopy, _ criteriarange:=target, _ copytorange:=range("C1"), _ unique:=true ’集計させる range("D2:D" & range("C65536").end(xlup).row).formula _ = "=COUNTIF(A:A,C2)" range("1:1").delete shift:=xlshiftup end sub
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 関数でもできますが、VBAがご希望だということなので。 すでに回答は出ていますので、参考程度で・・・ Sheet1のA列1行目からデータがあるとして、Sheet2に表示するようにしてみました。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws.Columns(1), Cells(i, 1)) = 0 Then k = k + 1 With ws.Cells(k, 1) .Value = Cells(i, 1) .Offset(, 1) = WorksheetFunction.CountIf(Columns(1), ws.Cells(k, 1)) End With End If Next i End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 データはSheet1、集計はSheet2で行っています。 Sub sample() Set Db = CreateObject("Scripting.Dictionary") Set st1 = Worksheets("sheet1") Set st2 = Worksheets("sheet2") For a = 1 To st1.Cells(Rows.Count, 1).End(xlUp).Row Db(st1.Cells(a, 1).Value) = 1 Next wk = Db.keys For i = 0 To UBound(wk) st2.Cells(i + 1, 1) = wk(i) st2.Cells(i + 1, 2).Formula = "=COUNTIF(Sheet1!A:A,A" & i + 1 & ")" Next Set Db = Nothing End Sub
- MackyNo1
- ベストアンサー率53% (1521/2850)
このような集計をしたい場合は、マクロではなく、ピボットテーブルを利用することをお勧めします。 集計対象の項目名を行フィールドとデータフィールドにドラッグしてみて下さい。 ちなみに関数で表示したい場合は、以下の関数を入力し下方向にオートフィルします(添付画像参照)。 ただし、データ範囲や表示データ数が多くなると、シートの動きが重くなるのであまりお勧めできません。 =INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$20&"",$A$2:$A$20&"",)<>ROW($A$2:$A$20)-1)*1000+ROW($A$2:$A$20),),ROW(A1)))&"" 数値の集計はCOUNTIF関数を利用します。 =IF(D2="","",COUNTIF(A:A,D2))