質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

789閲覧

VBA どのドライブやフォルダに居ても、特定のファイルを取り込む方法

Shee

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/11/08 06:12

編集2022/11/16 10:10

前提

はじめまして、初心者です。
現在、Excel マクロにVBAで、プルダウンで選択した企業ごとに、"取り込む"というボタンを押せば、同一bookに新しいシートを追加して、そこにCSVファイルを取り込めるコードを書いています。

実現したいこと

現在は、取り込み先のエクセルbookと、取り込みたいCSVファイルが同じフォルダーに入っているので、Thisworkbook.pathで処理しているのですが、この複数あるCSVファイルを、GetOpenFilenameのように、選択画面など出ずに、それぞれどのドライブの、どのフォルダーに入れていても情報を取り込めるようにしたいです。

発生している問題・エラーメッセージ

path部分を指定せず、取り込めばいいのかと考え、以下のコードのpath部分を消すと”ファイルがありません”というエラーメッセージが出ます。

*同一フォルダにExcelファイルとCSVファイルがあるときのコードです。             ・             ・ path = Thisworkbook.path str = Sheet1.Range("D4") Select Case str   Case "○○"     buf = Dir(path & "\○○.csv")   Case "△△"     buf = Dir(path & "\△△.csv") ・ ・   Case Else MsgBox "選択してください" Exit Sub End Select Set fso = CreateObject("Scripting.FilesystemObject") Set csvFile = fso.OpentextFile(path & "\" & buf, 1)           ・            ・ *開いた後のコードが続いていきます

試したこと

・ドライブ指定できないので、bookのみ記入
・WSHでDirコマンド実行

補足情報(FW/ツールのバージョンなど)

そもそものpath部分だけを変更すればいい問題なのか、ドライブの変更にも対応しておかなくてはいけないので、部分検索でファイル検索をして、そのファイルを別のコードでCSV→Excelに変換するべきなのか、一度所在を調べるために、pathを検索して、Msg boxなどで表示させて、それを変数に組み込むか、GetOpenFilenameを使用するしかないのかがわかりません。

いろいろ言葉の意味やVBAのコードで検索してみたのですが、フォルダ変更に対応はしていても、ドライブ変更にまで対応している事例などが見つからず、こちらで質問させていただきました。
そもそもの考え方や調べ方から間違っているのかもわからないので、よければご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ファイルを探すまですべて処理すると大変すぎるので、
何処にあるかの情報共有はきちんとしておいて、
GetOpenFilenameで、選択は自分で行ってくださいという形で解決しました!
コメントで頂いた手法は、古すぎるデータを探す場合に
使用する時とかに使えそうだなと思いました!
ありがとうございました!

投稿2022/11/16 01:10

Shee

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

GetOpenFilenameのように、選択画面など出ずに、それぞれどのドライブの、どのフォルダーに入れていても情報を取り込めるようにしたいです。

一応こちらの手法を使えば実装できるとは思いますが、推奨しません。ファイルの命名規則などに制限がある為です

そんな手間のかかることするくらいなら「このフォルダの直下に入れる」と決めておいた方がいいのでは?そうすれば親フォルダのフォルダパスさえ登録してしまえばDirなりで簡単に操作できるのですが…

投稿2022/11/08 06:30

pig_vba

総合スコア807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shee

2022/11/08 07:10

ありがとうございます!いただいたリンクを参考に作成してみます! そうしたいところは山々ですが、どこにあっても取り出せるようにと言われていますので、 取り組んでいきたいと思います(´;ω;`)
pig_vba

2022/11/08 07:14

それは上司の知識不足だと思うので「そんなものはない」と言い切ってしまった方がいいような…? 仮に実装できたとしても、この手の探索系処理って大抵すごく重いので連続実行に向かないんですよね
guest

0

上司の要件を満たそうとした場合、一つのVBAというよりは二段構えがいいかなと思いました。
1段目:ファイルの一覧情報を取得するVBA(どこかのワーク用シートに出力)
可能性のある場所を全なめするような形式がいいのかな?
2段目:ファイルの一覧のCSVファイルを順番に取り込み

ご検討ください

投稿2022/11/08 08:38

okakemetal

総合スコア261

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shee

2022/11/09 00:16

ありがとうございます!現在、1つのフォームコントロール内に収めて行おうとしていたので、 別でいいか確認して行ってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問