- ベストアンサー
エクセル重複セルについて
例えば A B 1 品名 数量 2 みかん 2 3 りんご 2 4 みかん 1 5 いちご 1 6 りんご 1 とあるとして、 他のセルに C D 1 品名 個数 2 みかん 3 3 りんご 3 4 いちご 1 のように 重複セルを削除し、なおかつ 個数もまとめるというようなことは エクセルでできないでしょうか? 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3 です。 >コマンドボタンで1発で結果を表示させたいのです VBAになりますが、下記を自分のケースに合わせて改造できますか。 下記は#3の関数をVBAに置き換えた考えで、作ってあります。 Sheet1にコマンドボタンを1つ貼り付けます。 そのクリックイベントに、(ボタンをダブルクリックして出てくる Private Sub CommandButton1_Click() End Sub の間に) Private Sub CommandButton1_Click() d = Range("A65536").End(xlUp).Row '最下行を求む j = 2 '結果スタート行 '---- For i = 2 To d '---COUNTIFの実行 c = WorksheetFunction.CountIf(Range(Cells(2, "A"), Cells(i, "A")), Cells(i, "A")) If c = 1 Then Cells(j, "J") = Cells(i, "A") '---SUMIFの実行 Cells(j, "K") = WorksheetFunction.SumIf(Range(Cells(2, "A"), Cells(d, "A")), Cells(i, "A"), _ Range(Cells(2, "B"), Cells(d, "B"))) j = j + 1 Else End If Next i End Sub の最初、最後行を除いた中身をを貼り付けます。 編集状態を脱する(鉛筆と定規のアイコンをクリックする)。 これでボタンをクリックすると、結果がJ,K列に出ます。 結果のスタート行は2行目からです。上記コードで、この3つを決めているところを変えれば、Sheet1内の好きなところへ表が作れます。 データのスタート行が2行目以外の場合は、上記コード内で For i = 2 To d とCOUNTIF、SUMIFの式の中で、2になっているところを いじくってください。 上記コードは、エクセル関数を使って判りやすく、行数を少なくしてあります。
その他の回答 (4)
何故コマンドボタンが必要なのでしょうか。 データの追加をした時に、いちいちボタンクリックしなければならないので、 もしクリックし忘れたら集計データが間違ったままになってしまいます。 データの追加・変更が無いとしても、マクロを記述したら単に実行すれば済むのでボタンは不要です。 C列のような集計は[データ]-[フィルタ]-[フィルタオプションの設定]で、 簡単に抽出できます。 VBAならAdvancedFilterメソッドでループ処理もいりません。 関数なら C2 =INDEX($A$2:$A$6,SMALL(IF(MATCH($A$2:$A$6,$A$2:$A$6,0)=ROW($A$1:$A$5),ROW($A$1:$A$5)),ROW(A1))) 配列数式なので Ctrl + Shift + Enter 下へフィルコピー 配列数式が不慣れなら作業列を使ったほうがいいですし、作業列がジャマなら列を非表示に。 D列はSUMIF関数ですね。 とにかく、コマンドボタンにこだわる理由は無いと思います。
お礼
ありがとうございます。 いろいろと勉強になります。
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルでできないでしょうか エクセルのどういう機能を頭においているのか ピボット 関数 VBA Dsum(ちょっと違うが、結果は同じ) などでできる。 関数でやってみます。 例データ Sheet1のA2:B9に(()内の数字はD列で式の結果の数字です) みかん 2 (1) りんご 2 (2) みかん 1 いちご 1 (3) りんご 1 みかん 3 いちご 2 ぶどう 4 (4) とする。作業列をD列として、D2に =IF(COUNTIF($A$2:A2,A2)=1,MAX($D$1:D1)+1,"") と入れてD9まで式を複写。 結果は、果物名の初出の行に連番が触れます。 G2に=INDEX($A$2:$A$100,MATCH(ROW()-1,$D$2:$D$100,0),1)と入れてG4まで式を複写。 H2に=SUMIF($A$2:$A$100,G2,$B$2:$B$100) といれて、H4まで 式を複写。 結果 みかん 6 りんご 3 いちご 3 ぶどう 4 です(imogasi方式) $100の部分は最下行数で、データがなくても、余裕をみて多めの行分にしてもよい。 結果をSheet2に出すことも少しの変更でできる。Sheet1!をつけるだけ。
補足
回答ありがとうございます。 質問の意味がわかりにくくて申し訳ありません。 D列の初出の行に連番を表示させずに コマンドボタンで1発で結果を表示させたいのです。 わがままで申し訳ありません。
- cockerel
- ベストアンサー率46% (253/548)
ピボットテーブルを使用すれば簡単にできます。 元となる表内のいずれかのセル選択して、データ>ピボットテーブルレポートを選択します。あとはウィザードに従ってテーブルを作成したら、行のところに品名を、データのところに数量をドラッグすれば完了です。
補足
早々の回答ありがとうございます。 ピボットテーブルを使用しないで、 行うことは無理でしょうか? コマンドボタンをおせば数量の合計を 表示する。みたいな感じにしたいのですが…。 ややこしくて申し訳ありません。
- gontiti
- ベストアンサー率38% (39/102)
ピポットテーブルを使うとできますよ。 セルも選べます。 メニューから「ピポットテーブル」を選んでいただき ちょっといじればすぐ理解できるようになると思います。 がんばってください。
お礼
早々の回答ありがとうございます。 マクロで質問のような作業はできないでしょうか?
お礼
ありがとうございました。 なんとか上手くいきました。