- ベストアンサー
【ExcelVBA】空白ではないセルを選択する
- Sheetをcsv出力する際、空白のセルを区切る「,」が入ってしまう。A~C列の「文字数が0の文字列」ではないセルを選択し、その範囲をSheet2にペースト、csvで保存する方法が知りたい。
- Excel2007での作業方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
回答No2のemaxemaxです。 先程のは該当セルがないとエラーになってしまいます。 また、非効率なことをやってますので修正しました。 Sub test02() Dim myC As Range, myRng As Range Sheets("Sheet1").Columns("A:C").Copy Sheets("csv_copy").Columns("A:C") With Sheets("csv_copy") On Error Resume Next Set myRng = .Columns("A:C").SpecialCells(xlCellTypeFormulas, xlTextValues) '数式かつ文字列表示の各セル On Error GoTo 0 If Not myRng Is Nothing Then '該当があれば For Each myC In myRng If myC.Value = "" Then '空白表示なら myC.ClearContents 'クリア End If Next End If .Activate End With End Sub
その他の回答 (6)
- kkkkkm
- ベストアンサー率66% (1734/2604)
No5です たびたびすみません。 書き忘れてましたが、Sub Example()とEnd Subの中のコードが画面上2行に見えるかもしれませんが、1行ですので2行に分けないででください。2行にするとエラーになります。
- kkkkkm
- ベストアンサー率66% (1734/2604)
No5です もし、コピーしたいA列のデータが10行目までで、10行目以降に別のコピーしたくないデータあり、かつ11行目が空白でしたら Cells(Rows.Count, "A").End(xlUp).Row ↓ Cells(11, "A").End(xlUp).Row という方法で対応してください。 また、途中で空白の行がないということですから Cells(1, "A").End(xlDown).Row という方法もあります。どちらにしても11行目は空白という条件付きですが。
補足
ご回答ありがとうございます。 実際に設置してみたのですが、 貼り付け先が真っ白になりました。 設置場所が違ったのかも知れません。 申し訳ございません。 ありがとうございました。
- kkkkkm
- ベストアンサー率66% (1734/2604)
「文字数が0の文字列」であるかないかを考えなくても、A列のA1から最終「可視データ」行までのABC列をSheet2にコピーしたらいいわけですよね。 Sub Example() Range(Cells(1, 1), Cells(Cells(Rows.Count, "A").End(xlUp).Row, "C")).Copy Sheets("Sheet2").Cells(1, 1) End Sub
- weboner
- ベストアンサー率45% (111/244)
そんなややこしいことしなくても データ全体をsheet2に張り付けて sub sample() Sheets(2).Select Range("A1").Select Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp end sub であとは保存したらいいのでは?
補足
ご回答ありがとうございます。 実際設置してみましたが、上手く行きませんでした。 申し訳ございません。
- emaxemax
- ベストアンサー率35% (44/124)
数式で空白表示になっているセルをクリアすればいいのですね? こんなのはいかがでしょう? Sub test01() Dim myC As Range Sheets("Sheet1").Select Columns("A:C").Select Selection.SpecialCells(xlCellTypeFormulas, 23).Select '数式が入っているセルだけ選択 For Each myC In Selection If myC.Value = "" Then '空白なら myC.ClearContents 'クリア End If Next Columns("A:C").Select Selection.Copy Sheets("csv_copy").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub
- RandenSai
- ベストアンサー率54% (305/561)
それも無駄な抵抗では?というのも、セルが全くの空っぽであっても、周辺のセルに値が入っていればカンマが補われてしまうからです。なのでセルA1,B1,C1にそれぞれ1,2,3が、セルA2,B2,C2は空っぽ、セルA3,B3,C3にそれぞれ4,5,6が入ったシートをCSV保存すると・・・ 1,2,3 ,, 4,5,6 となってしまいます。つまり、セルの境界部分に当たるカンマはどうやっても入ってしまうわけです。それにカンマがないと、まずいことも起こりますよ。例えば以下の様なCSVですが、 2,3 4,5 頭のカンマが存在しない、しかしカンマが削除されている可能性がある場合、2と4はどこの列にあったのか判断できなくなるじゃないですか。,,2,3だったらカンマが2つあるから、2はC列のデータだと判りますが、カンマが消えているのか最初からないのか判らないと区別できません。これは先頭ですが、途中のカンマがない場合も同じような問題が生じます。 なのでCSVデータのカンマを削除するのは、普通はしない(やっちゃいけない)ことです。カンマしかない行は必要ないという話なら、メモ帳で開いて置換しちゃえば済むと思いますが。
補足
お返事ありがとうございます。 今回作成している表に関しては、 途中で空白の行が入ることはありません。 従いまして、A:C列のA1から文字の入っている行までを選択、 別のシートにペーストしてそれをcsvで保存すれば可能でしたので、 それをVBAに組み込みたいと思いました。
補足
ご回答ありがとうございます。 丁寧に訂正を頂きましたおかげで、 こちらの内容を使わせて頂きましたところ、 思い通りのcsvを保存できました。 ありがとうございました。