日付と入荷予定数が記載された一覧表のSHEET(SHEET名:集計表)があります。
(商品名もありますが、特にマクロ起動の際は使用しません)
それとは別に管理表のSHEET(SHEET名:管理表)があり、それには横軸方向に日付があり、その下にその日付で入荷予定の総数を記入する予定です。
集計表の日付、入荷数を抽出し、管理表に各日の総数を記入するようなマクロを組みたいです。
日々入荷予定数が変わるので、日々管理表への総数変更(更新)をしたいため、マクロで自動化したいです。
もし難しい構文になりそうでしたら、簡単でもいいので説明を記載していただけると非常に助かります。
よろしくおねがいします。
No.9ベストアンサー
- 回答日時:
No6です。
以下のマクロを管理表.xlsmに登録してください。
Const folder_name As String = "d:\goo\excel" '集計表.xlsmの格納ホルダ
が 集計表.xlsmの格納ホルダです。あなたの環境にあわせて適切に設定してください。
集計表.xlsmは必ず、クローズした状態で、マクロを実行してください。
--------------------------------------------------
Option Explicit
Public Sub 総数更新()
Const folder_name As String = "d:\goo\excel" '集計表.xlsmの格納ホルダ
Const book_name1 As String = "集計表.xlsm"
Const book_name2 As String = "管理表.xlsm"
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long
Dim maxcol2 As Long
Dim row1 As Long
Dim col2 As Long
Dim diff As Long
Dim date0 As Date
Set sh2 = Worksheets("管理表")
maxcol2 = sh2.Cells(2, Columns.Count).End(xlToLeft).Column '2行目の最終列取得
'総数クリア
sh2.Range("B3:B" & maxcol2).Value = ""
date0 = sh2.Cells(2, "B").Value
If Day(date0) <> 1 Then
MsgBox ("B2の日付が1日でない")
Exit Sub
End If
Application.ScreenUpdating = False
Workbooks.Open (folder_name & "\" & book_name1)
Workbooks(book_name1).Activate
Set sh1 = Worksheets("集計表")
maxrow1 = sh1.Cells(Rows.Count, "C").End(xlUp).Row 'C列の最大行取得
For row1 = 2 To maxrow1
diff = sh1.Cells(row1, "C").Value - date0
If diff >= 0 Then
ThisWorkbook.Worksheets("管理表").Cells(3, 2 + diff).Value = ThisWorkbook.Worksheets("管理表").Cells(3, 2 + diff).Value + sh1.Cells(row1, "D").Value
End If
Next
Workbooks(book_name1).Close
Application.ScreenUpdating = True
MsgBox ("更新完了")
End Sub
tatsu99さん>
再度のマクロ作成、ありがとうございます。
家では試せませんので、明日試してみます。
いろいろお世話になりました!
No.8
- 回答日時:
こんばんは!
横からお邪魔します。
「集計表.xlsm」と「管理表.xlsm」は同じフォルダ内に保存されているという前提です。
VBAでもそのままワークシート関数が使えますので、SUMIF関数で対応してみました。
管理表Bookの標準モジュールにしてください。
Sub Sample1()
Dim j As Long, fN As String
Dim wB As Workbook, wS As Worksheet
fN = ThisWorkbook.Path & "\" & "集計表.xlsm"
Workbooks.Open fN
Set wB = ActiveWorkbook
Set wS = wB.Worksheets("集計表")
With ThisWorkbook.Worksheets("管理表")
For j = 2 To .Cells(2, Columns.Count).End(xlToLeft).Column
.Cells(3, j) = WorksheetFunction.SumIf(wS.Range("C:C"), .Cells(2, j), wS.Range("D:D"))
Next j
End With
'//開いたブック「集計表.xlsm」を保存せずに閉じる//
Application.DisplayAlerts = False
wB.Close
Application.DisplayAlerts = True
MsgBox "完了"
End Sub
こんなんではどうでしょうか?m(_ _)m
No.7
- 回答日時:
取り敢えず。
Sub try()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim r1 As Range, r2 As Range
Dim r As Range, cnt As Integer
Set ws1 = Workbooks("集計表.xlsm").Worksheets("集計表")
Set ws2 = ThisWorkbook.Worksheets("管理表")
With ws1
Set r1 = .Range("C2", .Cells(Rows.Count, 3).End(xlUp))
End With
With ws2
Set r2 = .Range("B2", .Cells(2, Columns.Count).End(xlToLeft))
For Each r In r2
cnt = WorksheetFunction.SumIf(ws1.Range(r1.Address(0, 1)), "=" & r.Value, ws1.Range(r1.Offset(, 1).Address(0, 1)))
r.Offset(1).Value = cnt
Next
End With
Set r1 = Nothing
Set r2 = Nothing
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
出来上がっては見たものの(多分いけるかな?)、No.6の
>マクロ実行前は閉じている前提が希望です。
は完全に作り直しですので、検証の出来ない私は退散するしかないですね。
ググって見るとわかりますけど、ブックをとじた状態でデータを出すのがどれだけ大変なのか
色々見つかると思いますよ。
簡単に言えば『閉じている本の中身を読む』のと同じですからね。
ただ最近の物であれば上手くいけばブックに接続をし、データベースもどきでデータを抜き出せるかも
しれませんが、あいにく私にはそれば出来る環境ではないですし。
完成すると良いですね。
No.6
- 回答日時:
>説明不足でした。
集計表と管理表は別のエクセルになります。>この形でのマクロは可能でしょうか。。。?
以下の補足をお願いします。
1)集計表のあるブックのブック名(拡張子も含めて記述してください)
2)管理表のあるブックのブック名(拡張子も含めて記述してください)
3)マクロを集計表のあるブックに割り当てるのか、管理表のあるブックのブックに割り当てるかの指定
(マクロを割り当てられたブックの拡張子は.xlsmになります。他方は、xlsm又はxlsxになります)
4)マクロ実行時、両ブックは既に開かれている前提でマクロを実行しますがよろしいでしょうか。
tatsuさま
1 集計表.xlsm
2 管理表.xlsm
3 管理表側です。
4 集計表側は可能であれば、マクロ実行前は閉じている前提が希望です。
宜しくお願いします(_ _)
No.5
- 回答日時:
集計表の入荷日が月を跨ごうが年を跨ごうが、管理表の日付が何日から始まろうがそこは問題にはならないのですが、
なにぶんExcelが古い物でブック指定が違っているんですよね。
同一ブックであればまだ良かったのですが。。。
No.4
- 回答日時:
No1です。
以下のマクロを標準モジュールへ登録してください。
Option Explicit
Public Sub 総数更新()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long
Dim maxcol2 As Long
Dim row1 As Long
Dim col2 As Long
Dim diff As Long
Dim date0 As Date
Set sh1 = Worksheets("集計表")
Set sh2 = Worksheets("管理表")
maxrow1 = sh1.Cells(Rows.Count, "C").End(xlUp).Row 'C列の最大行取得
maxcol2 = sh2.Cells(2, Columns.Count).End(xlToLeft).Column '2行目の最終列取得
date0 = sh2.Cells(2, "B").Value
If Day(date0) <> 1 Then
MsgBox ("B2の日付が1日でない")
Exit Sub
End If
'総数クリア
sh2.Range("B3:B" & maxcol2).Value = ""
For row1 = 2 To maxrow1
diff = sh1.Cells(row1, "C").Value - date0
If diff >= 0 Then
sh2.Cells(3, 2 + diff).Value = sh2.Cells(3, 2 + diff).Value + sh1.Cells(row1, "D").Value
End If
Next
MsgBox ("更新完了")
End Sub
tatsu99さん>
さっそくの回答ありがとうございます。
申し訳ありません。
説明不足でした。集計表と管理表は別のエクセルになります。
この形でのマクロは可能でしょうか。。。?
No.2
- 回答日時:
SUMIF関数
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu …
でいけるんじゃないですか?
>日々入荷予定数が変わるので、日々管理表への総数変更(更新)をしたいため
なら、数式が手っ取り早いですよ。
管理表の日付が変更されたとしても、セルを参照するのですから数式を変える必要はないと思いますし。
まぁ、担当者が『間違えて数式消しちゃうから』と言うなら別ですけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) Excelのマクロを教えていただけないでしょうか? 1 2023/07/06 19:56
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- Excel(エクセル) 【Excel質問】別シートにある複数の同型の表から、同じ行項目にある数字を集計する 4 2023/02/16 00:14
- Excel(エクセル) Excel 在庫管理について 3 2023/02/09 10:00
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) EXCEL値貼り付け(ある条件のもと自動化) 5 2023/06/06 12:21
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
別ブックをダイアログボックス...
-
【VBA】全シートの計算式を全て...
-
vbaでvbaProjectのパスワード解...
-
ワイルドカード「*」を使うとう...
-
vbaで他のブックに転記したい。...
-
VBS Bookを閉じるコード
-
VBAで別のブックにシートをコピ...
-
エクセルVBAで書式と値の貼付け...
-
ACCESSVBA からExcelの他ブック...
-
Excel2007VBAファイルの表示に...
-
Excelブックがアクティブになっ...
-
エクセルのマクロを使ってメー...
-
【Excel VBA】書き込み先ブック...
-
Excel-VBAでのファイルの開き方
-
【ExcelVBA】zip圧縮されたCSV...
-
VBSでExcelのオープン確認
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
(マクロ)データをAブックからB...
-
VBS Bookを閉じるコード
-
VBA 別ブックからコピペしたい...
-
VBA 複数のエクセルから一つの...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA コードを実行すると画面が...
-
【VBA】全シートの計算式を全て...
-
複数のエクセルブックをひとつ...
-
VBA 実行時エラー 2147024893
-
ExcelのVBAです。フォルダ内の...
おすすめ情報