
エクセルの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も見ています
-
エクセルマクロ(VBA)でテキストに出力、3つのテキストファイルに名前を付けて保存するには
Excel(エクセル)
-
ADODB.Streamを使用してUTF-8を出力
Visual Basic(VBA)
-
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
-
4
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
5
Excel VBAでほかのアプリケーションで使用中(ロック)のファイルを上書き保存したい
その他(プログラミング・Web制作)
-
6
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
7
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
8
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
データベース操作時エラーについて
Visual Basic(VBA)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
13
ADODB.Streamで開いたファイルに追記する
その他(プログラミング・Web制作)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
16
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
19
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
20
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAについて とある...
-
複数エクセルファイルの合成
-
複数のcsvファイルを統合、でも...
-
エクセル 指定範囲をCSV出力
-
【Rコマンダー】データインポー...
-
csvファイルを結合するバッ...
-
複数のCSVファイルを読み込んで...
-
FTPコマンド mgetでとまってし...
-
コマンドによるzip圧縮
-
csvをVBAを使ってエクセル形式...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
バッチ処理でファイルの中身を...
-
特定フォルダ内のファイルを自...
-
バッチファイルでサーバーのフ...
-
[teraterm] waitコマンドで停止...
-
Chrome HTML Document (.html)...
-
.txtではなく.logの方が良いの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのVBAについて とある...
-
複数エクセルファイルの合成
-
Python CSVファイルについて
-
アクセスと同フォルダのCSVファ...
-
複数のcsvファイルを統合、でも...
-
FTPコマンド mgetでとまってし...
-
【Rコマンダー】データインポー...
-
エクセル 指定範囲をCSV出力
-
MAC フォルダ内のPDF件数とペー...
-
csvファイルを結合するバッ...
-
csvファイルを統合する方法を教...
-
エクセルマクロ、複数のCSVファ...
-
コマンドによるzip圧縮
-
複数のCSVファイルを読み込んで...
-
csv形式からbmpを作成
-
ExcelVBAでCSVファイル上書き後...
-
EXCEL マクロが正常に動かなく...
-
excelでMac(-)⇒Win(?)文字化け...
-
複数のCSVファイルを1つのファ...
-
yahooカレンダーのデータをICS...
おすすめ情報
ファイル名は毎回変わるため、O1のセルに入ってる文字を含むcsvファイルを読み込ませたいため、*を入れております。
この作業を複数回やる必要があるため、自動化したくVBAを作成しております。
tatsumaru77さま
回答ありがとうございます。そのやり方でも大丈夫です。出来ればコードを教えて頂けますでしょうか?