エクセルのVBAについて
とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているのですが、ファイルがあるのに「ファイルが開けませんでした。3002」とエラーが出てしまいます。どこをどう直したら良いのでしょうか?
Sub CSV変換
Dim iFile As String
Dim oFile As String
iFile = ThisWorkbook.Path & "\" & Range("O1").Text & "*.csv" 'UTF-8の読み込むファイル名
oFile = ThisWorkbook.Path & "\" & Range("O1").Text & ".csv" 'Shift-JISで書き出すファイル名 '
Dim csv As String 'CSVを読み書きする文字列変数 'UTF-8を読み込む
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open .LoadFromFile iFile
csv = .ReadText
.Close
End With
'テキストファイルで書き出す(普通にShift-JISになる)
With CreateObject("Scripting.FileSystemObject")
.CreateTextFile(oFile, True)
.write csv
.Close
End With
End Sub
No.7ベストアンサー
- 回答日時:
No6です。
以下のマクロを標準モジュールに登録してください。
フォルダ:INPUTの下にあるすべてのCSVファイル(utf-8)をShift-jisに変換し、OUTPUTの下へ出力します。
Sub CSV変換()
Dim iFile As String 'UTF-8の読み込むファイル名
Dim oFile As String 'Shift-JISで書き出すファイル名 '
Dim fname As String 'Dir()で取得したファイル名
Dim FSO As Object
Dim csv As String 'CSVを読み書きする文字列変数 'UTF-8を読み込む
Set FSO = CreateObject("Scripting.FileSystemObject")
fname = Dir(ThisWorkbook.Path & "\INPUT\*.csv", vbNormal)
Do While fname <> ""
iFile = ThisWorkbook.Path & "\INPUT\" & fname
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile iFile
csv = .ReadText
.Close
End With
oFile = ThisWorkbook.Path & "\OUTPUT\" & fname
'テキストファイルで書き出す(普通にShift-JISになる)
With FSO.CreateTextFile(oFile, True)
.Write csv
.Close
End With
fname = Dir()
Loop
MsgBox ("完了")
End Sub
No.6
- 回答日時:
CSVの文字化けを直すことではなく、文字コードの変換ですね。
(utf-8->shift-jis)マクロのあるフォルダの下にINPUTとOUTPUTの2つのフォルダを作成し
INPUTの下に変換元のCSVファイル(utf-8)を置いて、
マクロを実行すると、OUTPUTの下に変換後のファイル(shift-jis)が作成されるようにするのはいかがでしょうか。
変換元のファイルは、複数置くことが可能です。
変換後のファイル名は、変換元のファイル名と同じ名称で出力されます。
No.5
- 回答日時:
No1です。
>文字を含むcsvファイルを読み込ませたいため、*を入れております。
文法と違うことを勝手に記述しても、プログラムは忖度してくれたりはしません。(エラーになるだけです)
ADODB.Streamに渡すのは、正しいファイルパスである必要があります。
また、No1にも書いたように「*」はファイル名としては使えない文字です。
多分、「ファイルを検索して処理を行いたい」ということだと想像しますが、もし、そうであるのならそのようにコードを記述する必要があります。
例えば、
・Dir関数でファイルを検索し
(Dir関数などではワイルドカードを使えます)
・該当するファイルが見つかったら、そのファイルを対象に処理を行う
といった手順です。
「複数の該当ファイルがあれば、全部同様の処理を行う」というのであれば、上記をループ処理にすれば可能ですが、プログラムをそのように記述しておく必要があります。
◇ Dir関数を利用したループの例
http://officetanaka.net/excel/vba/function/Dir.htm
No.4
- 回答日時:
「O1」の内容が"ABCD"として
読み込み用のファイル
「ABCD*.csv」に該当するファイルは1つだけ存在する前提で良いですか。
例
ABCD99.csv(UTF-8)を読み込みABCD.csv(Shift-JIS)へ出力する。
No.3
- 回答日時:
読み込むときにワイルドカードは指定できません。
Range("O1").Text にはどのような値が設定されているのでしょうか。
仮に"ABCD"という内容が設定されていると
ThisWorkbook.PathがC:\test とすると
C:\test\ABCD.*csv を読み込んで
C:\test\ABCD.csv へ書き込むことになります。
C:\test\ABCD.*csvは指定できないので*をとると
C:\test\ABCD.csvを読み込み
C:\test\ABCD.csvへ書き込むことになりますが、それで良いですか。
No.1
- 回答日時:
こんにちは
>「ファイルが開けませんでした。3002」とエラーが出てしまいます。
素直にそこをチェックしてみるのが宜しいかと。
ご提示のコードではファイルパスに「~~¥××*.csv」と「*」が入るようになっていますが、それが原因ではありませんか?
(ファイル名には使用できない文字のはずですので・・)
ついでながら、
>.Open .LoadFromFile iFile
試していないのではっきりとはしませんが、改行無しでセンテンスの区切りと見做してくれるのか疑問です。
そうしない理由が不明ですが、明示的に改行を入れておく方が良いと思います。
(最低でも「:」を入れておくとか)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ADODB.Streamを使用してUTF-8を出力
Visual Basic(VBA)
-
エクセルマクロ(VBA)でテキストに出力、3つのテキストファイルに名前を付けて保存するには
Excel(エクセル)
-
Excel VBAでほかのアプリケーションで使用中(ロック)のファイルを上書き保存したい
その他(プログラミング・Web制作)
-
-
4
エクセルでエラーが出て困っています。
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
7
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
8
ExcelVBA 文字コード変換
Visual Basic(VBA)
-
9
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
10
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
11
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
12
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
13
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
14
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
15
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
16
CSVで文字化けしてしまうのを直すマクロ
Excel(エクセル)
-
17
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
18
ファイルダウンロードの開くで、CSVファイルが開けない
Microsoft ASP
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
文字列からタブコードを取り除きたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python CSVファイルについて
-
エクセルのVBAについて とある...
-
アクセスと同フォルダのCSVファ...
-
Excelの帳票形式をアクセスに取...
-
エクセル 指定範囲をCSV出力
-
エクセルマクロ、複数のCSVファ...
-
コマンドによるzip圧縮
-
複数エクセルファイルの合成
-
コマンドプロンプトの「%1」と...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
バッチ終了時にDOS窓を閉じるコ...
-
#include <Windows.h>というヘ...
-
バッチファイルでサーバーのフ...
-
VBAでワークシートを引数として...
-
コマンドプロンプトで変数が数...
-
バッチファイル 特定ウインドウ...
-
「読み取りと実行」と「読み取...
-
バッチファイルで昨日の日付を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのVBAについて とある...
-
Python CSVファイルについて
-
アクセスと同フォルダのCSVファ...
-
FTPコマンド mgetでとまってし...
-
【Rコマンダー】データインポー...
-
エクセル 指定範囲をCSV出力
-
バッチ処理でcsvファイルの文字...
-
エクセルマクロ、複数のCSVファ...
-
複数のcsvファイルを統合、でも...
-
EXCEL マクロが正常に動かなく...
-
MAC フォルダ内のPDF件数とペー...
-
gnuplotで複数csvファイルから...
-
複数エクセルファイルの合成
-
シェルスクリプトで文字コード変換
-
エクセルにまとめたcsvデータを...
-
複数のCSVファイルを読み込んで...
-
Excelの帳票形式をアクセスに取...
-
excelでMac(-)⇒Win(?)文字化け...
-
csvファイルを結合するバッ...
-
csvファイルを統合する方法を教...
おすすめ情報
ファイル名は毎回変わるため、O1のセルに入ってる文字を含むcsvファイルを読み込ませたいため、*を入れております。
この作業を複数回やる必要があるため、自動化したくVBAを作成しております。
tatsumaru77さま
回答ありがとうございます。そのやり方でも大丈夫です。出来ればコードを教えて頂けますでしょうか?