Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1093 / 13645 ツリー ←次へ | 前へ→

【76362】CSVデータ読み込み あこ 14/11/6(木) 20:34 質問[未読]
【76363】Re:CSVデータ読み込み γ 14/11/6(木) 20:54 発言[未読]
【76364】Re:CSVデータ読み込み あこ 14/11/6(木) 21:07 お礼[未読]
【76365】Re:CSVデータ読み込み Yuki 14/11/7(金) 11:22 発言[未読]
【76366】Re:CSVデータ読み込み 独覚 14/11/7(金) 13:02 発言[未読]
【76367】Re:CSVデータ読み込み Yuki 14/11/7(金) 13:38 発言[未読]
【76368】Re:CSVデータ読み込み 独覚 14/11/7(金) 13:50 発言[未読]

【76362】CSVデータ読み込み
質問  あこ  - 14/11/6(木) 20:34 -

引用なし
パスワード
   質問です。

現在,以下のような記述をエクセル上のボタンに登録しています。
ボタンを押すと,デスクトップ上の任意のCSVファイルの選択を行い,CSVファイルを選択し,そのCSVデータを全てエクセル上のデータとして落としさせたいと思っています。

しかし,csvファイルによっては,
「実行時エラー 
アプリケーション定義またはオブジェクト定義のエラーです。」と出て,
「デバック(D)」ボタンを押すと,下から4行目の
「Cells(i, j) = strCell」のところが,黄色くエラーとして表示されてしまいます。

下記の記述もネット上で皆さんに教えていただきながらなんとかやっているもので,正直自分自身でよく理解できていませんが,上記のようなエラーを回避する方法をどなたかご教示いただけないかと思います。

どうかよろしくお願いいたします。


Sub Macro5()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long, k As Long
Dim lngQuate As Long
Dim strCell As String

varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If

intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン

i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
j = 0
lngQuate = 0
strCell = ""
For k = 1 To Len(strRec)
Select Case Mid(strRec, k, 1)
Case "," '「"」が偶数なら区切り、奇数ならただの文字
If lngQuate Mod 2 = 0 Then
Call PutCell(i, j, strCell, lngQuate)
Else
strCell = strCell & Mid(strRec, k, 1)
End If
Case """" '「"」のカウントをとる
lngQuate = lngQuate + 1
strCell = strCell & Mid(strRec, k, 1)
Case Else
strCell = strCell & Mid(strRec, k, 1)
End Select
Next
'最終列の処理
Call PutCell(i, j, strCell, lngQuate)
Loop
Close #intFree
End Sub

Sub PutCell(ByRef i As Long, ByRef j As Long, ByRef strCell As String, ByRef lngQuate As Long)
j = j + 1
'「""」を「"」で置換
strCell = Replace(strCell, """""", """")
'前後の「"」を削除
If Left(strCell, 1) = """" And Right(strCell, 1) = """" Then
strCell = Mid(strCell, 2, Len(strCell) - 2)
End If
Cells(i, j).value= strCell
strCell = ""
lngQuate = 0
End Sub

【76363】Re:CSVデータ読み込み
発言  γ  - 14/11/6(木) 20:54 -

引用なし
パスワード
   > 下記の記述もネット上で皆さんに教えていただきながらなんとかやっているもので
どこかの質問掲示板ですか?
同じところで継続して質問した方がいいんじゃないですか?

ここで継続するなら、
・入力CSVの特徴
・アウトプットをどのようにしたいか
を改めて、日本語で説明してください。

コードを読み解くのは手間ですし、
コード自体が間違っている可能性もありますから、
順序として、その説明が必要です。

あなたがよく理解していないということとは別に、
というか、それならなおさら、そうした説明をすることが
あなたにとっても有益なはずです。

【76364】Re:CSVデータ読み込み
お礼  あこ  - 14/11/6(木) 21:07 -

引用なし
パスワード
   ありがとうございました。
参考になりました。

【76365】Re:CSVデータ読み込み
発言  Yuki  - 14/11/7(金) 11:22 -

引用なし
パスワード
   ▼あこ さん:
>しかし,csvファイルによっては,
>「実行時エラー 
>アプリケーション定義またはオブジェクト定義のエラーです。」と出て,
>「デバック(D)」ボタンを押すと,下から4行目の
>「Cells(i, j) = strCell」のところが,黄色くエラーとして表示されてしまいます。

エラーになるファイルの行データを見せてください。
データを提示できない場合はデータを適当に置換えて

多分 ""のある部分がカンマの数によって違っているのでは

【76366】Re:CSVデータ読み込み
発言  独覚  - 14/11/7(金) 13:02 -

引用なし
パスワード
   ▼Yuki さん:
ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=165858&rev=0
へ移動済みのようです。

【76367】Re:CSVデータ読み込み
発言  Yuki  - 14/11/7(金) 13:38 -

引用なし
パスワード
   ▼独覚 さん:

有難う御座います。

Multi Post だったのですね。

【76368】Re:CSVデータ読み込み
発言  独覚  - 14/11/7(金) 13:50 -

引用なし
パスワード
   ▼Yuki さん:
>【76364】Re:CSVデータ読み込み あこ 14/11/6(木) 21:07 お礼
でこちらは閉じたということではないでしょうか?
向こうの質問も上記発言の後に書き込まれていますから。

1093 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free