Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【Excel VBA】別のブックを開く方法

f:id:WillSpecter:20200810141628j:plain

 やりたいこと

既存のブック名をダイアログから選択して、別のブックを開く

フォルダ名「TEST」の中に以下の2つのファイルがあります。

・一覧.xlsm

・小計.xlsx

 

「小計.xlsx」のフォームシートをコピーして、

「一覧.xlsm」に新規シート004を作成したいと思います。

f:id:WillSpecter:20200819090826p:plain

 

コードと解説は以下の通りです。
VBA コード】

Sub 新規請求書追加()
    Dim 小計ブック As Workbook
    Dim 小計シート As Worksheet
    Dim 一覧ブック As Workbook
    Dim 小計ブック名 As Variant
    Dim シート数 As Integer
    Dim 請求番号 As Integer
    Dim 一覧シート名 As String
    
    'このマクロがあるブックのフォルダに移動
    ChDir ThisWorkbook.Path
    
    'コピー元のファイル名を指定
'半角スペースとアンダーバーで改行ができる 小計ブック名 = Application. _ GetOpenFilename("小計(*.xlsx),*.xlsx", , "小計.xlsxの選択") 'キャンセルボタンが押されたらマクロを終了 If 小計ブック名 = False Then MsgBox "処理を中止します。" Exit Sub End If '小計ブックを開いて参照を「小計ブック」に代入 Set 小計ブック = Workbooks.Open(小計ブック名) '小計ブックの参照を「小計シート」に代入 Set 小計シート = 小計ブック.Worksheets("フォーム") 'マクロに記述されているブックの参照を「一覧ブック」に代入 Set 一覧ブック = ThisWorkbook '一覧ブックのシート数を「シート数」に代入 シート数 = 一覧ブック.Worksheets.Count '一覧ブックの右端にあるシートの請求番号に1加算する 請求番号 = CInt(一覧ブック.Worksheets(シート数).Name) + 1 '先頭に0を付けて3桁の番号になる文字列に変換する 一覧シート名 = Format(請求番号, "000") '小計シートを一覧ブックの右端にコピーする 小計シート.Copy after:=一覧ブック.Worksheets(シート数) '選択されているシート名を変更 ActiveSheet.Name = 一覧シート名 End Sub

ポイント

Workbook型変数

ブックを扱うときはWorkbook型の変数を用意します。

ブックはオブジェクト型なのでワークシートと同じくオブジェクト変数と呼ばれます。

 

Variant型

1つの変数に異なるデータ型を格納したいときはVariant型を使います。

Variant型はすべてのデータ型の値を格納することができるデータ型になります。

 

しかし、間違ったデータ型を格納してもエラーにならないため、多用することはおすすめしません。

また、格納データに合わせて変換されるため処理速度が少し遅くなるというデメリットもあります。

 

ChDir

ChDirは作用フォルダを移動する命令です。

今回はChDir ThisWorkbook.Pathと記述することで、

このマクロが記述されているブックと同じフォルダに移動する

という意味になります。

 

Pathプロパティはブックの保存先フォルダの場所を調べることができます。

行の分割

コードが長くなる場合は、行を分割して見やすくすることができます。

半角のスペースとアンダーバーを組み合わせて行の途中に挿入することで分割が可能です。

 

行を分割できるのは「.」や「=」や「,」の前後です。

GetOpenFilenameメソッド

GetOpenFilenameメソッドは「ファイルを開く」ダイアログボックスを表示してファイル名を取得するApplicationオブジェクトのメソッドです。

ブックを開くのではなく、選択したブックのファイル名を取得するだけということに注意が必要です。

 

【使用例】

Application.GetOpenFilename("Excelファイル(*xlsx;*.xls), *.xlsx; *xls")

すべてのExcelファイルを選択のファイルの候補に指定して「ファイルを開く」ダイアログボックスを表示する。

 

Applicationはシートやブックを含めたExcel全体を表します。

通常は省略できますが、一部のプロパティやメソッドを使用する時に必要です。

Openメソッド

別のブックを開くときはWorkbooksオブジェクトのOpenメソッドに開くブックのファイル名を指定します。

Openメソッドを実行すると、指定されたブックが開いて、そのブックがアクティブになります。

さらに、開いたブックの参照を受け取ることができます。

 

今回はブックを開くと同時に、Setキーワードで開いたブックの参照をWorkbook型変数に代入しています。

Set 小計ブック = Workbooks.Open(小計ブック名)

 

 ひとこと

UiPathでもファイル名を取得した後は、Excelを開くアクティビティを配置してから開いています。

 

フロー図だから何をしているかわかりやすいのですが、VBAのようにコードで書くとイメージが急に難しくなるような気がしました。

あと、Workbook型とかWorksheet型というものに慣れていないためまだ難しく感じるのだと思います。。

 

頭の中でフロー図を描いて何をしているか意識して学習したいと思います!

 

できるシリーズはフルカラーでかなり細かいところまで画像を使って解説してあるのでオススメです!