プロが教える店舗&オフィスのセキュリティ対策術

おせわになります。。

エクセルVBA初心者です。
フィルターをかけて同じフィールドの条件を繰り返し行い、抽出がしたいのですがどのようにしたらできますでしょうか?

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

A 回答 (6件)

Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する


http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …

日付に関係なく会社毎の集計と言う場合には、私はこの方法を用いてます。

この回答への補足

n-junさん
ありがとうございます。

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

補足日時:2008/10/09 11:23
    • good
    • 0

コンなのは、会社名でソートして、会社名が切れる(変わる)まで足しこみ、変わったところでその時点の合計をセルに書き出せば簡単です。

オフライン・バッチ処理の常道。
フィルタを使う方法も考えてみますが。
SUMIF関数で、会社名を変えて計算が出来るかもしれない。
夜遅いのでとりあえず。

この回答への補足

imogasiさん
ありがとうございます。

SUMIF関数ですね。調べて見ます。

ちなみに補足になるかわからないのですが、現在の流れはVBAで
1.月ごとでフィルタ
2.会社名でフィルタ
3.会社ごとに金額を抽出(合計金額はSUBTOTALで別セル表示している)
4.合計額を集計用の別シートに転記
5.月 会社名 合計金額 割合を出す。
といった感じです。

夜遅くにありがとうございました。

補足日時:2008/10/09 11:29
    • good
    • 0

マクロなど組まなくてもピボットテーブルを使えば一発ではないでしょうか?


グルーピングして合計や個数や平均値などの算出が可能です。

この回答への補足

empeltさん
ありがとうございます。

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

ありがとうございました。

補足日時:2008/10/09 11:42
    • good
    • 0

#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
ーーー
>全会社名を取得したいと考えてます
会社名だけなら、エクセルの操作である
データ
フィルタ
フィルタオプションの設定
その中の「重複するレコードは無視する」にしてマクロの記録をとれば、コードはわかります。

この回答への補足

imogasiさん
2度にわたりアドバイスを頂き、ありがとうございます。

>>全会社名を取得したいと考えてます
>会社名だけなら、エクセルの操作である
>データ
>フィルタ
>フィルタオプションの設定
>その中の「重複するレコードは無視する」にしてマクロの記録をとれば、コードはわかります。
はい♪ コード取れました!!

For文の方は、明日以降試してご報告させていただきます。

助けていただき本当にありがとうございます!

補足日時:2008/10/11 03:43
    • good
    • 0

金額の合計が知りたいだけですか?



金額が入力されてる所を全部選択すれば下に合計が出て来ますよね?

出て来なかったら 右クリックして「合計」を選べば良いかと思うのですが。

この回答への補足

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

ですが、
わざわざこのような質問にお時間を割いていただき
感謝しております。
ありがとうございました。

補足日時:2008/10/11 03:44
    • good
    • 0

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
ご参考まで。

この回答への補足

n-junさん
二度にわたるアドバイスありがとうございます。

Dictionary大変参考になりました。

なんとかかんとか、解決できましたので
質問を締め切らせていただきます。

参考になった順にポイントをつけさせて頂きます。

皆様
本当にありがとうございました。

補足日時:2008/10/12 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!