![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
フォルダ内のcsvファイルを[CSV貼り付け]というシートに
インポートさせるVBAをつくったんですが、CSVファイルがないときに
エラーメッセージを出すようにしたいのですがどうすればいいでしょうか。
----------------
Sub 読み込み()
Dim Bk As Workbook
Dim Rw As Long, ERw As Long
Const ShName = "CSV貼り付け" ' <-- 貼り付け先
PathN = ThisWorkbook.Path & " \ "
Const FNCom = "" ' <-- ファイル名の先頭共通部分指定
Dim FileN As String
Dim Cnt As Integer
FileN = Dir(PathN & FNCom & "*.csv") ' <-- 拡張子を指定 sFileName = Dir(sCurDir & "\*.*", vbNormal)
sCurDir = ThisWorkbook.Path & "\CSVファイル\"
FileN = Dir(sCurDir & FNCom & "*.csv") ' <-- 拡張子を指定
Rw = 1
Application.ScreenUpdating = False
Do Until FileN = ""
Cnt = Cnt + 1
Set Bk = Workbooks.Open(sCurDir & FileN, ReadOnly:=True)
Dim Rws As Long
With ThisWorkbook.Sheets(ShName)
.Cells.Clear
Bk.Sheets(1).Cells.Copy .Range("a1")
End With
FileN = Dir
Loop
Bk.Close SaveChanges:=False
Set Bk = Nothing
Application.ScreenUpdating = True
MsgBox " CSV読みこみ完了しました。", vbInformation
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#3です、たびたびすみません。
補足ですが、取り込むCSVファイルが一つだけと決まっている場合は、下記のようなコードでも行けます。
「CSV貼り付け」というシートに取り込みます。
-------------
Sub test()
Dim Bk As Workbook
Dim PathN As String
Dim FileN As String
Dim SheetN As String
PathN = ThisWorkbook.Path & "\CSVファイル\" ' <-- CSVファイルの入っているフォルダ
SheetN = "CSV貼り付け" <-- 貼り付け先のシート名(あらかじめこの名前のシートを作っておく)
FileN = Dir(PathN & "*.csv") ' <-- CSVファイル名取得
Application.ScreenUpdating = False
If FileN = "" Then
MsgBox "CSVファイルがありません。"
Exit Sub
End If
Set Bk = Workbooks.Open(PathN & FileN, ReadOnly:=True)
Bk.Sheets(1).Cells.Copy ThisWorkbook.Sheets(SheetN).Range("a1")
Bk.Close SaveChanges:=False
Application.ScreenUpdating = True
MsgBox " CSV読み込み完了しました。"
End Sub
No.3
- 回答日時:
#2です。
不要なコードですが、たくさんありますよ^^;)
また、Do-Loopで廻していますが、CSVファイルが複数存在した場合に、最後に開いたファイルだけがコピーされ、前のは消されてしまいます。これでは何のためにループを廻しているのか意味がありません。
私でしたら下記のようにします。
「CSVファイル名」のシートを追加していき、そこにファイルの内容を取り込みます。複数のCSVファイルの場合もすべて取り込みます。
-------------------
Sub test()
Dim Bk As Workbook
Dim PathN As String
Dim FileN As String
Dim SheetN As String
PathN = ThisWorkbook.Path & "\CSVファイル\" ' <-- CSVファイルの入っているフォルダ
FileN = Dir(PathN & "*.csv") ' <-- CSVファイル名取得
Application.ScreenUpdating = False
If FileN = "" Then
MsgBox "CSVファイルがありません。"
Exit Sub
End If
Do Until FileN = ""
Set Bk = Workbooks.Open(PathN & FileN, ReadOnly:=True)
SheetN = Left(FileN, Len(FileN) - 4)
ThisWorkbook.Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = SheetN
Bk.Sheets(1).Cells.Copy ThisWorkbook.Sheets(SheetN).Range("a1")
Bk.Close SaveChanges:=False
FileN = Dir
Loop
Set Bk = Nothing
Application.ScreenUpdating = True
MsgBox " CSV読み込み完了しました。"
End Sub
No.2
- 回答日時:
CSVファイルが一つもない時にエラーメッセージを表示、でしょうか?
Doの前に、
If FileN = "" Then
MsgBox "CSVファイルがありません"
Exit Sub
End If
を入れればよいかと思います。
なお、よくよくみると何の意味があるのか分からないようなコーディングが見受けられますが・・・。
うまくできました!
ネットにおちていた、コードを改造してつくったものです。
フォルダ内のCSVを
CSV貼り付けのシートに書き込みたいだけなんですが、なにか
不要なコードってありますか?
よろしければ教えて頂けないでしょうか
No.1
- 回答日時:
On Error Resume Next
をエラーが出る個所の前に設置するば出ないと思います。
処理が短くエラーが限られている場合ならを入れておけば問題ないと思います。
これ以降エラーが出ても致命的でない限り飛ばすので
処理が長くなりほかのエラーも考えられるようでしたらあまりお勧めできません。
参考URL:http://officetanaka.net/excel/vba/tips/tips104.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
EXCEL VBA ー 同一フォルダ内の...
-
Teraマクロで日付ディレクトリ...
-
エディタで効率的な切り出し方法
-
エクセル 複数ファイルから特...
-
エクセルからスキャナVBAで連動...
-
複数のエクセルファイルの数値...
-
EXCELのVBAで画像を選んだ順に...
-
検索結果をテキスト吐き出し
-
複数のcsvファイルの結合
-
VLOOKUP関数とネットワークに置...
-
excelに貼り付けた数値が勝手に...
-
ローマ字→カタカナへ変換(エク...
-
EXCELのセルへ、デジタル時計を...
-
マクロ 実行ボタンを押さずに...
-
Excelのワークシート上に検索窓...
-
押したボタンの位置取得(共通の...
-
スクロールしてもボタンを常に...
-
複数ファイルにある特定のシー...
-
Excel:コマンドボタンの移動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
excelに貼り付けた数値が勝手に...
-
【マクロ】シート名を取得する...
-
Teraマクロで日付ディレクトリ...
-
EXCELのVBAで画像を選んだ順に...
-
VLOOKUP関数とネットワークに置...
-
ファイルを並び替えるときの「...
-
エクセル 一括リンクの解除
-
EXCELのマクロを使って、テキス...
-
EXCELで複数のファイルから抽出
-
excel INDIRECT 他ファイル参照
-
エクセルからスキャナVBAで連動...
-
ハイパーリンクで前回値をひき...
-
エクセルファイルから指定した...
-
CSVで文字化けしてしまうのを直...
-
PDF ファイルが開けません。
-
Excelでリンクを使用すると#N/A...
-
=CELL("filename")で取得したフ...
-
エクセル:フォルダ内のファイ...
-
Excelvbaで同一フォルダー内の...
おすすめ情報