
下記VBAにてシートごとCSVに変換し特定のフォルダーに指定ファイル名で保存しているのですが、
B列の空行を削除をしたデーターをCSV保存したいのですが、VBAの記述をご教授ください
ファイル名・フォルダーは固定で構いません
よろしくお願いいたします
Sub ボタン1_Click()
Application.DisplayAlerts = False
Sheets("商品.csv").Copy
ActiveWorkbook.SaveAs Filename:="Z:\DATA\商品.csv", _
FileFormat:=xlCSV
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

No.4ベストアンサー
- 回答日時:
>別シートにコピーしても空欄と認識しないようです。
値コピーすれば、"" (長さ0の文字列)は消えますが、オリジナルをいじることはできないはずですし、Copy , 再び、値コピーを繰り返すのは手間が多すぎます。No.1さんのご指摘の通りなのですが、さて、マクロのコードにしてみると、少しややこしいです。
Sheets("商品.csv").Copy
この「必殺の」一行を活かすために、全体の方法が決まってしまいます。しかし、元からすると、なんとも冗長になってしまいます。それとも、私のコードの問題なのかな?
'//標準モジュール
Sub ExportCSV()
Dim orgSh As Worksheet
Dim ValueArea As Range
Dim shName As String
Dim wb As Workbook
Const myPATH As String = "Z:\DATA\" '行末は必ず、¥。
Set orgSh = ActiveSheet
With orgSh
shName = .Name
.AutoFilterMode = False
Set LastCell = .UsedRange.SpecialCells(xlCellTypeLastCell)
Set ValueArea = .Range("A1", LastCell)
ValueArea.AutoFilter
.AutoFilter.Range.AutoFilter _
Field:=2, _
Criteria1:="<>" '空白行を取る
.Copy
Set wb = ActiveWorkbook
End With
With wb
With ActiveSheet
.AutoFilterMode = False
.UsedRange.ClearContents
ValueArea.Copy .Range("A1") 'ここが重要
End With
.SaveAs myPATH & shName , xlCSV '保存
.Close False
End With
ActiveSheet.AutoFilterMode = False
End Sub
No.3
- 回答日時:
No2です
>別シートにコピーしても空欄と認識しないようです。
あらそうでしたか・・・
関数の計算結果となると、空白表示のセルをを実際の空白に置き換えるしかないので、
For Each c In Intersect(ActiveSheet.UsedRange, Columns(2))
If c.Value = "" Then c.ClearContents
Next c
とか。
でも、こんな手間をかけているようなら、最初にご質問の通りフィルターで処理する方が簡単になって来ちゃいますね。
ActiveSheet.UsedRange.AutoFilter Field:=2, Criteria1:="<>"
で済むはずですので。
No.2
- 回答日時:
こんにちは
処理順序を変えれば(先に別シートへコピー)、フィルターをかけなくとも、空行を削除しても問題ないでしょうから・・・
Rows(1).Insert
Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
とかでもよさそう。
(Insertはエラー回避のおまじないです)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの行をコピーして貼り付け...
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
エクセルの1シートの内容を複...
-
EXCELのVBAでシートコピーをし...
-
【エクセル】プルダウン設定の...
-
【VBA】コピー&複数個所のペー...
-
CSVファイルについて質問です。
-
エクセルシートを別のエクセル...
-
Excel シートのコピーの際、ペ...
-
ExcelのBook内のシートを一枚だ...
-
エクセルで、開くのに時間のか...
-
VBA シートをコピー後、ボタン...
-
エクセルのページをシートごと...
-
EXCELで別のブックから式をコピ...
-
エクセルVBAですが教えてくださ...
-
Excel 数式の保護をしたセルを...
-
Excel Selectは使わない? VBA
-
【スプレッドシートで】xlsx形...
-
エクセルでシートを「移動また...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの行をコピーして貼り付け...
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
EXCELで別のブックから式をコピ...
-
【エクセル】プルダウン設定の...
-
エクセルでシートを「移動また...
-
ExcelVBAで、ユーザーフォーム...
-
Excel 数式の保護をしたセルを...
-
エクセルの1シートの内容を複...
-
EXCEL2007でシートをコピーする...
-
PDFファイルをコピーしてエクセ...
-
CSVファイルについて質問です。
-
ページの設定を別シートにコピ...
-
エクセルシートを別のエクセル...
-
Excel シートのコピーの際、ペ...
-
【VBA】コピー&複数個所のペー...
-
VBA シートをコピー後、ボタン...
-
EXCEL VBA シートをコピーする...
-
エクセルVBA 1行飛ばしで転記す...
おすすめ情報
fujillin 様
早々のご教授ありがとうございます。
説明不足で申し訳有りません
サンプル表の空欄には =IF(Sheet1!A1="","",Sheet1!B1) のように式が記載されていて
別シートにコピーしても空欄と認識しないようです。
式を消して試すと確かに行は削除されています。
式の記載があっても削除するように出来ないでしょうか
よろしくお願いいたします。