
こちらで、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VLOOKUP FALSEのこと
-
if関数の複数条件について
-
同じ名前(重複)かつ 日本 ア...
-
excel
-
【マクロ】数式を入力したい。...
-
表計算ソフトでの様式の呼称
-
空白のはずがSUBTOTAL関数でカ...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ画像あり】❶1つの条件...
-
エクセルの文字数列関数と競馬...
-
【画像あり】【関数】指定した...
-
エクセルでフィルターした値を...
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】❶ブック...
-
【マクロ】既存ファイルの名前...
-
【マクロ】【画像あり】4つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでフィルターした値を...
-
if関数の複数条件について
-
エクセルシートの見出しの文字...
-
excel
-
エクセルの文字数列関数と競馬...
-
VLOOKUP FALSEのこと
-
同じ名前(重複)かつ 日本 ア...
-
表計算ソフトでの様式の呼称
-
エクセルに写真が貼れない(フ...
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
【画像あり】【関数】指定した...
-
エクセルのVBAで集計をしたい
-
【マクロ】【画像あり】4つの...
-
【関数】3つのセルの中で最新...
-
【マクロ】excelファイルを開く...
-
LibreOffice Clalc(またはエク...
-
エクセルのライセンスが分かり...
おすすめ情報