Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2707 / 13645 ツリー ←次へ | 前へ→

【66461】シート間の和 ウータン 10/9/5(日) 5:55 質問[未読]
【66463】Re:シート間の和 UO3 10/9/5(日) 8:33 回答[未読]
【66467】Re:シート間の和 ウータン 10/9/5(日) 9:29 質問[未読]
【66468】Re:シート間の和 かみちゃん 10/9/5(日) 9:33 発言[未読]
【66479】Re:シート間の和 ウータン 10/9/5(日) 22:28 質問[未読]
【66480】Re:シート間の和 かみちゃん 10/9/5(日) 22:40 発言[未読]
【66481】Re:シート間の和 ウータン 10/9/5(日) 22:52 お礼[未読]
【66482】Re:シート間の和 かみちゃん 10/9/5(日) 22:54 発言[未読]
【66484】Re:シート間の和 ウータン 10/9/5(日) 23:05 お礼[未読]

【66461】シート間の和
質問  ウータン  - 10/9/5(日) 5:55 -

引用なし
パスワード
   いつもお世話になっております。

同一ブック内には10枚のシートがあり、A3〜G74セルは同じ書式をしています。
先頭のシート名は「合計」というシートでして、2枚目(ファイル名:ABC)〜9枚目
(ファイル名:XYZ)の同じセルの合計を出すようにしたいのです。
その上、各セルは合計値を求めてそれを出すではなく、SUM関数としたいのです。
例えば、「合計」B5セルには、=SUM(ABC:XYZ!B5) となっているように。

自分でやってみたのですが、2枚目のファイル名と最後のファイル名をどうやって取得したらいいのか分かりませんでした。
お手数ですが、ご教授願えませんか。
よろしくお願いします。

【66463】Re:シート間の和
回答  UO3  - 10/9/5(日) 8:33 -

引用なし
パスワード
   ▼ウータン さん:

おはようございます。
以下をお試しください。

Option Explicit

Sub Sample()
 MsgBox "一番左のシート名は" & Worksheets(1).Name & "です"
 MsgBox "二枚目のシート名は" & Worksheets(2).Name & "です"
 MsgBox "最後のシート名は" & Worksheets(Worksheets.Count).Name & "です"
End Sub

【66467】Re:シート間の和
質問  ウータン  - 10/9/5(日) 9:29 -

引用なし
パスワード
   ▼UO3様:

おはようございます。ウータンです。
ご教授いただき、本当にありがとうございます!
おかげさまでA3セルについては、SUM関数を使って計算できるようになりました。
私の技量が低く、かなり時間かかりましたが・・・。

残念なことに、同じ処理をA3セル〜B74セルで実施するところで詰まりました。
特定の範囲について、各セルで順次に同じ操作をするとなると、どう書けばいいものでしょうか。
本を見ているのですが、いい例が載っておらず困っています。
またご教授願えると助かります。
2度も質問してしまい、本当に申し訳なく思っています。
よろしくお願いいたします。

【66468】Re:シート間の和
発言  かみちゃん  - 10/9/5(日) 9:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 同じ処理をA3セル〜B74セルで実施するところで詰まりました。
> 特定の範囲について、各セルで順次に同じ操作をするとなると、どう書けばいいものでしょうか。

現在どのようなコードを書いていて、どこで詰まっているか、説明されてはいかがでしょうか?

【66479】Re:シート間の和
質問  ウータン  - 10/9/5(日) 22:28 -

引用なし
パスワード
   ▼かみちゃん さん:

なんとか苦心の末動くようになりました。
A3〜B77セルという部分をfor構文にて表現したのですが、
もし、もっと綺麗な表現方法があれば後学のためご教授ください。


Sub SUM関数のあてはめ()
 Dim c As Integer
 Dim r As Integer

 With Workbooks("TEST.xls")
  For c = 1 To 2
   For r = 3 To 77
    .Worksheets("合計").Cells(r, c) = "=SUM(" & .Sheets(2).Name & ":" & .Sheets(Worksheets.Count).Name & "!" & Cells(r, c).Address(0, 0) & ")"
   Next r
  Next c
 End With
End Sub

【66480】Re:シート間の和
発言  かみちゃん  - 10/9/5(日) 22:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>A3〜B77セルという部分をfor構文にて表現したのですが、
>もし、もっと綺麗な表現方法があれば後学のためご教授ください。

For 〜 Next を使わなくても、以下のように処理することができます。

Sub SUM関数のあてはめ2()
 With ActiveWorkbook
  .Worksheets("合計").Range("A3:B77").Formula = "=SUM(" & .Sheets(2).Name & ":" & .Sheets(Worksheets.Count).Name & "!A3)"
 End With
End Sub

【66481】Re:シート間の和
お礼  ウータン  - 10/9/5(日) 22:52 -

引用なし
パスワード
   ▼かみちゃん さん:

ありがとうございます。
スマートな構文ですし、正確に作動することが確認できました。
ただ、不勉強のため、納得できないところがあります。

コードの最後の!A3)" なのですが、どうしてここをA3と書くだけで
A3〜B77のすべてに変換されて適応されるのでしょうか?


 .Worksheets("合計").Range("A3:B77").Formula = "=SUM(" & .Sheets(2).Name & ":" & .Sheets(Worksheets.Count).Name & "!A3)"

【66482】Re:シート間の和
発言  かみちゃん  - 10/9/5(日) 22:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>コードの最後の!A3)" なのですが、どうしてここをA3と書くだけで
>A3〜B77のすべてに変換されて適応されるのでしょうか?

相対参照にしているからでは?
手動で数式をコピーするのと同じ感覚かと思います。

【66484】Re:シート間の和
お礼  ウータン  - 10/9/5(日) 23:05 -

引用なし
パスワード
   ▼かみちゃん さん:
>相対参照にしているからでは?
>手動で数式をコピーするのと同じ感覚かと思います。


相対参照にしているので、一番最初だけ定義しておけば、後は関数を手動操作
するのと同じで、自動的に更新されるのですね。
納得いたしました。

かみちゃん様、丁寧に回答いただきまして、本当にありがとうございました。
感謝申し上げます。

2707 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free