ExcelVBAロボット。データを追加、書き直して!
前回は、ロボットにデータを集めてくることを行いました。
ポイントは
データを定型的に収集する作業と、データみて考えることを切り分ること。
そして、定型的でかつ繰り返すことはロボットにお願いしたいところです。
作業全体の流れのなかで
今回はシリーズの最後です。[2022お歳暮]のシートを作り⇒「今年のお歳暮どうするか考え、決めて」⇒リスト仕上げ、注文書を作ります。
1.エクセルをこうして
2.データみて考え決める。それはあなた。
例えば、鈴木さん、過去のデータをみると、お中元はアイス、お歳暮は、ローストビーフかハムの詰め合わせの肉系、1万円ぐらいまでで、取引が深まったのでしょうか、少し値段上げてきています。
昨年はローストビーフだったので、今年はハムの詰め合わせ
(ハムの詰め合わせの行の緑の部分を、18行の場所にコピペ)
少し値段は上げて9000円にしました(金額のところを直し)
3.あとは、ロボットで。直すときはあなた。
(F)「2022お歳暮」シートに、データを追加します ボタン6
はい(Y)で追加した状態で保存 ※
いいえ(N)で保存しません→追加しません
※間違えて追加してまったり、後で変えたいときは ボタン7おすとファイルが開くので直して上書き保存すれば直せます。
(G)「2022お歳暮」シートのデータを読んで「注文書」シートに、データを転記します ボタン7
「注文書」シートで B2 にある 発注先 を読んで
「2022お歳暮」シート D列に ある場合 15行目以下に 転記します。
2.コードをコピペ、ボタンを設定
Sub コピー先に追記() 'ボタン6に設定
Application.ScreenUpdating = False 'スクリーンOFF
Sheets("Sheet1").Select 'シートの選択
'このエクセルファイル名
a_name = ActiveWorkbook.Name
'ターゲットのフォルダ名とファイル名
pt = Range("C5") 'フォルダ名
fn = Range("D5") & Range("E5") 'ファイル名
t_fll = pt & "\" & fn 'ファイル名(フルパス)
'今回のシート名
new_sheet = Range("C10")
'コピーもと
t_name = Cells(18, 3)
sina = Cells(18, 4)
kin = Cells(18, 5)
saki = Cells(18, 6)
t_ad = Cells(18, 7)
tel = Cells(18, 8)
'ターゲットファイルが開いていたら閉じる()
On Error Resume Next
Open t_fll For Append As #1
Close #1
If Err.Number > 0 Then
Workbooks(fn).Activate
ActiveWorkbook.Close
Application.CutCopyMode = True
End If
'ターゲットファイルを開く
Workbooks.Open Filename:=t_fll
Sheets(new_sheet).Select
'最終行確認 →書き出し行 +1
maxRow = Range("A65536").End(xlUp).Row
gyo = maxRow + 1
'リスト行追加
Cells(gyo, 1) = t_name
Cells(gyo, 2) = sina
Cells(gyo, 3) = kin
Cells(gyo, 4) = saki
Cells(gyo, 5) = t_ad
Cells(gyo, 6) = tel
Rows(gyo).Select
Application.ScreenUpdating = True 'スクリーンON
rc = MsgBox("リスト追加して良いですか", vbYesNo + vbQuestion, "タイトルに表示する文字列")
If rc = vbYes Then
Cells(gyo, 1).Select
ActiveWorkbook.Close SaveChanges:=True
Else
Cells(gyo, 1).Select
ActiveWorkbook.Close SaveChanges:=False
End If
Sheets("Sheet1").Select 'シートの選択
End Sub
Sub コピー先を確認() 'ボタン7に設定
Application.ScreenUpdating = False 'スクリーンOFF
Sheets("Sheet1").Select 'シートの選択
'このエクセルファイル名
a_name = ActiveWorkbook.Name
'ターゲットのフォルダ名とファイル名
pt = Range("C5") 'フォルダ名
fn = Range("D5") & Range("E5") 'ファイル名
t_fll = pt & "\" & fn 'ファイル名(フルパス)
'今回のシート名
new_sheet = Range("C10")
'ターゲットファイルが開いていたら閉じる()
On Error Resume Next
Open t_fll For Append As #1
Close #1
If Err.Number > 0 Then
Workbooks(fn).Activate
ActiveWorkbook.Close
Application.CutCopyMode = True
End If
'ターゲットファイルを開く
Workbooks.Open Filename:=t_fll
Sheets(new_sheet).Select
Application.ScreenUpdating = True 'スクリーンON
End Sub
Sub 注文書作成() 'ボタン8に設定
Application.ScreenUpdating = False 'スクリーンOFF
Sheets("Sheet1").Select 'シートの選択
'今回のシート名
new_sheet = Range("C10")
'このエクセルファイル名
a_name = ActiveWorkbook.Name
'ターゲットのフォルダ名とファイル名
pt = Range("C5") 'フォルダ名
fn = Range("D5") & Range("E5") 'ファイル名
t_fll = pt & "\" & fn 'ファイル名(フルパス)
'ターゲットファイルが開いていたら閉じる()
On Error Resume Next
Open t_fll For Append As #1
Close #1
If Err.Number > 0 Then
Workbooks(fn).Activate
ActiveWorkbook.Close
Application.CutCopyMode = True
End If
'ターゲットファイルを開く
Workbooks.Open Filename:=t_fll
On Error Resume Next
For Each sheet_name In Worksheets
If InStr(sheet_name.Name, "注文書") > 0 Then '-------------------★
Sheets(sheet_name.Name).Select
'前に書き出した一覧表クリア
maxRow = Range("B65536").End(xlUp).Row
If maxRow >= 15 Then
Range(Cells(15, 2), Cells(maxRow, 6)).Select
Selection.ClearContents
End If
Range("B15").Select
End If '---------------------------------------------------------★
Next
gyo1 = 15
gyo2 = 3
On Error Resume Next
For Each sheet_name In Worksheets
If InStr(sheet_name.Name, "注文書") > 0 Then '-------------------★
Sheets(sheet_name.Name).Select
saki = Range("B2")
Sheets(new_sheet).Select
Do While Cells(gyo2, 1) <> "" '--------------------------------loop
If Cells(gyo2, 4) = saki Then '
t_name = Cells(gyo2, 1)
sina = Cells(gyo2, 2)
kin = Cells(gyo2, 3)
t_ad = Cells(gyo2, 5)
tel = Cells(gyo2, 6)
Sheets(sheet_name.Name).Select
Cells(gyo1, 2) = t_name
Cells(gyo1, 3) = sina
Cells(gyo1, 4) = kin
Cells(gyo1, 5) = t_ad
Cells(gyo1, 6) = tel
gyo1 = gyo1 + 1
Sheets(new_sheet).Select
End If
gyo2 = gyo2 + 1
Loop '-----------------------------------------------------loop
gyo2 = 3
End If '---------------------------------------------------------★
gyo1 = 15
Next
'ターゲットファイルを閉じる
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = fn Then
Application.CutCopyMode = False
wb.Close SaveChanges:=True
Application.CutCopyMode = True
End If
Next
Sheets("Sheet1").Select 'シートの選択
Application.ScreenUpdating = True 'スクリーンON
End Sub
ズラッと並んで・・からの脱出!からそのあとは
今回で、シリーズの最後とします。しかし、記事を書いているなかで、あれも、これもと思いつくこと多くて・・・
せっかく書いたネタでもありますし、これをもとに次のことを書きたいと思っています。
①思いついたけど、脱線ぎみになるので、書かなかったことを注釈的というか、コードテクニック、より細かい点
②贈答品を送る仕事を設定して、説明しましたが、より大きい掴みというか、経験してきたことなど、より一般的に
不明点は、ご連絡いただいて結構です。
(すぐにとか、直接)お答えできないときはすみません。
note初心者なんで、noteのコミュニケートの方法よく分かりませんが ^^;
Twitterでも。どのツイートでも返信に「noteを見た」で良いです。
出来高急増!
この記事が気に入ったらサポートをしてみませんか?