- ベストアンサー
【VAB】 エクセルファイルからCSVファイルをインポートするには
お世話になります 実行可能か、わからず質問させて頂きます。 ■概要 ・CSVファイルをエクセルファイルにインポートしたいです ■設置 ・ユーザーフォームにテキストボックス、参照ボタン、実行ボタン を生成 ■動き ・参照ボタンをクリックするとダイアログボックスでCSVを選ぶ ・選んだあて先がテキストボックスに記載される ・実行ボタンでCSVをエクセルのシートに貼り付け (このとき貼り付ける列はVB内で決めておきたい、1,4,5,6,9列を貼り付けるなど) わかる方ご教授よろしくお願い申し上げます
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>今の状態で2行目から貼り付けを実行させたいのですが可能ですか? データ貼り付けの部分の ws.Cells(r + 1, c + 1) = d(Val(cols(c)) - 1) を ws.Cells(r + 2, c + 1) = d(Val(cols(c)) - 1) に変更してください。 もしも「CSVファイルの2行目から貼り付け・・・」と言う意味なら For r = 0 To UBound(csv) を For r = 1 To UBound(csv) に、 ws.Cells(r + 1, c + 1) = d(Val(cols(c)) - 1) を ws.Cells(r, c + 1) = d(Val(cols(c)) - 1) に変更してください。
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
こんにちは。 Option Explicit Private Sub CommandButton1_Click() Dim v v = Application.GetOpenFilename("CsvFiles, *.csv") If VarType(v) <> vbBoolean Then Me.TextBox1.Text = CStr(v) End If End Sub Private Sub CommandButton2_Click() Dim arg(1 To 256) As Long Dim i As Long For i = 1 To 256 Select Case i Case 1, 4, 5, 6, 9: arg(i) = 1 Case Else: arg(i) = 9 End Select Next With ActiveSheet '.Range("A1").CurrentRegion.ClearContents With .QueryTables.Add(Connection:="TEXT;" & Me.TextBox1.Text, _ Destination:=.Range("A1")) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileCommaDelimiter = True .TextFileColumnDataTypes = arg .Refresh BackgroundQuery:=False .Parent.Names(.Name).Delete .Delete End With End With End Sub ...こんな感じです。 csvファイル読み込みは色んな手法があります。 Net検索してみると良いですよ。 上記の[QueryTable オブジェクト]を使う手法は Excelメニューの[データ]-[外部データの取り込み]-[テキストファイルのインポート]です。 マクロの自動記録機能でコード生成されますから、参考にしてみてください。
- fumufumu_2006
- ベストアンサー率66% (163/245)
こんなのではどうでしょうか? csvファイルは単純なカンマ区切りのファイルだとします。(""で囲まれてるとかその他が無い) ユーザーフォームのテキストボックス、参照ボタン、実行ボタンの名前は、そのままの名前になってるので、必要に応じて変えてください。 Option Explicit Const selectColumns = "1,4,5,6,9" '抽出列 Private Sub 参照ボタン_Click() Dim fileName As String fileName = Application.GetOpenFilename("csvファイル,*.csv") If fileName <> "False" Then テキストボックス = fileName End If End Sub Private Sub 実行ボタン_Click() Dim fso As New FileSystemObject 'ファイルの存在チェック If fso.FileExists(テキストボックス) = False Then 'ファイルなし MsgBox "指定したファイルはありません" Exit Sub End If '配列に全部読み込み With fso.GetFile(テキストボックス).OpenAsTextStream Dim csv() As String csv = Split(.ReadAll, vbCrLf) .Close End With '貼り付ける列を配列に Dim cols() As String cols = Split(selectColumns, ",") '貼り付けるシート指定 Dim ws As Worksheet Set ws = Sheets("Sheet1") '指定してください ws.Cells.Clear 'クリア '貼り付け Application.ScreenUpdating = False '貼り付け中は画面がちらつかないように書き換えない Dim r As Long Dim c As Integer For r = 0 To UBound(csv) 'csv1行分を配列に Dim d() As String d = Split(csv(r), ",") For c = 0 To UBound(cols) '指定列にデータがあれば("1,2,3"の4列目は困るので) If cols(c) - 1 <= UBound(d) Then 'データ貼り付け ws.Cells(r + 1, c + 1) = d(Val(cols(c)) - 1) '配列の添え字は0からだけど、行列番号は1からのため、何だかわかりづらい End If Next Next Application.ScreenUpdating = True '表示再開 Set fso = Nothing End Sub
お礼
まことにありがとうございます
補足
お返事ありがとうございます できました、本当にありがとうございます 感動的です まことに申し訳ないのですが、 もう1点お願いがあるのですが、今の状態で2行目から貼り付けを実行させたいのですが可能ですか? 最後に致しますので、なにとぞご教授よろしくお願い申し上げます
お礼
まことにありがとうございました なんとか目標に達成できました。m(__)m これからも頑張りたいとおもいます