こちらで、Sheetをcsv出力する際、
空白のセルを区切る「,」が入ってしまう件を質問いたしました。
http://oshiete.goo.ne.jp/qa/8886514.html
計算結果が空白でも、そのセルは「文字数が0の文字列としてデータ」がある状態
という事は理解ができました。
そこで、A~C列の「文字数が0の文字列」ではないセルを選択して、
その範囲をSheet2にペースト、そのSheet2をcsvで保存すればよいと思いました。
この部分をマクロに組み込みたいのですが、
A~B列で「文字数が0の文字列」ではないセルを選択という指示をする部分がわかりません。
以下は、マクロの記録を使って作成しました。
Sub csv送信用()
'
' csv送信用 Macro
'
'
Sheets("Sheet2").Select
Selection.QueryTable.Delete
Selection.ClearContents
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Documents and Settings\***\My Documents\***.csv" _
, Destination:=Range("$A$1"))
.Name = "***_2"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Sheets("Sheet1").Select
Columns("A:C").Select
Selection.Copy
Sheets("csv_copy").Select
ActiveSheet.Paste
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\***\My Documents\csv_copy.csv", FileFormat:= _
xlCSV, CreateBackup:=False
Application.DisplayAlerts = True
Sheets("Sheet1").Select
End Sub
この
Columns("A:C").Select
Selection.Copy
の、部分を「A~B列で「文字数が0の文字列」ではないセルを選択」してコピーにするとよいのだと思うのですが、
どのように書いたらよいでしょうか。
Excel2007です。
宜しくお願いいたします。
No.4ベストアンサー
- 回答日時:
回答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
この回答への補足
ご回答ありがとうございます。
丁寧に訂正を頂きましたおかげで、
こちらの内容を使わせて頂きましたところ、
思い通りのcsvを保存できました。
ありがとうございました。
No.7
- 回答日時:
No5です たびたびすみません。
書き忘れてましたが、Sub Example()とEnd Subの中のコードが画面上2行に見えるかもしれませんが、1行ですので2行に分けないででください。2行にするとエラーになります。
No.6
- 回答日時:
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行目は空白という条件付きですが。
この回答への補足
ご回答ありがとうございます。
実際に設置してみたのですが、
貼り付け先が真っ白になりました。
設置場所が違ったのかも知れません。
申し訳ございません。
ありがとうございました。
No.5
- 回答日時:
「文字数が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
No.2
- 回答日時:
数式で空白表示になっているセルをクリアすればいいのですね?
こんなのはいかがでしょう?
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
No.1
- 回答日時:
それも無駄な抵抗では?というのも、セルが全くの空っぽであっても、周辺のセルに値が入っていればカンマが補われてしまうからです。
なのでセル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に組み込みたいと思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】適切な文字数の数字を...
-
【関数】先頭だけにある、半角...
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
LOOKUP関数を使えばいいのでし...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
-
時間によってファイル名が変わ...
-
Excelのpivotについて質問です
-
excelの不要な行の削除ができな...
-
Excelで、決まった行を繰り返し...
-
WPS OFFICEでの縦書きについて
-
UNIQUE関数が使えないバージョ...
-
エクセルの条件付き書式につい...
-
エクセルで「-0.0」と表示さ...
-
Aというブックの1というシート...
-
VBA Private Sub Worksheet_Cha...
-
【マクロ】ファイル名の変更に...
-
【マクロ】エクセルにかいてあ...
-
excel で二つのどちらかを選ぶ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報