【VBA備忘録】他のブックを開いて処理する
みなさん、こんにちは
最近はバスケ(Bリーグ)にはまっているシロネコです。
私が応援すると推しチームが負けるので、応援しないのが一番の応援と肉まん(夫)に言われています。でも応援します。
さて、今回のVBA備忘録は他のExcelブックを開く方法
こっちのブックからコピーしてこっちのブックに貼り付けたいってシーンとか結構あるので自動化させたいんですが、
毎回「どうやるんだったっけな」となるのでここに残していこうと思います。
ユーザーが開くブックを指定しない場合
最初から「このフォルダのこのブック!」というのが決まっている場合はどのブックを開くのかをユーザーに指定してもらわずに自動で開いてほしいので、プログラムに開きたいフォルダのアドレスを組み込んでおきます。
基本の「他のブックを開く」
Sub 他のブックを開く()
Dim adrs As String, bookN As String
'フォルダのアドレスを指定(最後に\をつけるのを忘れずに)
adrs = "C:\Users\shironeco\Downloads\"
'ブックの名前
bookN="開きたいブック.xlsm"
Workbooks.Open adrs & bookN
End sub
指定フォルダ内のブックをすべて開く→処理する→閉じる
Sub フォルダ内のブックをすべて開く()
Dim adrs As String, bookN As String
Dim thiswb As Workbook, thatwb As Workbook
Set thiswb = ThisWorkbook
'フォルダのアドレスを指定(最後に¥をつけるのを忘れずに)
adrs = "C:\Users\shironeco\Downloads\"
'フォルダの中のブックを順番に取得
'Dir(adrs & □□)でadrsフォルダ内のブック(□□)を取得
bookN = Dir(adrs & "*.xlsx") 'adrsフォルダ内xlsxブックのみbookNに取得します
Do Until bookN = "" ' Do until(条件式を満たすまで繰り返す処理)
Workbooks.Open adrs & bookN
'オープンしたブックを変数に格納
Set thatwb = Workbooks.Open(adrs & bookN)
'処理を行う(コピー&ペースト/セルに値を入れるなど)
'オープンしたブックを保存して閉じる(True→Falseで保存しない)
thatwb.Close savechanges:=True
bookN = Dir '次のブックを取得
Loop
End Sub
ユーザーにフォルダを指定してもらう場合
入力された値をもとにブックを開く
例えば「◯年◯月のフォルダから開く」や「◯◯という共通ブックを開く」みたいなシーンは多いと思うんですが、そういうユーザーに指定してもらう場合のとき、私はエクセルシートに簡単な入力フォームみたいなのを作ってそのセルの入力値を取得して使うことが多いです。
上のようにB2とD2に入力してもらう
マクロを実行するとB2とD2の入力値を取得して、「「◯年◯月決算書」というブックを開く」というのをやってみます。
Sub 指定されたブックを開く() Dim thiswb As Workbook, thatwb As Workbook Dim this As Worksheet Dim adrs As String, bookN As String, dy1 As String, dy2 As String Set this = ActiveSheet Set thiswb = ThisWorkbook 'フォルダのアドレスを指定(最後に\をつけるのを忘れずに) adrs = "C:\Users\shironeco\Downloads\" 'Excelシートから取得 dy1 = this.Cells(2, 2) 'セルB2の値を変数に入れる dy2 = this.Cells(2, 4) 'セルD2の値を変数に入れる 'セルに入力されていなかったらメッセージを表示してプログラムを終わる If dy1 = "" Or dy2 = "" Then MsgBox "年月を入力してください" Exit Sub Else 'ブックの名前 bookN = dy1 & "年" & dy2 & "月決算書.xlsx" Workbooks.Open adrs & bookN Set thatwb = Workbooks.Open(adrs & bookN) '処理を行う(コピー&ペースト/セルに値を入れるなど) 'オープンしたブックを保存して閉じる(True→Falseで保存しない) thatwb.Close savechanges:=True End If End Sub
VBAを使って繰り返し作業はパスしましょう!
別ブックを開くのって1つならいいんですけど、いくつもあると面倒くさい!
そんなときにはぜひ使ってみてくださいね~
慣れてきたら爆速で開いたり閉じたりできる方法もあります↓