- ベストアンサー
Excelマクロ:複数シート同座標セルの値を、連番で一覧に参照したい
- Excelマクロを使用して、複数のシートの同座標セルの値を連番で一覧に参照したい場合の方法を教えてください。
- 20シート全ての同座標セルにある特定の商品の「合計」と「個数」の値を、「集計」シートに連番で一覧表示させる方法を教えてください。
- 以前は逆の条件で質問をしましたが、良い回答をいただきました。参考になるかもしれません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 >全sheet数はどこにも記載されていないがいいのか ForEach文を使ってますが、本回答の場合Shをワークシートに定義してSetしているので、ワークシート 1つ1つ(Each)のすべてに付いて、当たってくれます。それをSh.○○で捉えて、処理を行います。 しかし合計を出すシートだけは、加算の対象からはずさないといけないので、If sh.Name = "sheet6" Then で外しています。 >なんで行数を「i」に置き換えているのか。 Worksheets("sheet6").Cells(1, "A") = "合計" '項目見出し 、で1行目には見出し漢字をセットしたのですから 計数は第2行目以下に書きこまないといけません。 だからスタート行を指定するために、i=2としてます。 本番の表の構成から、第3行目からスタートもあり得ます。 >なんで行数を「i」に置き換えているのか。 持っていく先のシートの指定行は、1データセットしたら 次は1行下へセットしないといけません。だからiを変数にして、1づつ増やしていくわけです。そうしないと同じ セルに次々書いて、最後のものしか残りませんから。 >シート名の連番が飛び飛びになったり 全部のシートでなく、シート名を指定して処理をしたいときもあるでしょう。その場合は人間が指定してやらないといけません。実行時に、Inputboxで聞いてやるとか、プログラムコードの中に、配列でシート名を定義します。 t=Array("aaa","bb","c","計数1")(Array関数) (aaa,bb,等がシート名)でt(0)でシート名aaaを使えます。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
VBEの標準モジュールに下記を貼りつける。 集約シートはSheet6と仮定してます。 合計数だけを取り上げてます。 Sub test02() Dim sh As Worksheet Worksheets("sheet6").Cells(1, "A") = "合計" '項目見出し i = 2 For Each sh In Worksheets If sh.Name = "sheet6" Then '合計シートを除いた全シートにつき Else Worksheets("sheet6").Cells(i, "A") = sh.Name 'シート名 Worksheets("sheet6").Cells(i, "B") = sh.Range("b4") ' '各シートの合計セル i = i + 1 '直下行を指す End If Next End Sub (変更すべき箇所) 本テスト6シート->20シート 集約シートSheet6-> 合計シート名は 項目名-> 合計数のほかに個数も増やす 合計のあるセル-> B4で良いか? シート名が漢字名とか飛び飛びのシートの場合 (本例と離れるが) 等の時の修正のし方わかりますかね。
お礼
imogasiさん、回答ありがとうございます。 出来ました! 以前の質問に加えて、詳しい回答嬉しいです。 ただ出来上がるのに時間かかりました。 詳しく回答いただいたのにもかかわらず、どの場所を、私のブック仕様に変更したらいいのか、イマイチ分からず、いろんなところをいじってました。 特に、 ○全sheet数はどこにも記載されていないがいいのか ○なんで行数を「i」に置き換えているのか。 >i = 2 などなどです。 もちろん、シート名の連番が飛び飛びになったり、「時の修正って何?」状態ですから、その対処も分かりません(-_-;) これらVBにとっては初歩の初歩でしょうが、しばらく締め切らずにいるので、もしよろしければ、お時間のある時にお教えくださいm( _ _ )m どうもありがとうございました。
- ki-aaa
- ベストアンサー率49% (105/213)
これで如何ですか。 B2セルとC2セルに次の式を入れて、下方向にコピーします。 B2: =INDIRECT(A2&"!B2") C2: =INDIRECT(A2&"!C2") 合計数はsheet1・・・sheet3のB2セルにあります。
お礼
ki-aaaさん、さっそくの回答ありがとうございます。 試してみたんですが、「#REF」エラーが出てしまい上手くいきませんでした。 マクロに加えて関数もダメな私には何がいけないのかさっぱりです(^^;) でも、関数でもやろうと思えば出来るんですね。 一つお勉強になりました。 ありがとうございました。
お礼
imogasiさん、再びの詳しい回答ありがとうございます。 本当に助かりました。 これが出来るのと出来ないのとでは、毎日のお仕事の効率に影響があったんです。 これを機に、私自身もマクロのお勉強をしないといけない、とつくづく思いました。 どうもありがとうございました。