Excel VBA質問箱 IV

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

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


10529 / 13644 ツリー ←次へ | 前へ→

【21280】「ファイルにこれ以上データがありません... Aiz 05/1/18(火) 13:10 質問[未読]
【21284】Re:「ファイルにこれ以上データがありませ... Jaka 05/1/18(火) 13:44 回答[未読]
【21286】Re:「ファイルにこれ以上データがありませ... Aiz 05/1/18(火) 13:54 質問[未読]
【21288】Re:「ファイルにこれ以上データがありませ... Jaka 05/1/18(火) 14:07 回答[未読]
【21289】Re:「ファイルにこれ以上データがありませ... Aiz 05/1/18(火) 14:10 お礼[未読]

【21280】「ファイルにこれ以上データがありません...
質問  Aiz  - 05/1/18(火) 13:10 -

引用なし
パスワード
   CSVファイルを読み込み、エクセルファイルに貼り付ける処理で、不明なことがあります。
csvファイルに値が入っている場合は正常に処理されるのですが、値が入っていない場合「ファイルにこれ以上データがありません」というエラーメッセージが表示されます。
値が入っていない場合、値は空白セル表示にしたいのですが、やり方がわかりませんでした。
よろしくお願いします。

ちなみに以下にあるB.csvの場合は値が空白の場合、空白セルで表示されました。
H.csvの場合にエラーが表示されます。

H.csvの中身(どちらも値が入っている場合)
AA,CC

こういう場合にエラーになる↓
AA,

,CC

B.csvの中身
,,103,,102001,AAAAAAAAAA,1,135-12,0,10,1,1,現像,,1,現像,0,6,1


test.exlのソース
Const csv1 = "H.csv"
Const csv2 = "B.csv"

Sub Auto_Open()
  Dim fname As String
  Dim fno As Integer
  Dim col(0 To 18) As Variant
  Dim i As Integer
  Dim sts As String
  
  'ファイル名
  fname1 = ActiveWorkbook.Path & "\" & csv1
  fname2 = ActiveWorkbook.Path & "\" & csv2
  
  'CSVファイルの内容を貼り付ける(H.csv)
  fno = FreeFile
  On Error GoTo file_not_found
  Open fname1 For Input As #fno
  On Error GoTo 0
  If EOF(fno) = False Then
    '一旦String型で受けてVariant型に入れなおす
    For i = 0 To 1
      Input #fno, sts
      col(i) = sts
    Next
    Range(Cells(2, 19), Cells(2, 20)).Value = col
  End If
  Close #fno
  
  'CSVファイルの内容を貼り付ける(B.csv)
  fno = FreeFile
  On Error GoTo file_not_found
  Open fname2 For Input As #fno
  On Error GoTo 0
  l = 4
  Do Until EOF(fno)
    '一旦String型で受けてVariant型に入れなおす
    For i = 0 To 18
      Input #fno, sts
      col(i) = sts
    Next
    
    l = l + 1
    Range(Cells(l, 2), Cells(l, 20)).Value = col
  Loop
  Close #fno
  
  'オートフォーマット
  Cells(4, 2).CurrentRegion.AutoFormat _
    Format:=xlRangeAutoFormatLocalFormat3, _
    Number:=False, _
    Font:=False, _
    Alignment:=False
  
  'CSVファイルを削除する
  'Kill fname1
  'Kill fname2
  
  Exit Sub
  
file_not_found:
  MsgBox "CSVファイルが見つかりません", vbCritical + vbOKOnly, "システムエラー"

End Sub

【21284】Re:「ファイルにこれ以上データがありま...
回答  Jaka  - 05/1/18(火) 13:44 -

引用なし
パスワード
   こんにちは。

エラーになる原因は、簡単に書くとInputで読めるようにSCVファイルが作られていないって事になります。
Inputのバグだか手抜きだかわかりませんけど。
Inputで、読み込むとエラーになるけど直に開くと開けるって不可解な事も...。

因みにインプットで読み込む時は、1行のカンマ数は絶対に合っていなければなりません。(ダブルクォーテーションで囲まれた物を除く)
行の最後がラインフィールド?か、キャリッジリターンだっけかで終わっているかでも関係しているみたいです。

どうやってCSVファイルを作っているのでしょうか?
作り方に問題があると思います。
郵政省の郵便番号だっけかのCSVファイルは、ちゃんと作られてありますね。

【21286】Re:「ファイルにこれ以上データがありま...
質問  Aiz  - 05/1/18(火) 13:54 -

引用なし
パスワード
   レスありがとうございます。
csvファイルはエクセルに値を入力して最後にcsvで保存するようにして作っています。

作り方が問題ですか。。。
もう少し調べてみます。ありがとうございます。

【21288】Re:「ファイルにこれ以上データがありま...
回答  Jaka  - 05/1/18(火) 14:07 -

引用なし
パスワード
   ▼Aiz さん:
>csvファイルはエクセルに値を入力して最後にcsvで保存するようにして作っています。

でしたら、最終列がKで、最終行が100としてA1:K100の範囲を罫線で囲んでから、CSV保存してください。
エクセルでCSVファイルを作る時は、データ範囲を全て罫線で囲まないとまともに作ってくれません。

また、ここに書いた
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=64;id=FAQ
「CSV形式で保存した際カンマの数が17行以降異なる」にもアクセスしてみてください。

【21289】Re:「ファイルにこれ以上データがありま...
お礼  Aiz  - 05/1/18(火) 14:10 -

引用なし
パスワード
   原因がわかりました。
たしかに作り方が悪かったようです。

>行の最後がラインフィールド?か、キャリッジリターンだっけかで終わっているかでも関係しているみたいです。

秀丸とかのテキストエディタで作るとわかりやすかったんですが、行の最後で改行されていると正常に通るようです。

ありがとうございました。

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