- 締切済み
VBA Indirectで他ブック間の集計は可能?
★ブックBの売上1月、売上2月など「売上」を含むシート("売上*")の、ソート後のSUBTOTALの数値を、 別ブックAで拾い上げ一つのセルで合算表示することは可能ですか? ブックB内であればワークシート関数Indirectで出来ましたが、別ブックとなるとマクロ作成時にIndirect関数を挿入することは不可能ですか。 ★を実行したい場合に他に方法があれば併せて教えて頂けるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- eden3616
- ベストアンサー率65% (267/405)
出来れば、新規追加の質問は新たに投稿し直してください。 時間経過により回答が締め切られているため、 この文面はサポートにより追加して頂いております。 >更に欲を出したと言うのは、『同じモジュール内に、同じく >「ブックBの"仕入*"の特定セルからの値取得後、 >Sheet1のB1にcnt値を書き出す」というコードについてです。 追加で書出す「値」とは、売上*と同様に特定セル(合計値)を 合計した値という意味と捉えて回答致します。 「売上*」シートのA10セルを集計してcnt(0)へ合計し、 「仕入*」シートのB10セルを集計してcnt(1)へ合計します。 Sheet1のセルA1,B1に合計値「cnt(0)及びcnt(1)」を書き出します。 以下のコードで差替えて、ご利用ください。 ■VBAコード Sub 別ブックの合計() '型宣言 Dim fpath As String Dim tbook As Workbook Dim i As Integer Dim cnt(1) As Double 'ファイルを指定 fpath = Application.GetOpenFilename("全てのファイル(*.*),*.*") '指定したファイルを開く Set tbook = Workbooks.Open(fpath) 'シートの数だけ繰り返し For i = 1 To tbook.Sheets.Count '条件に一致したシート名を対象に処理 If tbook.Sheets(i).Name Like "売上*" Then '対象のシートのセルA10より値を取得し、変数cnt(0)に加算 cnt(0) = cnt(0) + tbook.Sheets(i).Range("A10").Value End If If tbook.Sheets(i).Name Like "仕入*" Then '対象のシートのセルB10より値を取得し、変数cnt(1)に加算 cnt(1) = cnt(1) + tbook.Sheets(i).Range("B10").Value End If Next i 'ブックを閉じる tbook.Close 'Sheet1のセルA1,B1に合計値を書き出し ThisWorkbook.Sheets("Sheet1").Range("A1").Value = cnt(0) ThisWorkbook.Sheets("Sheet1").Range("B1").Value = cnt(1) End Sub
- eden3616
- ベストアンサー率65% (267/405)
VBAで別ブックの条件に一致するシートのセル「A10」の値を取得・合計し VBAコードを記述しているブックの「Sheet1」セル「A1」に結果を表示するコードです。 (1)新規ブックを作成し、以下のコードを標準モジュールに貼り付け (2)「別ブックの合計」を実行 (3)ファイルを開くダイアログが表示されるので、対象のブックを開く ■VBAコード Sub 別ブックの合計() '型宣言 Dim fpath As String Dim tbook As Workbook Dim i As Integer Dim cnt As Double 'ファイルを指定 fpath = Application.GetOpenFilename("全てのファイル(*.*),*.*") '指定したファイルを開く Set tbook = Workbooks.Open(fpath) 'シートの数だけ繰り返し For i = 1 To tbook.Sheets.Count '条件に一致したシート名を対象に処理 If tbook.Sheets(i).Name Like "売上*" Then '対象のシートのセルA10より値を取得し、変数cntに加算 cnt = cnt + tbook.Sheets(i).Range("A10").Value End If Next i 'ブックを閉じる tbook.Close 'Sheet1のセルA1に合計値を書き出し ThisWorkbook.Sheets("Sheet1").Range("A1").Value = cnt End Sub
お礼
お返事が大変遅くなって申し訳ありません。 教えて頂いたコードをコピペすると、確かにやりたかったことができました!!ありがとうございます。 それで更に欲を出して色々試行錯誤を続けていましたが、どうも行き詰まりになってしまい、図々しいのですがもしよろしければ再度教えて頂けたら幸いだなぁと思っております。。。 教えて頂いたのは「ブックBの"売上*"の特定セルからの値取得後、Sheet1のA1にcnt値を書き出し」でした。 更に欲を出したと言うのは、『同じモジュール内に、同じく「ブックBの"仕入*"の特定セルからの値取得後、Sheet1のB1にcnt値を書き出す」というコードについてです。 最小限のポチッで、Sheet1のA1とB1にcnt値がバーンと入る方法を考えています。 もしももしもよろしければ、、、教えて頂けるとありがたいです。m(__)m