[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの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
(mori)さん
意味合いのご教授ありがとうございます。
無事解決いたしました。
(あい) 2019/10/11(金) 08:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.