プロが教えるわが家の防犯対策術!

フォルダ内にある複数のCSVファイルをマージする為に

以下のコードを入力しましたがコンパイルエラーが起きてしまい 直せません・・・

Sub csvmerge()
wpath = Range("B3")
wfile = Dir(wpath & "\")
flag = 0
Do While wfile <> ""
If InStr(wfile, ".csv") Then
flag = flag + 1
If flag = 1 Then

FileCopy wpath & "\" & wfile, ThisWorkbook.Path & "\output.csv"
Open ThisWorkbook.Path & "\output.csv" For Output As #1

Close #1
End If

Open ThisWorkbook.Path & "\output.csv" For Append As #1

Open wpath & "\" & wfile For Input As #2
Do Until EOF(2)
Line Input #2, w_str
Print #1, w_str
Loop
Close #2
Close #1
End If
wfile = Dir()
Loop

MsgBox "マージ完了", vbInformation

End Sub


コンパイルエラーが起きたのは
FileCopyからAs #1までと
End Ifの後の
OpenからAs #1
の部分です。

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

質問者からの補足コメント

  • 今の時点でこのような状態です。

    「Excel VBAのCSVファイルマージ」の補足画像1
      補足日時:2019/10/21 15:04
  • 画像が見えずらくて、すみません。

    コンパイルエラー:修正候補:式
    と出ています

      補足日時:2019/10/21 15:06
  • 見えますでしょうか?

    「Excel VBAのCSVファイルマージ」の補足画像3
      補足日時:2019/10/21 15:10
  • Excelを使っているPCがネットに繋げない為スマホからですが

    「Excel VBAのCSVファイルマージ」の補足画像4
      補足日時:2019/10/21 15:45

A 回答 (9件)

No.4です。



質問文とVBEのコードを良く比較して下さい。
問題だぁ!と言っている箇所は『改行』されてますよね?
でもリンク先や質問文では改行で切れてません。
ただそれだけだと思えますが。
    • good
    • 0
この回答へのお礼

あまり難しく考えすぎていました

余計なところに改行が入っていて修正したところ
正しく動きました。


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

お礼日時:2019/10/21 15:54

画像の切り取りはスマホでなくsnipping toolを使ってください。

(アクセサリにあります)
そうすると見やすくなります。
この画像もsnipping toolを使っています。
「Excel VBAのCSVファイルマージ」の回答画像9
    • good
    • 1
この回答へのお礼

ツールの紹介ありがとうございます。仕事用のPCではネットに繋がらないように設定をしているので
参考にしたサイトも今回の質問も全てスマホからなのでもしかしたらそこで間違えているのかもしれません。コードをコピペ出来ず手入力なので余計なところでスペースや改行が入っているのかもしれません。もう一度確認してみます。

お礼日時:2019/10/21 15:43

ご質問に聞いたコードを逆にコピペで、、どうでしょう。

コピペでエラー出ませんよ?

改行、&の後の半角スペース、自ブックの保存(ThisWorkbook.Path )取得の為
    • good
    • 1

図の添付に関してですが、長辺のピクセル数が500ピクセルを超えると勝手に縮小されるようです。

長辺をトリミングするだけで見やすくなりますよ。
ただ今回はコードの問題ではなく「wpath」に入っている文字列のような気がします。
    • good
    • 1

念のためですがB3セルの値を提示していただけないでしょうか?


提示していただければそれに合わせてこちらもテスト出来ますから…
    • good
    • 0

セルB3に書き込むパスが違っているのでは?



例えば半角スペースを全角にしているとか、"\"マークを全角の"¥"にしているとか?
その辺りを注意してみては?
    • good
    • 0
この回答へのお礼

ありがとうございます。確認しましたがセルB3のパスは半角でコピペで間違いないようです。

お礼日時:2019/10/21 15:08

B3 セルにはどんな文字列が入っていますか?


もしかしたらそちらの問題かもしれません。
    • good
    • 0
この回答へのお礼

B3のセルにはフォルダのフルパスが入ってます。
そのフォルダの中にマージしたいCSVファイルを置いています。

お礼日時:2019/10/21 14:59

Option Explicit がないので、変数宣言は、した方がいいですよカードを発行する程度として(VBA)



コンパイルエラーは、出力されませんでした。実際にコードに手を加えず、output.csvなどを作成して
環境を整え実行した場合。Windows10 Office Excel2016 1909(クイック) 
ただし、実行内容(処理内容)が希望のものなのかは、判断できませんでした。。

コンパイルと言う意味では問題ないですが、実行と言う意味では、
As #1、#2  を FreeFileなどにするとか  参考:http://officetanaka.net/excel/vba/function/FreeF …

If InStr(wfile, ".csv") Then
flag = flag + 1
If flag = 1 Then
FileCopy wpath & "\" & wfile, ThisWorkbook.Path & "\output.csv"
Open ThisWorkbook.Path & "\output.csv" For Output As #1
Close
ここは、CSVファイルがなければ飛ぶから良いのですが、、
wpath にCSVがあった場合に、ThisWorkbook.Path & "\output.csv" が無ければエラーになります。

Open ThisWorkbook.Path & "\output.csv" For Append As #1
も、"\output.csv"が無ければエラーになります。

また、作成時のデバックで作成ブックを保存していなければ、当然エラーになりますね。

コンパイルエラー、実行時エラーの詳細を記載した方が良いと思います。

他にも気になる点が、、ありますが、エラーに関してなので割愛します。
    • good
    • 0

こちらでは「コンパイル エラー:変数が定義されていません。

」エラーしか出ませんでした。

これでしたら下の4行が無いだけです。
Dim WPath As String
Dim WFile As String
Dim Flag As Long
Dim W_Str As String
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます。
その4行を入れ忘れていました。ただ構文エラーが無くならないのでまだ動かせていない状態です

https://excelkamiwaza.com/csvmerge.html
このサイトを見ながら真似したのですが!詳しい説明がなく
分からない状態です。
良ければ解説をお願いします

お礼日時:2019/10/21 13:30

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