Excelシートに他のブックやCSVのデータを取り込む方法ってたくさんあるわけで、一番初歩的な手順だと外部データの取込の手順をマクロで設定する。という手順でしょうか。さらに原始的なら、データを全コピー -> ここに貼り付けるとか位置指定のあるシートとかも見たことがあります。文字列にしないと作った人にえらい怒られるという理不尽に耐え、いくつか解決策を考えてみました
最初に知った方法###
Excel.vba
dim varFileName
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub '存在しなかったらプロシージャ終了
End If
最初はこれをボタンとかに設定して、ファイルを開くようにしてました
あとあと思ったのですが、ファイルを指定したのに「存在しなかったら」って過程は必要なのかと
FSOを使ってみた###
Excel.vba
Dim FSO As Object
Dim book
Dim Path
Dim pbx as workbook
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Path = Cells(3, 8) 'フォルダまでの絶対パスを突っ込んだりするのですが、これって何なんですかね?
If FSO.FolderExists(Path) Then
Else
MsgBox "処理停止:フォルダが存在しません"
Exit Sub
End If
If Dir(Path & "*") <> "" Then
pbx = Application.GetOpenFilename("book, *xls?")
Workbooks.Open pbx
pbx = Dir(pbx)
Else
MsgBox "処理停止:ファイルが存在しません"
Exit Sub
End If
なんとなくFSOとか呼び出したらかっこよく見えたので、どこかのサイトからいただいて、自分用に少し改造しています。かっこつけなので、Pathの必要性とかが分かってません(入れないとエラーになる)
原点回帰##
結局ファイル開くだけなので一緒じゃね?と思い、原点回帰します
Excel.VBA
Dim md
Dim wbs As Workbook
md = Application.GetOpenFilename("book, *xls?") '展開するファイルを選択
md = Dir(md)
'既に開いていないかチェック
For Each wbs In Workbooks
If wbs.Name = md Then
md = wbs.Name'既に開いてるときはファイル名を変数に格納
GoTo jumpin
Else: End If
Next wbs
Workbooks.Open md
jumpin:
'以下開いた後のあれこれ
自分なりに工夫したのは、***既に開いてるファイルの時どうするか?***ってこと
この処理を入れないと、「2重に開いています」となるわけで、そうならないようにどうするかを考えて、指定したファイルが既に開かれているときはファイル名を取得し、オープン処理をジャンプさせるというアイデアでした