久しぶりに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を探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
2GB以上のファイルを扱う方法
-
IMEのモードを強制的に変えるには
-
VBAで、JPG写真の撮影日時を読...
-
リソースファイルを認識してく...
-
ファイルのアクセス権限について
-
Eclipseで検索ができなくなった
-
HTMLテキストリンクでExcelファ...
-
月々の更新回数を調べるには?
-
ファイル更新日取得
-
MPEG1とMPEG2を見分ける
-
ファイル内容を比較する方法
-
HTMLまたはJavaScriptでフ...
-
JavaでPDFファイルに変換するに...
-
VBAでフォルダ内の全てのcsv...
-
main関数のコマンドライン引数...
-
画像ファイルに拡張子がjpgのフ...
-
PHPからベーシック認証のかかっ...
-
VB6.0のメモリリークについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
Eclipseで検索ができなくなった
-
HTMLまたはJavaScriptでフ...
-
【VBA】複数CSVの特定範囲を1つ...
-
ディレクトリのサイズの取得
-
サイトマップにサブドメインを...
-
Javaのファイルダウンロードに...
-
リソースファイルを認識してく...
-
VBS ファイルマージ処理
-
C++.NET 2003 「空のドキュメ...
-
VB6.0のメモリリークについて
-
C++によるファイル送受信プログ...
-
RPGでメッセージファイル利用
-
Perlで2GBを超える大きいファイ...
-
VB6でTIFF図のプロパティを...
-
BASP21のファイルアップロード...
-
VB2008 iniファイルの全セクシ...
おすすめ情報