重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセル マクロについて質問です。

現在,以下のような記述をエクセル上のボタンに登録しています。
ボタンを押すと,デスクトップ上の任意の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) = strCell
strCell = ""
lngQuate = 0
End Sub

A 回答 (2件)

iかjがゼロになってませんか?


デバックモードでカーソル当てると値を確認出来ます。
    • good
    • 0
この回答へのお礼

何度も申し訳ありません。ありがとうございます。
確認したところ、iもjも1になっていました。

お礼日時:2014/11/05 20:20

誤:Cells(i, j) = strCell


正:Cells(i, j).value = strCell

セルといってもセルの値、色、式、幅など色々あります。ここでは値を決めるので.valueと書きます。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
やってみましたが、同じエラーがでてしまいました。もう少し勉強してみます。
ありがとうございました。

お礼日時:2014/11/05 11:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!