![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
vbaで該当するセルに別ブックのセル値の合計を反映させたいです。
添付画像のようなBook1Sheet1があります。
こちらの日付と種類、種類2が該当するセルをBook2Sheet2に反映したいです。
添付画像で例えますと、
Book1Sheet1の2行目と3行目のEの数をBook2Sheet2のG3に反映させたいです。この場合は「12」になります。
Book1Sheet1はどこまで行数が続くが不明なのでA列に空白がでれば、ループを抜け出すようになっています。なので、Findメソッドで該当するセルを検索し、上から順に1行ずつ処理していくようにするのが良いのかと思ったのですが、方法がわかりません。
また、Book1Sheet1で同じ日付が2行以上あったとして、Book2Sheet2に合計値を反映させることはそもそも可能なのでしょうか。
説明がわかりにくくて、申し訳ございませんが、何卒、宜しくお願い致します。
![「【vba】該当するセルに別ブックのセル値」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/543033861_60d7cecf9ef0a/M.png)
No.3ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 集計()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Dim wrow As Long
Dim wcol As Long
Dim dicT As Object
Dim key As Variant
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Workbooks("Book1.xlsx").Worksheets("Sheet1")
Set sh2 = ThisWorkbook.Worksheets("Sheet2")
sh2.Rows("3:" & Rows.Count).ClearContents 'Sheet2の3行目以降をクリア
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1の最大行取得
row2 = 3
For row1 = 2 To maxrow1
key = sh1.Cells(row1, "C").Value & "|" & sh1.Cells(row1, "D").Value
If dicT.exists(key) = False Then
dicT(key) = row2
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "C").Value
sh2.Cells(row2, "B").Value = sh1.Cells(row1, "D").Value
row2 = row2 + 1
End If
wcol = day(sh1.Cells(row1, "A").Value) + 2
wrow = dicT(key)
sh2.Cells(wrow, wcol).Value = sh2.Cells(wrow, wcol).Value + sh1.Cells(row1, "E").Value
Next
MsgBox ("完了")
End Sub
No.5
- 回答日時:
No.4です。
ブック2のデータが多くて時間がかかっていると言うのなら、
https://officedic.com/excel-vba-app-calculation/
を参考に
Sub megu_2()
Const datash As String = "[Book1.xlsx]Sheet1!"
Dim r As Range
Application.Calculation = xlCalculationManual '自動計算停止(手動計算)
With ThisWorkbook.Worksheets("Sheet2")
Set r = Intersect(.Range("C1", .Cells(1, Columns.Count).End(xlToLeft)).EntireColumn, .Range("A3", .Cells(Rows.Count, 1).End(xlUp)).EntireRow)
End With
With r
.Formula = "=SUMIFS(" & datash & "$E:$E," & datash & "$A:$A,C$1," & datash & "$C:$C,$A3," & datash & "$D:$D,$B3)"
.Value = .Value
End With
Set r = Nothing
Application.Calculation = xlCalculationAutomatic '自動計算開始
End Sub
でしょうか?
No.4
- 回答日時:
初級レベルなジジィは長いコードが書けませんので寂しかったらスル~してください。
Sub megu()
Const datash As String = "[Book1.xlsx]Sheet1!"
Dim r As Range
With ThisWorkbook.Worksheets("Sheet2")
Set r = Intersect(.Range("C1", .Cells(1, Columns.Count).End(xlToLeft)).EntireColumn, .Range("A3", .Cells(Rows.Count, 1).End(xlUp)).EntireRow)
End With
With r
.Formula = "=SUMIFS(" & datash & "$E:$E," & datash & "$A:$A,C$1," & datash & "$C:$C,$A3," & datash & "$D:$D,$B3)"
.Value = .Value
End With
Set r = Nothing
End Sub
No.2
- 回答日時:
補足要求です。
1.マクロがあるのはどちら側のブックですか。
2.Book1の拡張子は何でしょうか。(xlsm,xlsxのどちらでしょうか)
3.Book2の拡張子は何でしょうか。(xlsm,xlsxのどちらでしょうか)
4.Book1,Book2ともにオープン済みという前提で良いのですか。
5.Book1のSheet1には2021年6月の日付のみという前提で良いのですか。それとも他の月のデータも
あるのですか。
6.Book2のSheet2は6/1~6/30の6月分のみという前提でよいですか。それとも、
右側に7月,8月,9月などがあるのですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Excel(エクセル) 【!】Excel 2つの条件付き書式が反映されません。。 5 2023/07/14 16:47
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
別のシートを参照して計算する方法
Visual Basic(VBA)
-
EXCELで複数のブックの特定のセルの合計を求める方法は?
Excel(エクセル)
-
「マクロ」の足し算の式を教えてくださいm()m
Excel(エクセル)
-
-
4
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
7
2重のDo~Loopは?
Visual Basic(VBA)
-
8
VBA 数式ではなく計算結果をセルに入れたい
Excel(エクセル)
-
9
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
10
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
-
11
別ファイルを開かず、INDIRECT関数を使用せずに、別ファイルのデータを求めたい
Excel(エクセル)
-
12
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
13
複数のExcelファイルにある同名シートを1つのシートに一括でまとめるには?
Excel(エクセル)
-
14
VBAで先月、先々月を求める方法
Visual Basic(VBA)
-
15
VBAでの結合セルのコピー&ペースト
Excel(エクセル)
-
16
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
17
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
18
エクセルのセル内の余白の設定って出来るのでしょうか?
Excel(エクセル)
-
19
VBAで変数に関数式の結果をセットする場合
Excel(エクセル)
-
20
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング
-
エクセルVBAコードで教えて下さ...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
VBAコードについて教えてくださ...
-
vba アクティブシートの名前変...
-
Excelのマクロについて教えてく...
-
Outlookの「受信日時」「件名」...
-
ユーザーフォームに別シートか...
-
Excelのマクロについて教えてく...
-
VBAで各列の"+"と"o"の合計数を...
-
Excelのマクロについて教えてく...
-
久しぶりのプログラミング
-
エクセルVBA
-
Excelのマクロについて教えてく...
-
Vba 実数および実数タイプの変...
-
エクセルVBAについて
-
VBAの計算で@が出てしまう件
-
ExcelVBA シート名を複数セルか...
-
VBA UserFormからの転記で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで大量のファイルをシート名...
-
VBA レジストリの値の読み方に...
-
Excelのマクロについて教えてく...
-
ユーザーフォームに別シートか...
-
VBAの計算で@が出てしまう件
-
エクセルVBAについて
-
Vba 実数および実数タイプの変...
-
【ExcelVBA】値を変更しながら...
-
VBA一覧取得 再投稿
-
VBA指定行削除
-
エクセルVBAについて
-
VBA ユーザーフォーム ボタンク...
-
VBA 何かしら文字が入っていたら
-
エクセルについて
-
2つのマクロでチェックボックス...
-
【マクロ】1つのマクロの中に...
-
ExcelのVBAコードについて教え...
-
VB.net(VB)で、フォームにExcel...
-
Vba SelStart、SelLen教えてく...
-
Excel-VBAのmsgBox()の不思議
おすすめ情報
お返事ありがとうございます。
1.マクロがあるのはbook2です。
2.book1はxlsxです。
3.book2はxlsmです。
4.どちらもオープン済みです。
5.6月のみの前提条件で大丈夫です。
6.こちらも6月分のみで大丈夫です。
宜しくお願いいたします。