
お世話になっております。
Excelvba2013で、数式を含むセル範囲を、VBAのコードで
ws1.Range(ws.Cells(6, copydate_colsta), ws.Cells(6, copydate_colend)).Copy
ws2.Range("C7").Offset(0, paste_col).PasteSpecial xlPasteValues '値貼り付け
のように、コピーして値貼り付けしました。
その後、
For j = 1 To plan_row
Set c = daily_ws.Range(Cells(j + 7, 3).Offset(0, paste_col), Cells(j + 7, plan_col + 2).Offset(0, paste_col))
daily_ws.Range(Cells(j + 7, 3).Offset(0, paste_col), Cells(j + 7, plan_col + 2).Offset(0, paste_col)).Select
If WorksheetFunction.CountA(c) = 0 Then
Debug.Print c.Address
MsgBox "空白です。"
Else
MsgBox "空白ではありません。"
End If
Next j
のように、範囲内全てが空白かどうか1行毎にチェックしていったのですが、値貼り付けしたにも関わらず、数式が入っていたセルをカウントしてしまい、空白をうまく取得できません。
数式の結果は、空白なので、それをコピーして値で貼り付けても見た目は空白です。
ジャンプ機能で空白セルを確認すると、やはり数式をコピーして値貼り付けしたセルは空白になっていないようです。
何も見えないセルを選択してDeleteすると、空白になるようですが、空白セルが取得できず困っています。
何か対処法はあるのでしょうか?それとも、どこか書き方に問題があるのでしょうか?
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
最初に関係のないことかもしれませんが、コードが読みにくいです。
変数に、_ (アンダースコア)は使わないことと決めているルールもあるぐらいです。
しばらく経ったら、読めなくなっていると思います。
値貼り付けした後、長さ0の文字列の消し方は、以下のように .Value =.Value というテクニックを使います。
Dim pRow As Long
Dim dWh As Worksheet
Set dWh = Worksheets("Sheet2")
Dim p As Long, q As Long '短いほうが読みやすい
'ws1.Range(ws.Cells(6, copydate_colsta), ws.Cells(6, copydate_colend)).Copy
'ws2.Range("C7").Offset(0, p).PasteSpecial xlPasteValues '値貼り付け
With dWh
pRow = .Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To pRow
With .Range(.Cells(j + 7, 3).Offset(0, p), .Cells(j + 7, q + 2).Offset(0, p))
'RangeオブジェクトとCellsプロパティとは関連性がないので、両方ともシートを指定しないと、エラーがでる可能性がでます。
.Value = .Value 'これで空白が消えるはずです。
If WorksheetFunction.CountA(.Cells) = 0 Then 'With ステートメントで、範囲は.Cells で表せます。
MsgBox "空白です。"
Else
MsgBox "空白ではありません。"
End If
End With
Next j
End With
読みにくいコードを解読して、ご回答どうもありがとうございました。
.Value = .Value 'これで空白が消えるはずです。
上記のコードでも、今のコードに追加してもうまくいきました。
どうしてこれで消えるのかよく分からないですが、経験と知識がないと分からないですね。
とても助かりました。
どうもありがとうございました。
No.2
- 回答日時:
こんばんは!
1セルだけであれば、単純に
>If c = "" Then
だけで良いと思いますが、複数セルを参照する場合のやり方として
① 変数を追加し
For Each r In c
If r <> "" Then
cnt = cnt + 1
End If
Next r
If cnt = 0 Then
MsgBox "空白"
Else
MsgBox "空白ではない"
End If
のように範囲内をループさせる方法
② 通常のワークシート関数でも数式が入っていて「空白」に見えるセルは
COUNTA関数では「空白ではない」と判断されてしまいますので、別の関数(COUNTIF関数)を使います。
If WorksheetFunction.CountIf(c, "?*") = 0 Then
のように「文字長」が1以上のセル数をカウントする!
というやり方
※ 簡単なのは②の方法だと思います。m(_ _)m
ありがとうございます。№1さんに教えていただいた、
c.Value = c.Value
を追加したら、消えました。
①のやり方は、2度判定みたいな感じになってしまいますね。アイデアですね。
②のやり方でも、問題ないのを確認できました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
エクセルVBAで値の貼り付けができない
その他(Microsoft Office)
-
エクセル マクロで転記したら空白なのに何か存在する !
Excel(エクセル)
-
-
4
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
5
vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002
Visual Basic(VBA)
-
6
VBAで文字列を数値に変換したい
Excel(エクセル)
-
7
【Excel VBA】ブックを複数開いている際、任意のブックをアクティブにしたい
Excel(エクセル)
-
8
VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗
Access(アクセス)
-
9
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
10
VBA .Value=.Value ?
Excel(エクセル)
-
11
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
12
Excel VBA、 別ブックの最終行セルへのコピー&値ペースト
Visual Basic(VBA)
-
13
特定のシート名のシートのみ除外して、それ以外のシート名のシートをすべて集約する方法(VBA)
Excel(エクセル)
-
14
VBAで指定シート以外の選択
Visual Basic(VBA)
-
15
エクセルvbaで、別シートの最下行にデータを取り込むコードを教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【画像あり】オートフィルター...
-
エクセルでCSVを編集するとき、...
-
【関数】=EXACT(a1,b1) a1とb1...
-
エクセル 連番が途切れていると...
-
IF関数で空欄("")の時、Null...
-
エクセルで数式の入ったセルの...
-
関数TRANSPOSEで空白セルを0に...
-
エクセルで空白を無視して一番...
-
エクセルで入力すると隣のセル...
-
Excel > ピボットテーブル「(空...
-
「データ要素を線で結ぶ」がチ...
-
Excelで、入力文字の後に自動で...
-
マクロボタンを押すたびに違う...
-
IF関数について
-
VBAで、行数が変化する表の合計...
-
オートフィルで空欄に0が出て...
-
エクセルのIF関数で、隣のセル...
-
Excel:関数が入っているセルに...
-
エクセルで上の行の値を自動的...
-
エクセルで、「複数のセルの中...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【画像あり】オートフィルター...
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
Excel > ピボットテーブル「(空...
-
エクセル 連番が途切れていると...
-
「データ要素を線で結ぶ」がチ...
-
エクセルで入力すると隣のセル...
-
ピボットテーブルで空白セルの...
-
Excel:関数が入っているセルに...
-
Excelで、入力文字の後に自動で...
-
形式貼り付けの「空白を無視す...
-
数式による空白を無視して最終...
-
空白セル内の数式を残したまま...
-
excel2010 空白セルにのみ貼り...
-
関数TRANSPOSEで空白セルを0に...
-
【Excel】 csvの作成時、空白セ...
-
エクセルのIF関数で、隣のセル...
-
エクセル セルのコピー元が空...
-
エクセルで、「複数のセルの中...
-
エクセルで上の行の値を自動的...
おすすめ情報