
vbaで該当するセルに別ブックのセル値の合計を反映させたいです。
添付画像のようなBook1Sheet1があります。
こちらの日付と種類、種類2が該当するセルをBook2Sheet2に反映したいです。
添付画像で例えますと、
Book1Sheet1の2行目と3行目のEの数をBook2Sheet2のG3に反映させたいです。この場合は「12」になります。
Book1Sheet1はどこまで行数が続くが不明なのでA列に空白がでれば、ループを抜け出すようになっています。なので、Findメソッドで該当するセルを検索し、上から順に1行ずつ処理していくようにするのが良いのかと思ったのですが、方法がわかりません。
また、Book1Sheet1で同じ日付が2行以上あったとして、Book2Sheet2に合計値を反映させることはそもそも可能なのでしょうか。
説明がわかりにくくて、申し訳ございませんが、何卒、宜しくお願い致します。

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
別のシートを参照して計算する方法
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
-
4
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
5
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
6
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
7
【Excel VBA】ファイル名が一定でないファイルの指定方法
Excel(エクセル)
-
8
VBAでダブルコーテーション入りの数式をセルにセットしたい
Visual Basic(VBA)
-
9
ExcelVBAでBookを開く時にファイル名の一部だけを指定で
Access(アクセス)
-
10
Excel VBA A列が特定の値以外の場合、その行を削除
Excel(エクセル)
-
11
エクセルVBA:毎月名前が変わるエクセルファイルを毎月異なるフォルダから開く
その他(コンピューター・テクノロジー)
-
12
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
13
Excel マクロ:変数を複数使う場合
Excel(エクセル)
-
14
「マクロ」の足し算の式を教えてくださいm()m
Excel(エクセル)
-
15
エクセル マクロで数値が変った時行挿入できますか
Excel(エクセル)
-
16
エクセルマクロで不特定なファイル名を使用するには
Excel(エクセル)
-
17
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
18
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
-
19
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
vba textboxへの入力について教...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
【VBA】 結合セルに複数画像と...
-
Vba Array関数について教えてく...
-
vbsでのwebフォームへの入力制限?
-
複数のExcelファイルをマージす...
-
Vba セルの4辺について罫線が有...
-
VBAでセルの書式を変えずに文字...
-
VBA ユーザーフォーム ボタンク...
-
【マクロ】並び替えの範囲が、...
-
pdfファイルの複数添付 引数の型
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルのマクロについて教え...
-
VBA 最終行の取得がうまくいか...
-
WindowsのOutlook を VBA から...
-
VBA 円グラフ 特定条件に一致し...
-
[VB.net] ボタン(Flat)のEnable...
-
【ExcelVBA】値を変更しながら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報
お返事ありがとうございます。
1.マクロがあるのはbook2です。
2.book1はxlsxです。
3.book2はxlsmです。
4.どちらもオープン済みです。
5.6月のみの前提条件で大丈夫です。
6.こちらも6月分のみで大丈夫です。
宜しくお願いいたします。