
久しぶりにVBAを使用してやらせたいことがありますので、質問です。
複数のCSVファイルがあり、これを同じブック内のシートとして開くことは
出来ますでしょうか。
メニューから開くとして、それぞれのファイルを開くと、別々のブックにて開いてしまいます。
これを同じブックで、シート別に開かせたいのですが、出来ますでしょうか。
さらに、これをVBAでやりたいと考えております。
まず考えたのは、 ”Application.GetOpenFilename”です。
ただし、これを利用すると、別々のブックでしか開くことができませんでした。
次に考えたのが、”QueryTables.Add”を利用することです。
これだと、同一ファイル、同一シート内にデータを取り込むことができるので、
問題ないのですが、ファイル名を指定しなければなりません。
ファイルが変わるたびにVBAでパスを修正するのは大変ですので、
”QueryTables.Add”のデータ取り込みでファイル選択ダイアログが開くような
コードがあればよいと考えております。
ファイル選択のダイアログが開いて、そのファイルのパスが取得できるような
コードにすれば、”QueryTables.Add”にてデータの取り込みができそうなのですが、
どうすればよいか思いつきません。
"Dialogs(wdDialogFileFind)"というものも見つけたのですが、うまくいきませんでした。
何か良い方法がありますでしょうか。
よろしくお願いします。
Dialogs(wdDialogFileFind)
No.2ベストアンサー
- 回答日時:
こんにちわ
Application.GetOpenFilename でファイルをオープンせず、パスだけ持ってきて
OpenfileName = Application.GetOpenFilename("CSVファイル,*.csv?")
QueryTables.Addで、データを取り込む
回答ありがとうございます。
なるほど。
こういう方法があるのですね。
実は、パスを取得してから、QueryTables.Addを使うという方法は考えたのですが、
パスの取得方法がわかりませんでした。
パスの取得方法を検索すると、色々とありましたが、
ダイアログを開いて、選択できる方法が見つからず、悩んでおりました。
この方法で出来そうなのです。
ありがとうございました。
No.3
- 回答日時:
こちらがご参考になると思います。
たぶん複数選択したくなると思いますので。http://officetanaka.net/excel/vba/tips/tips107.htmQueryTables.Addも結構面倒臭そうですね。
http://www.d3.dion.ne.jp/~jkondou/excelvba/T1.htm
CSVファイルはテキストファイルなので、自前でテキストを処理しても良いのですが、試みにADOを使ってやってみました。
ADOを用いると、必要なデータだけ抽出して読み込むといった事もできます。
http://home.att.ne.jp/zeta/gen/excel/c04p47.htm
毎回オブジェクトを作成しては消しているので無駄に重たいと思いますが、何十個も処理するので無ければ問題ないでしょう。
なお、データ型の自動認識で意図しない値になって困るような場合は更に手がかかりますので、ご参考にとどめて下さい。
Sub test()
Dim myFile As Variant
Dim f As Variant
Dim Path As String, WSH As Variant
Dim newWsh As Worksheet
Set WSH = CreateObject("WScript.Shell")
Path = WSH.SpecialFolders("MyDocuments") & "\"
ChDir Path
myFile = Application.GetOpenFilename( _
FileFilter:="CSV ファイル (*.csv),*.csv", _
MultiSelect:=True)
If IsArray(myFile) Then
For Each f In myFile
With ThisWorkbook
Set newWsh = .Sheets.Add(after:=.Sheets(.Sheets.Count))
End With
Call readCsvOnWorksheet(CStr(f), newWsh)
Set newWsh = Nothing
Next
Else
With ThisWorkbook
Set newWsh = .Sheets.Add(after:=.Sheets(.Sheets.Count))
End With
Call readCsvOnWorksheet(CStr(myFile), newWsh)
Set newWsh = Nothing
End If
End Sub
'指定csvファイルを、指定シートに貼り付け
Private Sub readCsvOnWorksheet(csvFileFullPath As String, myWorkSheet As Worksheet)
Dim myCon As Object
Dim connectionString As String
Dim myRs As Object
Dim mySQL As String
Dim csvFilePath As String, csvFileName As String
csvFileName = Right(csvFileFullPath, Len(csvFileFullPath) - InStrRev(csvFileFullPath, "\"))
csvFilePath = Left(csvFileFullPath, InStrRev(csvFileFullPath, "\") - 1)
Set myCon = CreateObject("ADODB.Connection")
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & csvFilePath & ";" _
& "Extended Properties=""Text;HDR=NO;FMT=Delimited"""
myCon.Open connectionString
mySQL = "SELECT * FROM " & csvFileName
Set myRs = myCon.Execute(mySQL)
myWorkSheet.Cells.Clear
myWorkSheet.Range("A1").CopyFromRecordset myRs
Set myRs = Nothing
myCon.Close
Set myCon = Nothing
End Sub
回答ありがとうございます。
ここまでの回答をいただけるとは思ってもおりませんでした。
ADOというものははじめて知りました。
ただ、コードを読んでもいまいち理解できないところもありますので、
これから検討してみようかと思います。
ありがとうございました。
No.1
- 回答日時:
> wdDialogFileOpen
それ、先頭にwd って付いてるってことはWord のサンプルコードじゃないの?
ちゃんと調べればいいだけだと思います。
回答ありがとうございます。
しばらく出張に行っており、返答が遅くなってしまいました。
申し訳ありません。
これがワードのサンプルコードであることはわかっております。
自分なりに調べてわからなかったので質問させていただきました。
ちなみに、実際にコードを試したのは、
Application.Dialogs(xlDialogOpen).Show
です。
これだと、新規ブックを作ってしまうので、使えませんでした。
新規ブックを作らない。ということが知りたかったので、
使えなかった。ということを言いたかったのです。
紛らわしい書き方をして申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで検索ができなくなった
-
0バイトのテキストファイル
-
【Excel VBA】取り込んだファイ...
-
ファイル作成日時と更新日時を...
-
サイトマップにサブドメインを...
-
VB6.0のメモリリークについて
-
includeした外部ページがリンク...
-
windows 環境でのファイル操作...
-
C#について質問【複数の.datフ...
-
開いているXLSファイルが読み取...
-
EXCELで複数のファイルを同じブ...
-
HTMLまたはJavaScriptでフ...
-
C++.NET 2003 「空のドキュメ...
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
WshShellから起動したbat(ftp)...
-
ATTファイルってどうやって開け...
-
コマンドプロンプトのテキスト...
-
“ファイルに出力”した印刷ファ...
-
C言語でテキストファイルをバイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで検索ができなくなった
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
main関数のコマンドライン引数...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
サイトマップにサブドメインを...
-
C++.NET 2003 「空のドキュメ...
-
C++によるファイル送受信プログ...
-
ファイル内容を比較する方法
-
File.Create で作成に失敗した場合
-
JavaでPDFファイルに変換するに...
-
VBS ファイルマージ処理
-
【VBA】印刷マクロのループ処理...
-
VB2008 iniファイルの全セクシ...
-
2GB以上のファイルを扱う方法
-
RPGでメッセージファイル利用
-
ディレクトリのサイズの取得
-
ファイルの排他について
おすすめ情報