![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
こちらで、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
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?8acaa2e)
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ランキング
-
エクセルで 自動的に◯や数字を...
-
【マクロ】2回実行したら、エ...
-
エクセルのツールバーから数値...
-
特定の文字列を含む、住所を抽...
-
Excel 2019 [オプション]の[リボンのユ...
-
祝日と土曜、日曜の合計をカウ...
-
EXCELの散布図で日付が1900年に...
-
マイクロソフトのPADを使ってい...
-
絶対参照
-
エクセルでCtrl+Tでテーブルの...
-
【マクロ】名前を保存する際に...
-
エクセルのクイックアクセスツ...
-
【マクロ】VLOOKUPにて参照元に...
-
Excel分数の表示について
-
【EXCEL】画像の黄色部分の抽出...
-
DATE関数で現在の年齢を出した...
-
Excelについて
-
マクロエクセルのブロック解除
-
Excelピボットテーブルの1行目
-
REGEXREPLACE関数について、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報