ここから本文です

以下のVBAを利用してCSVファイルを取り込むだけなのですが、 取り込み終わった後...

ohd********さん

2018/7/917:17:30

以下のVBAを利用してCSVファイルを取り込むだけなのですが、
取り込み終わった後に、テキスト形式のセルがいくつかの列に存在してしまい

「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」
の注意コメントが発生して、次のステップ(グラフ表示)に進めません。
注意を回避して、数値だけをセルに表示したいのですが、
何が不足しているのでしょうか?
申し訳ありませんが、教えてください。


Sub ボタン1_Click()

Dim i As Integer
Dim bufStr As String
Dim filePath As String
Dim fd As FileDialog

'ファイル選択ダイアログボックス
Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
'ファイルの複数選択を不可
.AllowMultiSelect = False

'タイトル
.Title = "CSVファイル"

'ファイルフィルタのクリア
.Filters.Clear

'ファイルフィルタの設定
.Filters.Add "CSVファイル ", "*.csv"

'初期表示のフォルダ
.InitialFileName = ""

If .Show = True Then
'ファイルパスの取得
filePath = .SelectedItems(1)
Else
'キャンセル
Exit Sub
End If
End With

'ファイルのオープン
Open filePath For Input As #1

i = 2

Do While Not EOF(1)

' CSV ファイルを1行読み込み
Line Input #1, lineStr
' カンマ区切りで分割し配列に格納
arrayStr = Split(Replace(lineStr, """", ""), ",")
' A1 セルを基点にして、列数を配列の要素数分広げ、行数のオフセット分ずらして展開する
Range("A2").Resize(1, UBound(arrayStr) + 1).Offset(RowIndex) = arrayStr
' 行オフセットをインクリメント
RowIndex = RowIndex + 1

Loop

'ファイルを閉じる
Close #1


End Sub

閲覧数:
60
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tai********さん

2018/7/918:46:56

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

ひとつひとつセルに入れていくしかないのでは?


Sub ボタン1_Click()
Dim i As Integer, RowIndex, j As Long
Dim bufStr As String, lineStr, arrayStr As Variant
Dim filePath As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Title = "CSVファイル"
.Filters.Clear
.Filters.Add "CSVファイル ", "*.csv"
.InitialFileName = ""
If .Show = True Then
filePath = .SelectedItems(1)
Else
Exit Sub
End If
End With
Open filePath For Input As #1
i = 2
Do While Not EOF(1)
Line Input #1, lineStr
arrayStr = Split(Replace(lineStr, """", ""), ",")
For j = 0 To UBound(arrayStr)
If IsNumeric(arrayStr(j)) Then
Cells(i, j + 1).NumberFormat = "0"
Cells(i, j + 1) = arrayStr(j)
Else
Cells(i, j + 1) = arrayStr(j)
End If
Next
i = i + 1
'Range("A2").Resize(1, UBound(arrayStr) + 1).Offset(RowIndex) = arrayStr
'RowIndex = RowIndex + 1
Loop
Close #1
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/7/10 11:24:31

分かりやすく、私のお粗末なVBAを修正下さった、
tai******** さんをBAにさせていただきました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

ste********さん

2018/7/918:08:44

CSV側にアポストロフィ'が付いてる数値があるのでは?
こうしてみては?

Line Input #1, lineStr
lineStr = Replace(lineStr, """", "")
lineStr = Replace(lineStr,"'","")
arrayStr = Split(lineStr, ",")

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

aka********さん

2018/7/917:28:48

データーを 取り込む前に 列の書式を
Columns("G:G").Select
Selection.NumberFormatLocal = "#,##0_ " と 数値形式を指定して
おいても だめでしょうか?

取り込んだ後では だめです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる