0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

素人の覚書:ファイルを開く方法(GetOpenFileName)

Last updated at Posted at 2017-05-17

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重に開いています」となるわけで、そうならないようにどうするかを考えて、指定したファイルが既に開かれているときはファイル名を取得し、オープン処理をジャンプさせるというアイデアでした

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?