- 締切済み
検索&自動計算
いつも回答いただきありがとうございます。 sheet1からsheet2に転記する際に sheet1の1行目からひとつづつ転記するようにマクロを組んでいます。(nextを使って) sheet2に転記される際に重複する値があれば、数値を加算されるようにしたいのですが どなたかご教授の方宜しくお願い致します。 (sheet1) a b 1 りんご 2 2 みかん 4 3 りんご 3 4 . . ↓ (sheet2) a b 1 りんご 5 2 みかん 4 3 4 . .
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
>sheet1の1行目からひとつづつ転記するようにマクロを組んでいます。(nextを使って) こういった発想も当然あります。 プログラムの流れ(アルゴリズムとも呼びますが) 1、1行目から順に確認していって、重複していなければA列の内容を別シートに追加していく 2、重複なしの項目が準備出来たら、Sumif関数でも活用して合計をB列に出していく といったような2段の流れになるかと思います。 別案ですが、エクセルには PibotTable が準備されています。 一度、ピボットテーブル作成すると、ご希望の情報が別シートに自動で作成されます。 表示がご希望と合わなければ、PibotTableのシートの結果をご希望のシートに引っ張ってくる方が 動作も早くて便利かと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
なぜVBAを使うのか。VBAの勉強をしたいのか。 ーー 関数でも出来るよ。 Sheet2にSheet1のA列の重複しないものを作り出す(フィルタオプションに設定ー「重複するレコードは無視する」を使う)。 例データ xx a 1 b 2 c 3 a 4 b 5 d 1 f 2 a 3 c 4 Sheet2で(Sheet1で操作しないこと) データーフィルターフィルタオプションの設定 指定した範囲ON リスト範囲 Sheet1!$A$1:$A$10 検索条件範囲 空白のまま 抽出範囲 D1:D10 <-Sheet2ということ 重複するレコードは無視する ON OK 結果 D列 xx a b c d f E列に E2に =SUMIF(Sheet1!$A$2:$A$10,D2,Sheet1!$B$2:$B$10) 下方向に式を複写 結果 xx a 8 b 7 c 7 d 1 f 2 ーー これをVBAでもやれるが、 ーー 重複するレコードを無しにした1セットをSheet2にでも用意したほうがVBAロジックや関数が簡単。 ーー ほかにVBAなら Sheet1をA列でソートして、前の行のA列の値を保持する変数を設けて、A列で各行について、前の行と同じなら変数係数を足しこむ。 変わったらその変数の値を書き出して、(その場合A列のデータも同時に書き出す) 変数には今の行の数をセットする。 これを最終行まで繰返す。 こういうロジック(ソート法)が能率的とおもう。 毎行で同じ行を捜していたら混乱するだろう。 ーー (1)シートが2つ現れるがその扱い方のコード (2)最終行の行数をとらえるコード など判ってないとならない。大丈夫か。これさえ判ってないようだとVBAは勉強が足りない。 それにVBAはロジックというものを経験で会得することが肝心。VB文法の勉強だけではプログラムは組めない。
私はいつも回答はしてませんが今回は回答してもいいでしょうか?(笑) SUMPRODUCT関数はご存知ですか?マクロでなければならない積極的理由がないのならSUMPRODUCTのほうが簡単ですが。
補足
すいません。説明不足でした。 マクロでA列の値のシートが作成されるように作ってます。 シートが無ければ作成→転記、あれば転記のみ。 転記もB,C,D,E列と多数あります。 検索値もB,C,D列とし同じものがあれば、E列に足し算され、 無ければ、次の行に転記されるように出来ればと思っています。 はじめの説明が簡潔にと思い、不足してしまいました。 この説明は大丈夫でしょうか? よろしくお願いします