
特定のファイル名が "normal-item-stock" を含むCSVのセル内に改行があるため、一気にexcelに取り込みすると、データがぐちゃぐちゃになります。
特定のファイル名が "normal-item-stock" を含むCSVファイルから1列目のデータをExcelのshoplistというシートのA列に取り込み、75列目をB列、82列目をC列に取り込みたいです。
Dim ws As Worksheet
Dim SelFile As Variant
SelFile = Dir(ThisWorkbook.Path & "\" & "normal-item-stock*.csv")
Set ws = Worksheets("shoplist") ' CSV のデータを取り込むシート

A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは
>一気にexcelに取り込みすると、データがぐちゃぐちゃになります
どのような読み方をなさっているのか不明ですが、普通に直接エクセルで読み込んだ場合の話と解釈しました。
エクセルで読めるタイプのルールのCSVであれば、セル内改行があっても問題なく読み込めるはずですので、ご質問のCSVファイルは異なるルールで記述されているものと推測されます。
どのようなルールで記述されているのかはご質問文からは不明なので、具体的な方法を記すことはできませんけれど、記述ルールを調べることで解決できるのではと思います。
文字化けはしていないようですから(=言及されていないので)、文字コードはShift-JIS等であると思いますが、そちらも念のためご確認を。
ちなみに、「エクセルで読めるタイプのルール」とは、
基本的に、セル区切りは(CSVなので)カンマ、改行(=次の行)はCrLfになっているはずです。
エクセル上でのセル内改行はLfコードで、CSVでの記述も同様です。
また、セル内改行を含むセルデータは全体をダブルクォーテーションで囲っておく必要があります。
カンマを含む文字列等も(当然ですが)クォーテーションで囲います。
この辺りの記述ルールが異なると、まとめて読み込ませた場合に別の解釈をされる可能性があり、結果として表示が乱れることになると考えられます。
そのような場合でも、TextStream等で読み込んで、そのルールに即した解釈をすれば処理は可能だと思われます。
まずは、以下あたりを中心に対象のCSVを調べてみれば、どのように対処すれば良いかがわかるでしょう。
・改行コードには何が使用されているか
・セル内改行のコードには何が使用されているか
・セル内改行を含む文字列はダブルクォーテーションで囲われているか
など。
(対象のCSVをテキストファイルとして開けば、だいたいはわかるでしょう)
解釈の方法がわかれば、文字コードを置換えるなり、あるいはそれに応じた読み込み方をすることで解決するものと想像します。
No.2
- 回答日時:
でやってみてください。
Sub ImportCSVData()
Dim ws As Worksheet
Dim SelFile As Variant
Dim filePath As String
Dim rowNum As Long
' 対象のシートを設定
Set ws = Worksheets("shoplist")
' CSVファイルを選択
SelFile = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv", Title:="CSVファイルを選択")
' キャンセルされた場合は処理終了
If SelFile = "False" Then
Exit Sub
End If
' ファイルパスを取得
filePath = SelFile
' CSVファイルからデータを取り込む
With ws
' 列Aに1列目のデータを取り込む
.Columns("A").ClearContents
With .QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=.Range("A1"))
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileCommaDelimiter = True
.Refresh
End With
' 列Bに75列目のデータを取り込む
.Columns("B").ClearContents
For rowNum = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(rowNum, 2).Value = .Cells(rowNum, 75).Value
Next rowNum
' 列Cに82列目のデータを取り込む
.Columns("C").ClearContents
For rowNum = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(rowNum, 3).Value = .Cells(rowNum, 82).Value
Next rowNum
End With
End Sub
No.1
- 回答日時:
スマートな方法は他にもあると思いますが、CSVをテキストファイルとして取り込み、エクセルのデータの区切り位置をカンマ指定しながら、指定のエリアを「文字列」に設定した後、必要な部分のみ残せば、まずは第一弾のデータが出来るんじゃないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
ACCESS CSVファイルをインポ...
-
【C#】パス名で無効な文字
-
VBAでcsvファイルを読み込んで...
-
エクセルVBA 大容量CSVファイル...
-
複数のcsvファイルをフォルダご...
-
csvファイルのデータの一部を取...
-
csvファイルでの日付設定「yyyy...
-
複数のcsvファイルをExcelに一...
-
【エクセル マクロ】読み込ん...
-
ファイル名ないにあるカンマを...
-
エクセルのプロパティーでセキ...
-
パワーポイントの文字数
-
会社のネットワーク上のファイ...
-
エクセルvbaでdocuworksprinter...
-
エクセルで複数のコメントのサ...
-
Excel csv保存 列数が異なる場...
-
ExcelブックをGoogleスプレッド...
-
バッチファイルのコピーで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
【C#】パス名で無効な文字
-
CSV形式での保存時に”文字列...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
VBAでcsvファイルを読み込んで...
-
データ解析ソフトRでのファイル...
-
【エクセルVBA】お願いします。...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルのデータの一部を取...
-
CSVファイル作成
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
複数のcsvファイルをExcelに一...
-
【エクセル マクロ】読み込ん...
-
複数のCSVファイルのAccessテー...
おすすめ情報
回答ありがとうございました。A1、B1、C1は正しいデータを取りこめましたが。D1からがわけわからないです。CSVを1列ごとをA列に 75列ごとをB列に、82列ごとをC列にしたいです。お願いします。