• ベストアンサー

エクセルのフィルターでのフィールド項目について

おせわになります。。 エクセルVBA初心者です。 フィルターをかけて同じフィールドの条件を繰り返し行い、抽出がしたいのですがどのようにしたらできますでしょうか? 2008/10 会社A 10円 2008/10 会社B 12円 2008/10 会社C 20円 のように会社名ごとに金額を集計したいのですが会社名の数が多く、 かつ、今後も会社名が増えていくので Selection.AutoFilter field:=1, Criteria1:=myKaisyaのようにCriteria1:=に変数をいれてループして全会社名を取得したいと考えてます。 なにぶん初心者なので行き詰っています。。 どなたかアドバイスいただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です。 VBAで、SUMIFで会社別合計をだすコード 例データ A1:B12 会社名 計数 A会社 1 A会社 2 B会社 3 A会社 4 C会社 2 B会社 4 A会社 2 A会社 6 B会社 3 A会社 2 C会社 1 ーーー F1:F3 会社名<-フィルタオプションの設定、重複するレコードは無視する、で会社名一覧を作る。 F列   G列 A会社 17 B会社 10 C会社 3 ーー コード 標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row d1 = Range("F65536").End(xlUp).Row For i = 1 To d1 Cells(i, "G") = Application.SumIf(Range("A2:A" & d), Cells(i, "F"), Range("B2:B" & d)) Next i End Sub ーーーー 結果 上記G1:G3 ーーー >全会社名を取得したいと考えてます 会社名だけなら、エクセルの操作である データ フィルタ フィルタオプションの設定 その中の「重複するレコードは無視する」にしてマクロの記録をとれば、コードはわかります。

Turkey-R
質問者

補足

imogasiさん 2度にわたりアドバイスを頂き、ありがとうございます。 >>全会社名を取得したいと考えてます >会社名だけなら、エクセルの操作である >データ >フィルタ >フィルタオプションの設定 >その中の「重複するレコードは無視する」にしてマクロの記録をとれば、コードはわかります。 はい♪ コード取れました!! For文の方は、明日以降試してご報告させていただきます。 助けていただき本当にありがとうございます!

その他の回答 (5)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

ANo.1です。 Dictionaryオブジェクトのサンプルです。 データがA~C列にあり、結果をE・F列に書き出すものとします。 Sub test()  Dim Dic As Object  Dim i As Long  Dim v  Set Dic = CreateObject("Scripting.Dictionary")  With Worksheets("Sheet1")       v = .Range(.Range("B1"), .Cells(Rows.Count, 3).End(xlUp)).Value       For i = 1 To UBound(v, 1)           Dic(v(i, 1)) = Dic(v(i, 1)) + v(i, 2)       Next       .Range("E:F").ClearContents       .Range("E1").Resize(Dic.Count, 2).Value = _       Application.Transpose(Array(Dic.keys, Dic.items))  End With  Set Dic = Nothing  Erase v End Sub ご参考まで。

Turkey-R
質問者

補足

n-junさん 二度にわたるアドバイスありがとうございます。 Dictionary大変参考になりました。 なんとかかんとか、解決できましたので 質問を締め切らせていただきます。 参考になった順にポイントをつけさせて頂きます。 皆様 本当にありがとうございました。

回答No.5

金額の合計が知りたいだけですか? 金額が入力されてる所を全部選択すれば下に合計が出て来ますよね? 出て来なかったら 右クリックして「合計」を選べば良いかと思うのですが。

Turkey-R
質問者

補足

ookami1969さん アドバイスありがとうございます。 今回は、知人の会社で使用する為、VBAでできるバッチ処理を作成しております。 知人いわく、操作/知識があやふやなので余計な操作をせずに ボタン一つで処理が完了するようにとの要望でした。 ですが、 わざわざこのような質問にお時間を割いていただき 感謝しております。 ありがとうございました。

  • empelt
  • ベストアンサー率52% (9/17)
回答No.3

マクロなど組まなくてもピボットテーブルを使えば一発ではないでしょうか? グルーピングして合計や個数や平均値などの算出が可能です。

Turkey-R
質問者

補足

empeltさん ありがとうございます。 調べてみたのですが、 確かにピボットテーブルを使えば一発かもしれませんね。  月 会社 金額 割合  VBAでどのように書いていくのか、さらに調べてみようと思います。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

コンなのは、会社名でソートして、会社名が切れる(変わる)まで足しこみ、変わったところでその時点の合計をセルに書き出せば簡単です。オフライン・バッチ処理の常道。 フィルタを使う方法も考えてみますが。 SUMIF関数で、会社名を変えて計算が出来るかもしれない。 夜遅いのでとりあえず。

Turkey-R
質問者

補足

imogasiさん ありがとうございます。 SUMIF関数ですね。調べて見ます。 ちなみに補足になるかわからないのですが、現在の流れはVBAで 1.月ごとでフィルタ 2.会社名でフィルタ 3.会社ごとに金額を抽出(合計金額はSUBTOTALで別セル表示している) 4.合計額を集計用の別シートに転記 5.月 会社名 合計金額 割合を出す。 といった感じです。 夜遅くにありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html 日付に関係なく会社毎の集計と言う場合には、私はこの方法を用いてます。

Turkey-R
質問者

補足

n-junさん ありがとうございます。 実は月で一度フィルタをかけ、集計しているのです。 しかし、教えていただいたURLを参考に色々と試してみたいと思います。 ありがとうございました。