- 締切済み
エクセル いろいろな品名ごとに条件付きのカウントをしたい。
エクセルマクロについて教えてください。 以下の「元の表」から「抽出した表」のように、○がついているもののカウントをしたいのですが、マクロでやるにはどのようにしたらよいでしょうか。 品名は特定なものではなく、無限にあります。 〔元の表〕 品名 区分 りんご ○ りんご × みかん ○ バナナ ○ バナナ × キウイ ○ りんご × キウイ ○ りんご ○ : : 〔抽出した表〕 品名 区分 数量 りんご ○ 2 みかん ○ 1 バナナ ○ 1 キウイ ○ 2 : :
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
作業列案 元の表のC列に =A2&B2 下フィル 抽出した表のC列に =COUNTIF(元の表のシート名のC列,A2&B2) 下フィル 配列関数案 =SUMPRODUCT((元表のシート!A2:A1000=A2)*(元表のシート!A2:A1000=B2)) SUMPRODUCT関数は、Helpでは、詳しく出ていませんのでネットで検索してみてください。 そのほか、 ピボットテーブル案 DCOUNT,DSUM案あります。Helpで調べてみてください。
- shiroshi_1970
- ベストアンサー率50% (3/6)
これで一応できますが。元のデータは残りません。 Sub sample() '---重複削除&○以外削除--- 'ソートする Rwe = Range("A" & 65536).End(xlUp).Row Range("A1:B" & Rwe).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal '○以外削除 Rwe = Range("A" & 65536).End(xlUp).Row For R = Rwe To 1 Step -1 If InStr(Range("B" & R).Value, "○") = 0 Then Rows(R).Delete End If Next '重複削除 Rwe = Range("B" & 65536).End(xlUp).Row For R = Rwe To 2 Step -1 If Range("A" & R).Value = Range("A" & R - 1).Value Then Rows(R).Delete End If Next End Sub
- suz83238
- ベストアンサー率30% (197/656)
区分の次に○なら1という列を作ります。(例えばC列) オートフィルターを使って"りんご"で"○"を選択し、出てきたものを=subtotal(9,c1:c100)とした方がいいんじゃないですか?これをそれぞれの果物にすればOKだと思う。 例 りんご ○ 1 りんご × みかん ○ 1
- imogasi
- ベストアンサー率27% (4737/17069)
(1)Sheet1のデータ最終行を知る d = sh1.Range("A65536").End(xlUp).Row sh1については後述 初期値として、Sheet2の最終行を2とかに設定。 (2)データ最初行から最終行まで毎行繰り返す For Next (3)繰り返すのは区分セルが○かどうかという判別 IF文を使う。 (4)○ならSheet2の品目リストの2ー>K-1行にあるかどうか調べる。 (5)Sheet2の表に品名があればその行の出現頻度数のセルに+1。次のSheet1の行へ処理を移す。 (6)無ければSheet2の最終行の次の行に そしてSheet2の最終行を1行下げる K=K+1 品名と区分をSheet1から持ってきて1行分セットし 出現頻度数を1とする。 次のSheet1の行へ処理を移す。 ーー Sheet1,Sheet2のセルを区別するには Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") ・・・ End Sub とし、セルは必ずSh1.cells(i,J)のように表現して使う。
- hallo-2007
- ベストアンサー率41% (888/2115)
特にVBAにこだわらなくても良いような気がします。 エクセルの関数の得意とする所のような質問なのですが、 何かマクロでなくてはならない理由があるのでしょうか。
お礼
お答えありがとうございます。 VBAでなくても、問題ありません。 よろしくお願いします。
お礼
お答えありがとうございます。 参考にやってみようと思います。