• 締切済み

ExcelVBAを使用したCSVファイルのデータの取込みについて

いろんなサイトの情報を見ながら作っていたのですがどうもうまくいかないのでアドバイスなど頂きたいです。 書き方もおかしいと思うのでこう記述するべきとかあったら教えてほしいです。 <やりたいこと> ダイアログボックスより取り込みたいcsvを選択 選択したファイルのパスを一度テキストボックスに書きだす。 新規シートを作成してシート名を変更して 先ほどテキストボックスに書きだした情報を元に CSVファイルのデータを新規作成したシートにコピーを張り付ける 呼び出したCSVファイルを閉じる といったようにしたいのです。 できたら欲しい情報の入った列だけとりだしたかったのですが・・・。 現状記述してあるのは下記になります。 これだととりあえずコピーできてるみたいですが、呼び出したCSVファイルが閉じないのです。 Private Sub CommandButton1_Click() Dim OpenFileName As Variant OpenFileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv") TextBox1.Value = OpenFileName End Sub Private Sub CommandButton2_Click() Worksheets.Add After:=Worksheets("Sheet1"), Count:=1 ActiveSheet.Name = "テスト" Workbooks.Open Filename:=TextBox1 ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("テスト").Range("A1") Workbooks(TextBox1).Close End Sub

みんなの回答

回答No.1

> Workbooks(TextBox1).Close テキストボックスには CSV ファイルのフルパスが入っているのでは? Workbooks(hoge) hoge の部分に入れるのは、CSV ファイルのフルパスではなく、ブック名です。 ブック名は、そいつを開いたときに Excel のウィンドウ上部にあるタイトルバーに表示されている文字列です。(ウィンドウ メニューの中にも表示されます) ただし、Windows のオプションで "登録された拡張子を表示しない" になっているかどうかでファイル名の表示のされ方が変わってくるので、ワークブック オブジェクトを使って書いてみました。 Private Sub CommandButton2_Click() Dim newSheet As Worksheet Set newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets("Sheet1"), Count:=1) newSheet.Name = "テスト" Dim csvBook As Workbook Set csvBook = Workbooks.Open(Filename:=TextBox1.Value) csvBook.ActiveSheet.Cells.Copy Destination:=newSheet.Range("A1") csvBook.Close End Sub

asuka_aqua
質問者

お礼

ありがとうございます。 できました! やはりブック名だけじゃないといけなかったんですね。 ファイル名が毎回違うのでどうすればいいのか分からずフルパス いれてしまいました・・・。 勉強になります 本当にありがとうございました。

関連するQ&A

専門家に質問してみよう