TextFileColumnDataTypesの疑問や悩み - ナレッジリーフ@知識の葉

Yahoo!知恵袋疑問や悩みを検索

知恵袋Q&Aで悩みを解決!

-PR-
  • コンピュータテクノロジー > プログラミング > Visual Basic
  • Tue, 08 Oct 2019
  • 質問No. 8168588

解決
済み
Q TextFileColumnDataTypesの疑問や質問

  • 閲覧数21
  • 質問総数2

ATextFileColumnDataTypesのQ&A回答一覧

    Yahoo!知恵袋

    • 投稿日時 - Tue, 08 Oct 2019 11:14:37
    • 閲覧数 21
    質問

    エクセルのVBAについての質問です。

    商品の保管場所や在庫数などを記録しているcsvファイルをエクセルに転記するマクロを作っているのですが、普通にgetopenfilenameからのシートへのコピー をすると01A01~20F16の棚番のうちEの棚番が読み込み時に勝手に指数変換されてしまいうまくいきません。
    (01E02→100、10E01→100、11E15→1.1*e15 など)

    現在は方法としてcsvファイル内でEをE#に置換して(01E02→01E#02)から、vbaで「getopenfilenameで読み込みしてシートに貼り付け、貼り付けたデータにformulaで「if(mid(棚番,4,1)=""#"",l...
    アンサー
    回答

    外部データの取り込みで文字列で取り込みます。
    "C:sampletest.csv"を読み込む場合です。


    Sub sample()
    Dim file As String
    file = "C:sampletest.csv" '対象ファイル名
    Dim dt(255) As Integer
    Dim i As Integer
    For i = 0 To 255: dt(i) = xlTextFormat: Next
    Cells.Clear
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & file, Destination:=Range("A1"))
    .AdjustColumnWidth = False
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .TextFileColumnDataTypes = dt
    .Refresh BackgroundQuery:=False
    .Delete
    End With
    End Sub
    コンピュータテクノロジー > プログラミング > Visual Basic
    詳しくはこちら
    • 同意数-10(4-14)
    • 回答数1
    • 投稿日時 - Sun, 22 Sep 2019 18:26:51
    • 閲覧数 11
    質問

    複数のCSVファイルを同じフォルダに存在するExcel(xlsx)ファイルの
    特定のシートにマージしたく、
    一度に取り込めるマクロがありましたら教えて頂けませんでしょうか。 *csvファイルは約50個、それぞれ1000行ほど入力されています。
    *それぞれのcsvファイルには1行目に見出し行があります。
    *A列は文字列、I列は日付「2001/1/19 0:00:00」で取込み
    *取り込み先Excel
    ファイル名:マージ用.xlsx
    シート名:マージ用

    簡単なマージ方法は他のサイトでも参考になるものを見つけましたが、
    ①見出し行は1行目のみにしたい
    ...
    アンサー
    回答

    csvとマージ用.xlsxがあるフォルダが"C:sample"の場合です。
    VBAのあるブックと同じフォルダの場合は、
    'folder = ThisWorkbook.Path & "" 'このブックのフォルダ(ファイルがあるフォルダ)+""
    を有効にしてください。


    Sub sample()
    Dim folder As String
    Dim file As String
    Dim dwb As Workbook
    Dim dws As Worksheet
    Dim rng As Range
    Dim dt(1 To 256)
    Dim i As Integer

    folder = "C:sample" 'ファイルがあるフォルダ+""
    'folder = ThisWorkbook.Path & "" 'このブックのフォルダ(ファイルがあるフォルダ)+""
    file = Dir(folder & "*.csv") 'フォルダの中の最初のcsvファイル名
    If file = "" Then Exit Sub 'csvが無ければ終わり
    Set dwb = Workbooks.Open(folder & "マージ用.xlsx") '結果ブックを開く
    Set dws = dwb.Sheets("マージ用") '結果シート
    dws.Cells.Clear '結果シートクリア
    Set rng = dws.Range("A1") '読み込み位置(初期値=A1)
    For i = 1 To 256: dt(i) = xlGeneralFormat: Next 'データ形式を全部標準に
    dt(1) = xlTextFormat '1列目(A列)文字列
    dt(9) = xlYMDFormat '9列目(I列)YMD(年月日)形式の日付
    Do While file <> "" 'ファイル名がある間
    With dws.QueryTables.Add(Connection:="TEXT;" & folder & file, Destination:=rng) 'csvファイルを読み込み
    .AdjustColumnWidth = False
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .TextFileColumnDataTypes = dt
    .Refresh BackgroundQuery:=False
    .Delete
    End With
    If rng.Row <> 1 Then rng.EntireRow.Delete '読み込み位置の行が1でなかったら1行目削除
    Set rng = dws.Range("A" & Rows.Count).End(xlUp).Offset(1) '次の読み込み位置
    file = Dir '次のファイル名
    Loop
    dws.Range("I:I").NumberFormat = "yyyy/mm/dd hh:mm:ss" 'I列の書式設定
    dws.Cells.RemoveDuplicates Columns:=1, Header:=xlYes 'A列の値で重複削除
    dwb.Close True '保存して終了
    End Sub
    スマートデバイス、PC、家電 > Office系ソフトウェア > Excel
    詳しくはこちら
    • 同意数-14(6-20)
    • 回答数2
    -PR-
    -PR-
    -PR-
    -PR-
    -PR-
    ページ先頭へ