[[20220701150744]] 『CSV⇒エクセル変換』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


文字化けをどうにかしたい、
処理後にCSV⇒エクセルのシートに戻す、
何を解決したいんですか?
(tkit) 2022/07/01(金) 15:41

 実際にシートに書き出しているプロシジャは、PutCellですが、
 PutCellは、書き出すシートが指定されてないので、
 Activeなシートに書き出します。

 Sub 変身()の 最初の方に書き出すシートをActiveにする処理をいれましょう
 また、
     Sheets("CSV⇒エクセル").Select
 この行は、Sub PutCell の中においちゃだめです。
 Sub 変身() の最後 End Sub の前に置きましょう
(´・ω・`) 2022/07/01(金) 16:20

tkit様
言葉足らずで申し訳ないです。
最初に作成したマクロだと文字化けするようになってしまったので
サイトで知ったマクロを利用しようとしました。
今まではCSV⇒エクセルのシートにマクロボタンを設置し
それを押すとCSVを選ぶ画面になり
目当てのCSVを選択するとSheet1が作成され
そこにCSVをエクセルに変換したデータが作成されて
作成後にCSV⇒エクセルのシートに戻る状態です。

今回文字化けしたことにより
今後同じことが起きないようにサイトで見たマクロを利用することになりました。

そのまま利用すると
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.