質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • VBA

    1863questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1596questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • CSV

    676questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBAでCSVから読み込んだものをすべてセルに入れる

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 5,038

nissanngtr34

score 16

csvを読み込んだものを配列にし、セルの範囲を指定しないで入れたいのですがどうしたらよろしいでしょうか?

「Range("A10:D10") = tmp」このようにセルの範囲を指定をせずにCSVに入ってる情報すべてを貼り付けたいです。

foreachを使えばよろしいでしょうか?

csvの中身は
yamada,山田,yamada@yahoo.co.jp
suzuki,鈴木,suzuki@yahoo.co.jp

Sub csv読み込み()
Dim buf As String, tmp As Variant, n As Long
Open "user.csv" For Input As #1
Do Until EOF(1)
Line Input #1, buf
tmp = Split(buf, ",")
Loop
Close #1

Range("A10:D10") = tmp
End Sub 
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+2

CopyFromRecordset で貼り付けたらどうでしょうか。

Microsoft ActiveX Data Object #.# Library に参照設定

    Dim Cn As New ADODB.Connection
    Dim RS As New ADODB.Recordset

    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Extended Properties") = "Text;HDR=NO"
        .Open "G:\TEST\"
    End With

    Set RS = Cn.Execute("SELECT * FROM tera16369.csv")

    Range("A10").CopyFromRecordset RS
    
    RS.Close: Set RS = Nothing
    Cn.Close: Set Cn = Nothing

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

色々な実装方法がありますので、一例をご紹介致します。

Sub csv読み込み()
    
    Dim oFileSys As Object
    Dim oTxtStream As Object
    Dim sPath As String
    Dim sFile As String
    Dim sTxt As String
    Dim s As Variant
    Dim I As Integer
    
    ' CSVファイル一括読み込み
    Set oFileSys = CreateObject("Scripting.FileSystemObject")
    sPath = ThisWorkbook.Path
    sFile = oFileSys.BuildPath(sPath, "user.csv")
    Set oTxtStream = oFileSys.OpenTextFile(sFile, 1)
    
    If oTxtStream.AtEndOfStream = False Then
        sTxt = oTxtStream.ReadAll
    End If
    
    oTxtStream.Close
    Set oTxtStream = Nothing
    Set oFileSys = Nothing
    
    With ActiveSheet
        'csvデータ貼り付け
        I = 0
        For Each s In Split(sTxt, vbCrLf)
            I = I + 1
            .Cells(I, 1).Value2 = s
        Next s
        
        ' 区切り位置調整
        .Cells(1, 1).Resize(I).TextToColumns Comma:=True
    End With
    
End Sub

<簡単な説明>
  1.  Excelブックと同じフォルダに存在する「user.csv」をテキストファイルとしてオープンし一括読み込み
  2.  行単位に分割し A1 セルから順に列方向に貼り付け
  3.  区切り位置の調整(TextToColumns)でカンマ区切りを指定

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんにちは。

貼り付けについて回答します。
速度の面から言って範囲貼り付けで良いと思います。

固定で指定するのではなく変数に格納された配列数から動的に範囲を指定してみてはどうでしょう。

Sub 貼り付け()
    Dim tmp As Variant
    tmp = Csv読み込み()
    Const row As Integer = 1
    Const startCol As Integer = 1
    
    Range(Cells(row, startCol), Cells(row + UBound(tmp, 1), startCol + UBound(tmp, 2))) = tmp
End Sub

Function Csv読み込み() As Variant
    Dim value(1, 2) As String
    
    value(0, 0) = "yamada"
    value(0, 1) = "山田"
    value(0, 2) = "yamada@yahoo.co.jp"
    
    value(1, 0) = "suzuki"
    value(1, 1) = "鈴木"
    value(1, 2) = "suzuki@yahoo.co.jp"
    
    Csv読み込み = value
    
End Function

CSV読み込みについてはそれ上手くいってますか?
ループごとにセル出力するか、ループの中で多次元配列を組み立てるか検討してみてください。

http://www.moug.net/tech/exvba/0060086.html

うまくいってるのであれば余計でした。すみません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こんにちは。

「配列に読み込んで、それを貼り付ける」という方法からは外れてしまいますが、
CSVファイルをワークブックとして読み込んで(少し表現がおかしいかも知れませんが.)
そこから貼り付けをする方法もあるかと思いましたので、投稿させてもらいました。

# 対象のCSVファイルがExcelでオープンできる事が前提になります。
# Excel 2010で確認しています
Sub PasteFromCSV()
  Const CSV_FILE = "d:\test\sample.csv"
  Dim ReadWBk As Workbook
  Dim WriteWBk As Workbook
  Dim WriteSht As Worksheet
  Dim Rng As Range
  
  '貼り付け先をアクティブなシートとする
  Set WriteWBk = ActiveWorkbook
  Set WriteSht = WriteWBk.ActiveSheet
  
  '対象のCSVファイルをオープンし、値の入っている範囲をコピー
  Set ReadWBk = Workbooks.Open(CSV_FILE)
  Set Rng = ReadWBk.Worksheets.Item(1).UsedRange
  Rng.Copy
  
  '指定のセル(A10)を起点として貼り付け(形式を選択して貼り付け→値)
  WriteSht.Range("A10").PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False
  
  'CSVファイルをクローズ
  ReadWBk.Close
  Set ReadWBk = Nothing
End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • VBA

    1863questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1596questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • CSV

    676questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。