- ベストアンサー
エクセルVBAと並び替え
エクセル2007を勉強中です。 今、以下の画像左のようなデータのシート(シート1)を作成しました。 このシートをフリガナを基準に並び替えて、かつ、 重複する件数を画像右のように、シート2に抽出したいのです。 並び替えまでは自動記録機能でできたのですが 件数のカウントまでを自動でできればと思いました。 どんなコードにすればいいのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Excelの機能に「小計」があるので、利用されてみては?(2003までは「集計」) データ>集計です。 手動で結果を得るも良し、VBAの記録を行って組み込むも良し。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
関数を混ぜた回答が出ているが、他のやり方を1つ。 例データ A列 B列(VBA実行後の結果) 氏名 件数 a <-第2行目から実データ a a 3 b b 2 c c c 3 ーー 標準モジュールに Sub test01() 'データはA列でソートされていること d = Range("A65536").End(xlUp).Row 'A列最終行取得 m = Cells(2, "A") 'データの最初の行のデータ: c = 1 '件数は最初行分をとりあえず1 '-- For i = 3 To d ' '最終行まで繰り返し If Cells(i, "A") = m Then '直前行と同じなら c = c + 1 Else '超然行と変わったら、件数カウントを結果書き出し Cells(i - 1, "B") = c c = 1 '現在行分として1 End If m = Cells(i, "A") '直前行文字列を次の行に使うため置着替え Next i Cells(i - 1, "B") = c '最後の戸じまい End Sub この手法は今後どこかで役立つよ。
- keithin
- ベストアンサー率66% (5278/7941)
>並び替えまでは自動記録機能でできたのですが この続きに サンプル1: worksheets("Sheet2").range("C1:C" & range("A65536").end(xlup).row).formula = "=IF(A1=A2,"""",COUNTIF(A:A,A1))" サンプル2: worksheets("Sheet2").range("C1:C" & range("A65536").end(xlup).row).formula = "=IF(A1=A2,NA(),COUNTIF(A:A,A1))" on error resume next worksheets("Sheet2").range("C:C").specialcells(xlcelltypeformulas, xlerrors).clearcontents on error goto 0 などのように続けてみます。 必要に応じて worksheets("Sheet2").range("C:C").numberformatlocal = "0件" のように表示を整えます。