![見出し画像](https://assets.st-note.com/production/uploads/images/86641667/rectangle_large_type_2_73510d0bf1a259de3d3b3c9be38e0234.png?width=800)
ExcelVBAロボット。決定を補助してくれるデータをもってきて!
前回は、ファイルやシートをコピーについて行いました。
考えながらする時は手作業が良いと思います。でも、定型的に繰り返すことはロボットにお願いしたいと個人的には思っています。
作業全体の流れのなかで
取引先へ贈答した、お中元、お歳暮のリストの過去のものがずらっと並んだ贈答品.xlsxがあります。新シート、今回だと[2022お歳暮]のシートを作り⇒「今年のお歳暮どうするか考え、決めて」⇒リスト仕上げ、注文書を作ります。
仕事としてはここが肝心なところで、考えをまとめる、その検討を補助してくれる、過去のデータ一覧を作ります。
1.エクセルをこうして
![](https://assets.st-note.com/img/1662933590633-iaDB8tlm3R.png?width=800)
(D)はシート名で検索します →「どこに送る?」検討
前回(この場合2022お中元)と同じところに送れば良いかと考えますが、昨年2021お歳暮や、できればその前あたりも見て、有り無しなど確認して(前回も間違いないんでしょうけど、今回以降は自分の責任になるので)安心したいところです。
![](https://assets.st-note.com/img/1662932617461-1ajDK3VwZE.png?width=800)
(E)は取引先名で検索します →「何を送る?」検討
無難なもので良いかと考えますが、取引先によって、まったく同じなのか、お中元・お歳暮でパターンあるのか、金額を確認したいところです。
![](https://assets.st-note.com/img/1662933445585-w05iLW1FRC.png?width=800)
2.コードをコピペ、ボタンを設定
Sub シート名検索() 'ボタン4に設定
Application.ScreenUpdating = False 'スクリーンOFF
Sheets("Sheet1").Select 'シートの選択
'前に書き出した一覧表クリア
kaisi_gyo = 21
maxRow = Range("B65536").End(xlUp).Row
If maxRow >= kaisi_gyo Then
Range(Cells(21, 2), Cells(maxRow, 8)).Select
Selection.ClearContents
End If
Range("C13").Select
'このエクセルファイル名
a_name = ActiveWorkbook.Name
'ターゲットのフォルダ名とファイル名
pt = Range("C5") 'フォルダ名
fn = Range("D5") & Range("E5") 'ファイル名
t_fll = pt & "\" & fn 'ファイル名(フルパス)
'今回のシート名
new_sheet = Range("C10")
'検索文字★
word_s = Range("C13")
'検索開始行・書き出し開始行
gyo1 = 3
gyo2 = kaisi_gyo
'変数
t_name = ""
sina = ""
kin = 0
saki = ""
t_ad = ""
tel = ""
'ターゲットファイルが開いていたら閉じる()
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 sheet_name.Name <> "注文書1" Then '---------------------------1
If sheet_name.Name <> "注文書2" Then '-------------------------2
If sheet_name.Name <> new_sheet Then '---------------------3
If InStr(sheet_name.Name, word_s) > 0 Then '★----------4
Sheets(sheet_name.Name).Select
Do While Cells(gyo1, 1) <> ""
t_name = Cells(gyo1, 1)
sina = Cells(gyo1, 2)
kin = Cells(gyo1, 3)
saki = Cells(gyo1, 4)
t_ad = Cells(gyo1, 5)
tel = Cells(gyo1, 6)
Workbooks(a_name).Activate
Cells(gyo2, 2) = sheet_name.Name
Cells(gyo2, 3) = t_name
Cells(gyo2, 4) = sina
Cells(gyo2, 5) = kin
Cells(gyo2, 6) = saki
Cells(gyo2, 7) = t_ad
Cells(gyo2, 8) = tel
gyo2 = gyo2 + 1
Workbooks(fn).Activate
gyo1 = gyo1 + 1
Loop
End If '★---------------------------------------------4
End If '---------------------------------------------------3
End If '-------------------------------------------------------2
End If '---------------------------------------------------------1
gyo1 = 3
Next
'ターゲットファイルを閉じる
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = fn Then
Application.CutCopyMode = False
wb.Close SaveChanges:=False
Application.CutCopyMode = True
End If
Next
'シート名でソート
maxRow = Range("B65536").End(xlUp).Row
Range(Cells(20, 2), Cells(maxRow, 8)).Sort _
Key1:=Range("B20"), _
Order1:=xlDescending, _
Header:=xlYes
Application.ScreenUpdating = True 'スクリーンON
End Sub
Sub 相手先検索() 'ボタン5に設定
Application.ScreenUpdating = False 'スクリーンOFF
Sheets("Sheet1").Select 'シートの選択
'前に書き出した一覧表クリア
kaisi_gyo = 21
maxRow = Range("B65536").End(xlUp).Row
If maxRow >= kaisi_gyo Then
Range(Cells(kaisi_gyo, 2), Cells(maxRow, 8)).Select
Selection.ClearContents
End If
Range("G13").Select
'このエクセルファイル名
a_name = ActiveWorkbook.Name
'ターゲットのフォルダ名とファイル名
pt = Range("C5") 'フォルダ名
fn = Range("D5") & Range("E5") 'ファイル名
t_fll = pt & "\" & fn 'ファイル名(フルパス)
'今回のシート名
new_sheet = Range("C10")
'検索文字★
word_s = Range("G13")
'検索開始行・書き出し開始行
gyo1 = 3
gyo2 = kaisi_gyo
'変数
t_name = ""
sina = ""
kin = 0
saki = ""
t_ad = ""
tel = ""
'ターゲットファイルが開いていたら閉じる()
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 sheet_name.Name <> "注文書1" Then '---------------------------1
If sheet_name.Name <> "注文書2" Then '-------------------------2
If sheet_name.Name <> new_sheet Then '---------------------3
Sheets(sheet_name.Name).Select
Do While Cells(gyo1, 1) <> ""
If InStr(Cells(gyo1, 1), word_s) > 0 Then '★------4
t_name = Cells(gyo1, 1)
sina = Cells(gyo1, 2)
kin = Cells(gyo1, 3)
saki = Cells(gyo1, 4)
t_ad = Cells(gyo1, 5)
tel = Cells(gyo1, 6)
Workbooks(a_name).Activate
Cells(gyo2, 2) = sheet_name.Name
Cells(gyo2, 3) = t_name
Cells(gyo2, 4) = sina
Cells(gyo2, 5) = kin
Cells(gyo2, 6) = saki
Cells(gyo2, 7) = t_ad
Cells(gyo2, 8) = tel
gyo2 = gyo2 + 1
Workbooks(fn).Activate
End If '★-----------------------------------------4
gyo1 = gyo1 + 1
Loop
End If '---------------------------------------------------3
End If '-------------------------------------------------------2
End If '---------------------------------------------------------1
gyo1 = 3
Next
'ターゲットファイルを閉じる
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = fn Then
Application.CutCopyMode = False
wb.Close SaveChanges:=False
Application.CutCopyMode = True
End If
Next
'シート名でソート
maxRow = Range("B65536").End(xlUp).Row
Range(Cells(20, 2), Cells(maxRow, 8)).Sort _
Key1:=Range("B20"), _
Order1:=xlDescending, _
Header:=xlYes
Application.ScreenUpdating = True 'スクリーンON
End Sub
次回は、ズラッと並んで・・からの脱出の最終回!
リストづくりと、発注書への書き換えをします。
不明点は、ご連絡いただいて結構です。
(すぐにとか、直接)お答えできないときはすみません。
note初心者なんで、noteのコミュニケートの方法よく分かりませんが ^^;
Twitterでも。どのツイートでも返信に「noteを見た」で良いです。
出来高急増!
この記事が気に入ったらサポートをしてみませんか?