• ベストアンサー

【VAB】 エクセルファイルからCSVファイルをインポートするには

お世話になります 実行可能か、わからず質問させて頂きます。 ■概要 ・CSVファイルをエクセルファイルにインポートしたいです ■設置 ・ユーザーフォームにテキストボックス、参照ボタン、実行ボタン を生成 ■動き ・参照ボタンをクリックするとダイアログボックスでCSVを選ぶ ・選んだあて先がテキストボックスに記載される ・実行ボタンでCSVをエクセルのシートに貼り付け (このとき貼り付ける列はVB内で決めておきたい、1,4,5,6,9列を貼り付けるなど) わかる方ご教授よろしくお願い申し上げます

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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) に変更してください。

BSR123
質問者

お礼

まことにありがとうございました なんとか目標に達成できました。m(__)m これからも頑張りたいとおもいます

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

こんにちは。 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メニューの[データ]-[外部データの取り込み]-[テキストファイルのインポート]です。 マクロの自動記録機能でコード生成されますから、参考にしてみてください。

回答No.1

こんなのではどうでしょうか? 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

BSR123
質問者

お礼

まことにありがとうございます

BSR123
質問者

補足

お返事ありがとうございます できました、本当にありがとうございます 感動的です まことに申し訳ないのですが、 もう1点お願いがあるのですが、今の状態で2行目から貼り付けを実行させたいのですが可能ですか? 最後に致しますので、なにとぞご教授よろしくお願い申し上げます

関連するQ&A

  • CSVファイルをエクセルファイルにインポートさせるには?

    おせわになります CSVファイルをエクセルファイルにインポートさせたいのですが 方法は ユーザーフォームをにテキストボックスと参照ボタン、実行ボタンを作成し 参照ぼたんでCSVファイルを選ぶ テキストボックスには参照先の住所が記載され 実行ボタンでsheet1にB2から貼り付けさせたいのですが可能ですか? 又、CSVの情報が不要な列もあります 必要な列のみ落とし込みをしたいです 当方初心者でVBAコードがあれば幸いです。 わかる方よろしくおねがいします

  • 【AccessVBA】ファルダごとインポート 

    お世話になります 実行可能かわからない範囲でお聞きしています。 ■概要 フォルダごとCSVをインポートする ■詳細 フォーム上でテキストボックス、参照ボタン、実行ボタン、を設置 参照ボタンでダイアログボックスを表示しファルダを選ぶ 選ぶとテキストボックスにあて先が記載され実行ボタンでファイル内にあるCSVファイルを一括してAccessテーブルにインポートさせたいのですが可能ですか? ■環境 Access2003 CSV カンマ区切り  CSVの数はまちまちです1個のときもあります CSVの列等は全部統一されています わかる方ご教授よろしくお願いします。

  • CSVファイルをエクセルへインポート

    お世話になります ユーザーホームにテキストボックス、参照ボタン、実行ボタンを配置。 参照ボタンをクリックするとダイアログボックスが開きCSVを選ぶ。 選んだ場所がテキストボックスに記載され実行ボタンを押すと エクセルにインポートする。 張り付き内容は下記の通りです XLS側は CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ 分かる方ご教授願います 当方初心者の為VBAコードでお願いします

  • 複数CSVファイルを一括インポート

    お世話になります ■概要 Accessのボタンで複数のCSVファイルを一括にひとつのテーブルにインポートさせたいのですが ■内容 テキストボックス、参照ボタン、実行ボタンをフォーム上に設置 参照ボタンでダイアログボックスを表示させCSV複数選択し 選択内容がテキストへ反映。 実行ボタンで選択された複数CSVをインポートさせたいです 少し難しいと思いますが、わかる方ご教授よろしくお願い致します。

  • VBA 複数のCSVファイルを一度にインポートするには?

    お世話になります ■概要 Accessのボタンで複数のCSVファイルを一括にひとつのテーブルにインポートさせたいのですが ■内容 テキストボックス、参照ボタン、実行ボタンをフォーム上に設置 参照ボタンでダイアログボックスを表示させCSV複数選択し 選択内容がテキストへ反映。 実行ボタンで選択された複数CSVをインポートさせたいです 当方初心者なのでVBA等の回答があれば幸いです ご教授よろしくお願い致します。

  • Excelでcsvファイルをエクスポートしても、""を残しておきたい

    csvファイルをインポートしてExcelで編集し、また、csvファイルとして書き出すと、元のcsvファイルにはあった文字列の引用符「""」が消えてしまいます。 また、csvファイルを「テキストインポートウィザード」や「外部データの取り込み」を使って文字列の引用符を「なし」でインポートするとExcel上では問題ないのですが、csvで書き出すと「""""""」と引用符が2組増えています。 ご存知の方、元のcsvファイルとまったく同じ引用符でエクスポートする方法を教えてくださいm(_)m

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • csvファイルのインポート

    Accessでcsvファイルをインポートさせようとしています。しかし、「F1フィールドがありません」のようなエラー表示が出て、できません。私の予想では、テーブルの型とcsvファイルの型が違うのではないかと思っています。テーブルには、数値型、テキスト型、日付/データ型があります。 保存したcsvファイルをExcelで開くと日付がApr-01や、2001/06/26となったりしていました。どこかで型変換のようなことをするのでしょうか?csvのことはよく分かりません。どうか、よろしくお願いします。

  • Excelの範囲指定セルににcsvファイルのデータを貼り付け

    Excelファイルの任意のセルにCSVファイルのデータを貼り付けたいと思っています。 各ワークシートにCSVファイルのデータを読み込むマクロを書いて実行していたのですが、ファイルが増えてしまったのでもっと簡単に処理ができたら、と思い相談させていただきます。 Visual C# 2008の勉強を始めて間もないので初歩的な質問かと思いますが、宜しくお願い致します。 希望する処理の流れは 1.「Excelファイル選択」ボタンを押すと、指定のフォルダ内のxlsファイルをリストボックスに表示 2.Excelファイル選択 3.「CSVファイル選択」ボタンを押すと、指定のフォルダ内のcsvファイルをリストボックスに表示 4.Excelファイルに対応するCSVファイル選択 5.「データ読込」ボタンでテキストファイルのデータをExcelファイルの指定のセルに貼り付け 6.Excelファイルを保存して終了 1.と3.のリストボックスへのファイル表示はできているのですが、選択したExcelファイルにcsvファイルのデータの貼り付けの方法がわかりません… それぞれのファイルを変数に格納して、更にcsvファイルのデータを配列変数に流して、繰り返し処理で貼り付けていくのかな?と想像しているのですが… http://support.microsoft.com/kb/302096/ja 上記のページを参考にしたのですが、外部ファイルのデータを指定のセルに入力するにはどうしたらよいのかわかりませんでした。 ・Excelファイルの指定のセルはB12~H1011までの7列1000行です。 ・csvファイルは1000行に満たないこともあります。 ・入力するデータ型は整数と文字列です。 PC環境 Windows XP SP3 Excel 2007 Visual C# 2008 要領を得ない説明で申し訳ありませんが、どうぞ宜しくお願い致します。

  • MS AccessでExcelファイルのインポートは?

    AccessのVBAでExcelファイルをインポートするにはどうすればいいのでしょうか? ちなみに DoCmd.TransferText acImportDelim, , "Tmp名簿", strInPutPath & "\名簿.csv", True (strInPutPathは、ダイアログから取得したパスです) では、CSVファイル(TXTファイル)しか読み込めません。 (もちろん、そのため拡張子が「.csv」にしていますが 読み込むファイルをテキストファイルにしたら「.txt」でもいいです) 「ファイル」メニュー(コマンド)の「外部データの取り込み」→「インポート」では、Excelファイルも読み込めるので悔しいです。 これをVBAでやりたいんですが。 よろしくお願いいたします。

専門家に質問してみよう