[[20191010161924]] 『シートのCSV変換と空白処理』(あい) ページの最後に飛ぶ

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

 

『シートのCSV変換と空白処理』(あい)

VBA初心者です。

〇到達点
エクセルシートをCSVに変換し、指定の名前で保存したい

〇問題点
1.CSVに変換すると空白セルがカンマで表示になる(数式も入っていません)
→0800,12,1,,,,
2.CSVに変換すると時間表記(12:00のところを1200と表示させている)が数値になる(0.333のような)

〇原因
1.数式が入ったシートを値貼り付けで丸々コピーしているため何かしらのデータが残っている(憶測です)
2.原因はわかりません

以上が、現段階です。

〇解決策
1.「データ」→「区切り位置」で完了させてしまえば、空白だけど空白で処理されないセルは完全に空白となることは分かったのですが、マクロに起こすやり方がわかりません
2.原因がわからないため、解決策も不明

エクセルのデータは以下の通りです。

※C列は6桁表記にするため6桁に満たない数値の頭に0を置いています
※最終列は行によってまちまちですが最大EH列まで入力があります
※最終行は決まっていないため、最終行を取得してSCVに変換させたいです

     A      B ・・・ L ・・・ P       E ・・・EH
1   1111   45     000123    0800    1923
2  1111   23     004321    0800    1650     1500
3   1111   56     001234    0900    1800     2055
・
・
・

VBA素人のためネットで引っ張ってきたマクロですが、載せておきます。
ご教授のほど、よろしくお願いいたします。

Public Sub OutPutTEST()

    Worksheets("CSV用").Select
    Call fx_CsvOutput(Worksheets("CSV用").Range("$A$1:$EH$100"))
End Sub

Public Function fx_CsvOutput(GetRange As Range)

    Dim OutPutFile As String
    Dim F As Integer
    Dim r As Long
    Dim c As Integer
    Dim str As String

    Application.ScreenUpdating = False

    OutPutFile = ActiveWorkbook.Path & "\kintai.csv"

    F = FreeFile
    Open OutPutFile For Output As F
    For r = GetRange.row To GetRange.row + GetRange.Rows.Count - 1
        For c = GetRange.Column To GetRange.Column + GetRange.Columns.Count - 1
            If str = "" Then
                str = Cells(r, c).Value
            Else
                str = str & "," & Cells(r, c).Value
            End If
        Next c
        Print #F, str
        str = ""
    Next r

    Application.ScreenUpdating = True
    Close #F
End Function

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >空白セルがカンマで表示になる
 CSV (comma-separated value) ファイルなので
 そのカンマは、データ区切りのカンマです。

 >12:00のところを1200と表示させている
 書式設定でそうしているのであれば、セル表示のまま書き出したいのであれば、
 Cells(r, c).Value ではなくて Cells(r, c).Text にします。

 このマクロ、どこから持ってきたのかしりませんが、
 書き出し範囲の1列目が空白だと桁ずれしませんか?

 書き出しデータの1列目は必ず空白でないのであれば、問題ないのですが
(´・ω・`) 2019/10/10(木) 17:16

 str = str & "," & Cells(r, c).Value

理由は上記の式です。値のあるなしにかかわらずカンマを加えています。
また、.valueなのでエクセルの表示形式のフィルターを通さない値になります。
(mori) 2019/10/10(木) 17:23


(´・ω・`)さん
丁寧に教えて頂き、ありがとうございます。
表示はTextに変えたところ、思った通りに作動しました。
書き出し範囲の1行目は空白ではないので、大丈夫です。

(mori)さん
意味合いのご教授ありがとうございます。
無事解決いたしました。
(あい) 2019/10/11(金) 08:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.