アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCELの関数,数式で質問です。
<例題>異なる様式の表(数値)で構成された3つのシート(a,b,c)をもつブックが,同じ型式で50個(50ブック)ある。各ブックの特定のシートの特定の数値セル(1~50ブックのbシートのA5セル)の合計を求める数式を示しなさい。
※この回答の1つは「=1ブックのbのA5+2ブックのbのA5+3ブックのbのA5+4ブックのbのA5+…+50ブックのbのA5」だと思うのです。しかし,いちいち各ブックの対象シート(b)の対象セル(A5)をクリックして数式を完成させるのは大変です。さらに,求めたい特定の数値セルが「bのA5」だけでなく「aのB3」や「cのR6」など,3つ,4つと増えるとすると,同様の数式を入力するのに大変な労力を要します。何か簡単な集計方法(関数,数式)はあるでしょうか。ややこしい質問ですみません。どうぞ御教示ください。

A 回答 (2件)

#1です。


VBAは関数ではありません。言って見ればプログラムです。

下記はサンプルです。
実行する場合はテスト環境で行って下さい。

1)集計元ブック(1ブック.xls や 2ブック.xls 等)を適当なフォルダにまとめて置きます。(例 C:\Test)
2)新規ブックを開き、メニューのツール-マクロ-VisualBasicEditorでVBE画面を起動します。
3)VBE画面のメニューで挿入-標準モジュールに下記をコピペします。
4)VBE画面を閉じます。
5)上記と同じフォルダに適当な名前で保存します。
6)メニューのツール-マクロで Test を実行します。

これで集計元ブックのシートBのA5にある値を順次転記していきます。

Sub Test()
Dim MyName As String, wb As Workbook

On Error Resume Next
MyName = Dir(ThisWorkbook.Path & "\*.xls", vbNormal)
Do While MyName <> ""
  If UCase(MyName) <> UCase(ThisWorkbook.Name) Then
   Application.ScreenUpdating = False
   Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & MyName)
   ThisWorkbook.Worksheets("Sheet1").Range("A65536").End(xlUp) _
     .Offset(1, 0).Value = wb.Worksheets("b").Range("A5").Value
   wb.Close
  End If
  MyName = Dir
Loop
Application.ScreenUpdating = True

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
御礼が大変遅くなり,申し訳ありません。
「マクロ」なんですね。
まだ,よく理解できていませんが,今回の案件意外にも幅広く活かせそうです。修得に励みます。
今後も,よろしくお願いします。

お礼日時:2006/11/26 22:31

同一ブック内のシート集計なら =SUM(Sheet1:Sheet4!A1) のように最初と最後を出来ますが、他ブック間はわかりません。



それより50ブックもリンクして不安定になりませんか?
私ならリンクでなくVBAで集計するかな。

この回答への補足

ありがとうございます。そうなんです。同一ブック内での方法は知っていたのですが,<例題>のような場合の簡単な集計方法が分かりません。
50ブックのリンクですが,今のところ大丈夫です。というのも,<例題>でいうと,各ブックのbのA5を,別の集計用一覧表にひとつずつ呼び出して,それを集計するという方法で答えを求めています。(別のブックの集計用シートのA1セルに「=[1ブック.xls]b!$A$5」,A2セルに「=[2ブック.xls]b!$A$5」,A3セルに「=3ブック.xls]b!$A$5」,A4セルに=「4ブック.xls]b!&A&5」,……と入力(「=」の後に対象セルをそれぞれクリックするだけ)し,あとはA1~A*をオートサムで求めています。
これって,すごく面倒で…
「VBA」ってどのような関数ですか?

補足日時:2006/11/12 23:53
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています