[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『CSV⇒エクセル変換』(初心者)
CSV⇒エクセルへマクロで変換していましたが
急に文字化けするようになりました。
前回までのCSVデータは文字化けなし
本日のデータのみ文字化け
CSV自体も前回と同じ形式で変わらないみたいです。
使っていたマクロは
Option Explicit
Sub 変身()
Dim Filepath As String With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CSVファイル(*.csv)", "*.csv", 1
.InitialFileName = ThisWorkbook.Path & "\"
.Show
If .SelectedItems.Count = 0 Then
End
End If
Filepath = .SelectedItems(1)
End With
Dim WS As Worksheet Set WS = ReadCSV.ReadCSV(Filepath:=Filepath, TextColumns:="3,9")
Sheets("CSV⇒エクセル").Select
Range("A1").Select
End Sub
これで対応出来ていたのですが。
※CSV⇒エクセルというシートにボタンを置いて
クリックするとSheet1にCSVがエクセル化したシートが作成され
処理後にCSV⇒エクセルのシートに戻るようになっています。
今後の為にとエクセルの神様というサイトに記載あるマクロを修正して
作業をしてみたのですが、処理後にCSV⇒エクセルシートに戻そうとしても
処理中に戻ってしまい、CSV⇒エクセルのシートにエクセル化したCSVが書き込まれます。
処理後にCSV⇒エクセルのシートに戻すにはどうすればよいでしょうか。
Option Explicit
Sub 変身()
Dim NewSht As Worksheet
Set NewSht = Sheets.Add
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long, k As Long
Dim lngQuote As Long
Dim strCell As String
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If
intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン
i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
j = 0
lngQuote = 0
strCell = ""
For k = 1 To Len(strRec)
Select Case Mid(strRec, k, 1)
Case "," '「"」が偶数なら区切り、奇数ならただの文字
If lngQuote Mod 2 = 0 Then
Call PutCell(i, j, strCell, lngQuote)
Else
strCell = strCell & Mid(strRec, k, 1)
End If
Case """" '「"」のカウントをとる
lngQuote = lngQuote + 1
strCell = strCell & Mid(strRec, k, 1)
Case Else
strCell = strCell & Mid(strRec, k, 1)
End Select
Next
'最終列の処理
Call PutCell(i, j, strCell, lngQuote)
Loop
Close #intFree
Application.DisplayAlerts = False
Application.DisplayAlerts = True
End Sub
Sub PutCell(ByRef i As Long, ByRef j As Long, ByRef strCell As String, ByRef lngQuote As Long)
j = j + 1
'「""」を「"」で置換
strCell = Replace(strCell, """""", """")
'前後の「"」を削除
If strCell = """" Then
strCell = ""
ElseIf Left(strCell, 1) = """" And Right(strCell, 1) = """" Then
strCell = Mid(strCell, 2, Len(strCell) - 2)
End If
Cells(i, j) = strCell
strCell = ""
lngQuote = 0
Sheets("CSV⇒エクセル").Select
Range("A1").Select
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
実際にシートに書き出しているプロシジャは、PutCellですが、 PutCellは、書き出すシートが指定されてないので、 Activeなシートに書き出します。
Sub 変身()の 最初の方に書き出すシートをActiveにする処理をいれましょう
また、
Sheets("CSV⇒エクセル").Select
この行は、Sub PutCell の中においちゃだめです。
Sub 変身() の最後 End Sub の前に置きましょう
(´・ω・`) 2022/07/01(金) 16:20
今回文字化けしたことにより
今後同じことが起きないようにサイトで見たマクロを利用することになりました。
そのまま利用すると
CSV⇒エクセルのシートにCSVが上書きされていきます。
それで、Sheet1を作成してそこにCSVが書き込まれる状態にしました。
ここまでが現状です。
作業後にCSV⇒エクセルに戻そうとしたところうまくいかなかったので質問をしたというところです。
(´・ω・`)様
ありがとうございます。
思ったように出来るようになりました。
助かりました、ありがとうございます。
(初心者) 2022/07/01(金) 16:55
今の状態だと、PCのドキュメントから
目当てのフォルダに移動して
CSVを開くという状態になっています。
CSVの入っているフォルダを最初から出すにはどうすればよいでしょうか。
フォルダを開くコードを入れても
フォルダを開いた画面になりそれを閉じると
PCのドキュメント画面になってという状態で行き詰ってます。
皆様よろしくお願いいたします。
(初心者) 2022/07/01(金) 17:50
意味のわかる日本語でかいてもらえまそんか? 解読するのが面倒です (´・ω・`) 2022/07/01(金) 18:53
■1
一行ずつ読み込むのは必須なんですか?
ブックとして開いたり、外部ファイルとしてインポートするのではダメなんでしょうか?
■2
>文字化けするようになってしまった
そのファイルの文字コードはなんですか?
以前と変わっていたりしませんか?
■3
>CSVの入っているフォルダを最初から出す
一時的にカレントフォルダを変えればいいんじゃありませんか?
■4
>CSV⇒エクセルに戻そうとしたところうまくいかなかった
よくわかりませんが、もう一度、ブックとして開いたり、外部ファイルとしてインポートするのではダメなんでしょうか?
(もこな2 ) 2022/07/01(金) 20:12
>PCのドキュメント画面になってという状態で行き詰ってます。
デフォルトの保存場所か作業場所がそうなっているから、多分。 (こうする) 2022/07/02(土) 20:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.