会員データをエクセル2019のフィルターで表示した時に、非表示の行が出来ます。
CSVで出力するとこの空白行は
,,,,,,,
のような形で出力されてしまいます。
これを行ごと削除して詰めて出力したいです。
会員システムで会員情報をエクセル形式でダウンロードし、フィルターを掛けます。
すると
実際は3,4行目はフィルターで非表示ですが、CSVで書き出すと下記の様になります。
A B C
1 青木,2月,メール配信可,-
2 秋葉,2月,メール配信可,-
3
4 安部,2月,メール配信可,-
5 田村,2月,メール配信可,-
6 高橋,2月,メール配信可,-
7
8 野村,2月,メール配信可,-
9 田村,2月,メール配信可,-
※元データを別シートに抽出していますので上記のデータは関数(抽出結果)です。
※空白行は""で出力しています。
※実際は空白行に,,,などのコンマが並んでいますが、他の方の説明で使われていた下記VBAの式をいれると上記のようになります。
よろしくお願い致します。
Sub macro1()
Dim h As Range
Dim buf As String
Dim FileN As String
FileN = Application.GetSaveAsFilename( _
InitialFileName:="book1.csv", _
FileFilter:="CSV ファイル (*.csv), *.csv")
Open FileN For Output As #1
With Application
For Each h In Range("A1:A" & Range("A65536").End(xlUp).Row)
buf = Join(.Transpose(.Transpose(Range(h, Cells(h.Row, "IV")).Value)), " ")
buf = .Trim(buf)
buf = Replace(buf, " ", ",")
Print #1, buf
Next
End With
Close #1
End Sub
範囲に関しては記載の仕方がよくわからないので、上から下まで全部対象にしたいです。
アクティブレンジという項目を使うとこの空白行を詰めることが出来るみたいなのですが、変更するとエラーになってしまいますので、これを使用したやり方でも、そうでないやり方でもお教え頂けると嬉しいです。
よろしくお願い致します。
>CSVで出力するとこの空白行は
>,,,,,,,
>のような形で出力されてしまいます。
CSVで出力するコードを一部抜き出すと
buf = .Trim(buf)
buf = Replace(buf, " ", ",")
Print #1, buf
Next
の部分で、
buf = Replace(buf, " ", ",")
Print #1, buf
かな。
>,,,,,,,
>のような形で出力
なので、
>,,,,,,,
の時は、出力したくないので※しつこいな
buf = .Trim(buf) If Len(Trim(buf)) > 7 Then '7文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
↑なんか変だけど、
現在
>,,,,,,,
>のような形で出力
は、動いているので、
単純に If Len(Trim(buf)) > 7 Then とかbufがLenで調べて7文字以上なら書き出す
そんな手抜き処置を提案してみたり。
手抜き回答ですが、解決のヒントとなれば幸いです。
※外していたらスミマセン。と定型文を書きつつ、うまく動くといいな・・・
あっ、
>※実際は空白行に,,,などのコンマが並んでいますが、
>他の方の説明で使われていた下記VBAの式をいれると上記のようになります。
空白行までできてるなら、
buf = .Trim(buf) '←あっ、ここで、Bufから空白抜いてるジャン、見落とした・・・ If Len(buf) > 1 Then '1文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
↑こんな感じで、
buf = .Trim(buf) 'ここで、Bufから空白抜いて
If Len(buf) > 1 Then '1文字以上ならデータありなので↓書き込む
buf = Replace(buf, " ", ",") 'スペースをカンマにしてから
Print #1, buf 'テキストファイル csvへ一行書き込む
End If
素朴な疑問ですが、
A B C
1 青木 太朗,2月,メール配信可,-
2 秋葉 花子,2月,メール配信可,-
など、
氏名でセイとメイの間にスペースがあった時、
単純に
buf = Replace(buf, " ", ",") 'スペースをカンマにしてから
Print #1, buf 'テキストファイル csvへ一行書き込む
だと、別問題が発生するような未来が見えるような、見えないような。
名前にスペースが入らなかったらスミマセン、スルーしてください。
buf = .Trim(buf) '←あっ、ここで、Bufから空白抜いてるジャン、見落とした・・・ If Len(buf) > 1 Then '1文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
で、動くといいなぁ・・・・
>CSVで出力するとこの空白行は
>,,,,,,,
>のような形で出力されてしまいます。
CSVで出力するコードを一部抜き出すと
buf = .Trim(buf)
buf = Replace(buf, " ", ",")
Print #1, buf
Next
の部分で、
buf = Replace(buf, " ", ",")
Print #1, buf
かな。
>,,,,,,,
>のような形で出力
なので、
>,,,,,,,
の時は、出力したくないので※しつこいな
buf = .Trim(buf) If Len(Trim(buf)) > 7 Then '7文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
↑なんか変だけど、
現在
>,,,,,,,
>のような形で出力
は、動いているので、
単純に If Len(Trim(buf)) > 7 Then とかbufがLenで調べて7文字以上なら書き出す
そんな手抜き処置を提案してみたり。
手抜き回答ですが、解決のヒントとなれば幸いです。
※外していたらスミマセン。と定型文を書きつつ、うまく動くといいな・・・
あっ、
>※実際は空白行に,,,などのコンマが並んでいますが、
>他の方の説明で使われていた下記VBAの式をいれると上記のようになります。
空白行までできてるなら、
buf = .Trim(buf) '←あっ、ここで、Bufから空白抜いてるジャン、見落とした・・・ If Len(buf) > 1 Then '1文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
↑こんな感じで、
buf = .Trim(buf) 'ここで、Bufから空白抜いて
If Len(buf) > 1 Then '1文字以上ならデータありなので↓書き込む
buf = Replace(buf, " ", ",") 'スペースをカンマにしてから
Print #1, buf 'テキストファイル csvへ一行書き込む
End If
素朴な疑問ですが、
A B C
1 青木 太朗,2月,メール配信可,-
2 秋葉 花子,2月,メール配信可,-
など、
氏名でセイとメイの間にスペースがあった時、
単純に
buf = Replace(buf, " ", ",") 'スペースをカンマにしてから
Print #1, buf 'テキストファイル csvへ一行書き込む
だと、別問題が発生するような未来が見えるような、見えないような。
名前にスペースが入らなかったらスミマセン、スルーしてください。
buf = .Trim(buf) '←あっ、ここで、Bufから空白抜いてるジャン、見落とした・・・ If Len(buf) > 1 Then '1文字以上ならデータありにする?手抜きだけど buf = Replace(buf, " ", ",") 'スペースをカンマにしてから Print #1, buf 'テキストファイル csvへ一行書き込む End If
で、動くといいなぁ・・・・
あまり関係ないけど
buf = Join(.Transpose(.Transpose(Range(h, Cells(h.Row, "IV")).Value)), " ")
でgoogle検索すると、定番コードなのか?
https://teratail.com/questions/291680?link=qa_related_sp
https://oshiete.goo.ne.jp/qa/8559476.html
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q131462...
同じような質問・処理が出てくるので、
参考となれば
ありがとうございます!!
アドバイス通り下記のように追加したらばっちりでした♪
感激ですm..m
解決↓↓↓
Sub macro1()
Dim h As Range
Dim buf As String
Dim FileN As String
FileN = Application.GetSaveAsFilename( _
InitialFileName:="book1.csv", _
FileFilter:="CSV ファイル (*.csv), *.csv")
Open FileN For Output As #1
With Application
For Each h In Range("A1:A" & Range("A65536").End(xlUp).Row)
buf = Join(.Transpose(.Transpose(Range(h, Cells(h.Row, "IV")).Value)), " ")
buf = .Trim(buf)
If Len(buf) > 1 Then
buf = Replace(buf, " ", ",")
Print #1, buf
End If
Next
End With
Close #1
End Sub
あまり関係ないけど
buf = Join(.Transpose(.Transpose(Range(h, Cells(h.Row, "IV")).Value)), " ")
でgoogle検索すると、定番コードなのか?
https://teratail.com/questions/291680?link=qa_related_sp
https://oshiete.goo.ne.jp/qa/8559476.html
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q131462...
同じような質問・処理が出てくるので、
参考となれば
ありがとうございます!!
アドバイス通り下記のように追加したらばっちりでした♪
感激ですm..m
解決↓↓↓
Sub macro1()
Dim h As Range
Dim buf As String
Dim FileN As String
FileN = Application.GetSaveAsFilename( _
InitialFileName:="book1.csv", _
FileFilter:="CSV ファイル (*.csv), *.csv")
Open FileN For Output As #1
With Application
For Each h In Range("A1:A" & Range("A65536").End(xlUp).Row)
buf = Join(.Transpose(.Transpose(Range(h, Cells(h.Row, "IV")).Value)), " ")
buf = .Trim(buf)
If Len(buf) > 1 Then
buf = Replace(buf, " ", ",")
Print #1, buf
End If
Next
End With
Close #1
End Sub