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

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

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

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

VBA

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

マクロ

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

解決済

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

Shee
Shee

総合スコア3

CSV

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

VBA

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

マクロ

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

3回答

0グッド

0クリップ

454閲覧

投稿2022/11/08 06:12

編集2022/11/08 06:23

前提

はじめまして、初心者です。
現在、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のコードで検索してみたのですが、フォルダ変更に対応はしていても、ドライブ変更にまで対応している事例などが見つからず、こちらで質問させていただきました。
そもそもの考え方や調べ方から間違っているのかもわからないので、よければご教示お願い致します。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答3

1

自己解決

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

投稿2022/11/16 01:10

Shee

総合スコア3

okakemetal👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

1

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

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

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

投稿2022/11/08 06:30

pig_vba

総合スコア650

okakemetal👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Shee

2022/11/08 07:10

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

2022/11/08 07:14

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

0

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

ご検討ください

投稿2022/11/08 08:38

okakemetal

総合スコア256

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Shee

2022/11/09 00:16

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

CSV

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

VBA

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

マクロ

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