いつも大変お世話になっております。
VBAで自動集計できるようなシステムを作っています。手助けを御願いします。
やりたいこと
B2の値が月末の時5行目から10行目をそれぞれの月の部分へ自動で値貼り付けしたい。(今作ったので動作はしているようですがどうでしょうか。)
すべての編集が終わってファイルを閉じたときに自動で動作をするようにしたい。
うるう年対応したいのと、一度作成すると毎年使えるものを作りたいです。(現在年はA1セルから引っ張っているのでA1セルを年度が替わるごとに手入力しないといけない。月末データの集計は毎月第3営業日に確定するため、NOWなどの関数は利用できない。)
条件セルの設定
A1セルより年を参照しています。
4列目の月のところは【 0”月”】とセルの書式設定をしています。
もっと簡潔な方法があればご教授お願いします。
素人作業で申し訳ありませんがよろしくお願いいたします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No2です。
>〇月に該当する列がない
>だそうです。
>〇は月によって替わります
表示される「〇月」は正しいのですよね?
それで検索すると、該当する列が見つからないというメッセージ通りの意味です。
(多分、タイトル行の表示内容が想定の解釈と違うものになっているのでしょう)
文章での確認しかできないので、そちらのシートの実態は把握できかねますので。
面倒なので、4月はD列、5月はE列・・と決め打ちして転記すれば良いと思いましたが、既に、他の方がその方式での回答なさっていますので、そちらをご利用ください。
No.4
- 回答日時:
Thisworkbookへ下記のマクロを登録してください。
(添付図参照)Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wd As Variant
Dim ws As Worksheet
Dim wcol As Long
Dim wmonth As Long
Set ws = Worksheets("Sheet1")
wd = ws.Cells(2, 2).Value
If IsDate(wd) = False Then
MsgBox ("B2の値不正")
Exit Sub
End If
If wd <> Application.EoMonth(wd, 0) Then
MsgBox ("月末日でない")
Exit Sub
End If
wmonth = Month(wd)
If wmonth < 4 Then wmonth = wmonth + 12
wcol = wmonth
ws.Cells(5, wcol).Resize(6, 1).Value = ws.Cells(5, 2).Resize(6, 1).Value
End Sub
使用時の注意事項
B2が月末日でないとき、”月末日でない”と表示されます。
この表示が不要な場合は、当該箇所をコメントアウトしてください。
No.3
- 回答日時:
Thisworkbookのモジュールとして以下のマクロを
登録してください。(下図参照)
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wd As Variant
Dim ws As Worksheet
Dim wcol As Long
Dim wmonth As Long
Set ws = Worksheets("Sheet1")
wd = ws.Cells(2, 2).Value
If IsDate(wd) = False Then
MsgBox ("B2の値不正")
Exit Sub
End If
If wd <> Application.EoMonth(wd, 0) Then
MsgBox ("月末日でない")
Exit Sub
End If
wmonth = Month(wd)
If wmonth < 4 Then wmonth = wmonth + 12
wcol = wmonth
ws.Cells(5, wcol).Resize(6, 1).Value = ws.Cells(5, 2).Resize(6, 1).Value
End Sub
ーーーーーーーーーーーーーーーーーーーー
注意事項
Sheet1のB2が日付でない場合、”B2の値不正” ・・・・①
Sheet1のB2が月末日でない場合、”月末日でない”・・・・②
のメッセージが表示されます。
特に②のメッセージは、通常の運用時にも発生しますので、動作確認がおわりましたら、②のメッセージを出力する箇所をコメントアウトしておいてください。
必ず、Thisworkbookに作成してください。
No.2
- 回答日時:
No1です。
>ご指示通り、コピペしましたが、何にも機能しませんでした・
>どうすればいいでしょうか。
何をどうしたらどうなったのか、全くわかりませんけれど・・
動作しているのかしていないのかすらも不明です。
とりあえず、以下に変えれば、何らかのメッセージが表示されると思います。
(メッセージのところが想定した条件とは異なっているところかと)
何も表示されずかつ実行されなければ、設置方法等が違っている可能性が高いです。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim d, f
With Worksheets("Sheet1")
d = .Cells(2, 2)
If Not IsDate(d) Then
MsgBox "セル値が日付ではない"
Exit Sub
End If
If d <> Application.EoMonth(d, 0) Then
MsgBox "月末日ではない"
Exit Sub
End If
Set f = .Range("D4:O4").Find(Month(d) & "月", LookAt:=xlWhole)
If f Is Nothing Then
MsgBox Month(d) & "月に該当する列が存在しない"
Exit Sub
End If
.Cells(5, f.Column).Resize(6).Value = .Range("B5:B10").Value
End With
End Sub
No.1
- 回答日時:
こんにちは
これ(↓)のような気もしますが、条件がいろいろと違っているような・・?
https://oshiete.goo.ne.jp/qa/13504173.html
とりあえず、こちらのご質問文の通りに解釈するなら・・
>ファイルを閉じたときに自動で動作をするようにしたい。
マクロ有効ブックで良いのなら、Workbook_BeforeCloseのイベントを利用することで可能です。
>条件セルの設定
>A1セルより年を参照しています。
「条件セル」と言うのがどのセルのことか不明です。
B2セルがシリアル値(=エクセルの日付型の値)であるなら、A1セルは不要と思いますが?
それとも、B2セルの値がA1セルを参照しているってことでしょうか?
もしそうなら、年以外の部分は何を参照しているのかが不明ですけれど・・
>4列目の月のところは【 0”月”】とセルの書式設定をしています
4行目のことだと解釈しましたが・・
月表示の部分は、シリアル値ではなく数値の1~12が入力されていて、書式設定で「〇月」のように表示しているものと解釈しました。
ご質問文の通りの処理とするなら、以下で可能と思います。
※ 対象とするシートはSheet1と仮定しています。
※ B2セルの値はシリアル値と仮定しています。
※ 4行目の「月」表示はシリアル値ではなく、上記の通りと仮定しています。
※ B2の値が月末でない場合には何もしません。
⇒ 例えば、年末(12月31日)であっても、ブックを開き、閉じなければ処理は行われません。
(B2セルが月末になっている状態でブックを閉じる必要があります)
当該ブックの「ThisWorkbook」モジュールに以下をコピペ。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim d, f
With Worksheets("Sheet1")
d = .Cells(2, 2)
If Not IsDate(d) Then Exit Sub
If d <> Application.EoMonth(d, 0) Then Exit Sub
Set f = .Range("D4:O4").Find(Month(d) & "月", LookAt:=xlWhole)
If f Is Nothing Then Exit Sub
.Cells(5, f.Column).Resize(6).Value = .Range("B5:B10").Value
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) EXCEL値貼り付け(ある条件のもと自動化) 5 2023/06/06 12:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- その他(Microsoft Office) エクセルの休日について教えてください。 1 2023/01/06 15:45
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
EXCELで変数をペーストしたい
-
Excel VBA、 別ブックの最終行...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
TODAY()で設定したセルの日付...
-
【Excel】指定したセルの名前で...
-
screenupdatingが機能しなくて...
-
エクセルvba:自己セルの情報取...
-
【Excel VBA】指定行以降をクリ...
-
Excel VBAで比較して数値があっ...
-
連続する複数のセル値がすべて0...
-
DataGridViewの各セル幅を自由...
-
実行時エラー438 オブジェクト...
-
Excelのハイパーリンクにマクロ...
-
3桁または4桁の数値を時刻に...
-
特定の文字を条件に行挿入とそ...
-
VBからEXCELのセルの値を取得す...
-
クリックしたセルに色を付けるV...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報
引き続きありがとうございます。それでは答えが出なかったため、新たにvbaにて自動化しようとし奮闘してます。
条件セルの設定については、日にちの参照先です。
B2セルがあればA1は不要→Q列に末尾マスターを作成していてその参照先がa1年4行月としています。
B2セルは報告書の数値をセル参照で引っ張ってきます。
月表示の部分の解釈はご認識のとおりです!
仮定部分についてですが、
※ B2の値が月末でない場合には何もしません。
⇒ 例えば、年末(12月31日)であっても、ブックを開き、閉じなければ処理は行われません。
報告日とありますが、実績集計日と置き換えてください。なので、翌月第3営業日にデータ作成がされたものが送られてくる仕組みです。
なので、B2セルが月末になっている状態でブックを閉じるのは月初第3営業日ですので問題ない認識です。
最後に「ThisWorkbook」モジュールと標準モジュールとして追加したモジュールとはどう異なるのでしょうか?
ほんと、基本のきが分からず申しわけありません。ご教授お願いします!
ありがとうございます。
ご指示通り、コピペしましたが、何にも機能しませんでした・・・・・・。どうすればいいでしょうか。
エラーメッセージ
〇月に該当する列がない
だそうです。
〇は月によって替わります。