
お世話になっております。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) 範囲を指定して別シートにコピペ 2 2022/09/15 07:32
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002
Visual Basic(VBA)
-
エクセル マクロで転記したら空白なのに何か存在する !
Excel(エクセル)
-
-
4
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
5
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
6
EXCEL VBA で指定した範囲に入力があるかどうか?
Visual Basic(VBA)
-
7
VBAで文字列を数値に変換したい
Excel(エクセル)
-
8
【Excel VBA】ブックを複数開いている際、任意のブックをアクティブにしたい
Excel(エクセル)
-
9
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
10
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
11
VBAで指定シート以外の選択
Visual Basic(VBA)
-
12
VBA .Value=.Value ?
Excel(エクセル)
-
13
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
14
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
15
エクセルvbaで、別シートの最下行にデータを取り込むコードを教えてください。
Visual Basic(VBA)
-
16
特定のシート名のシートのみ除外して、それ以外のシート名のシートをすべて集約する方法(VBA)
Excel(エクセル)
-
17
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【画像あり】オートフィルター...
-
IF関数で空欄("")の時、Null...
-
Excel > ピボットテーブル「(空...
-
エクセルでCSVを編集するとき、...
-
「データ要素を線で結ぶ」がチ...
-
エクセル 連番が途切れていると...
-
ピボットテーブルで空白セルの...
-
Excelで、入力文字の後に自動で...
-
空白セル内の数式を残したまま...
-
形式貼り付けの「空白を無視す...
-
関数TRANSPOSEで空白セルを0に...
-
エクセルのIF関数で、隣のセル...
-
【Excel】 csvの作成時、空白セ...
-
Excel:関数が入っているセルに...
-
【Excel】 Ctrl+方向キー で空...
-
数式による空白を無視して最終...
-
エクセル セルのコピー元が空...
-
エクセルで空白を無視して一番...
-
エクセルで入力すると隣のセル...
-
エクセルで、「複数のセルの中...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
空白セルに斜線(罫線)
-
Excel > ピボットテーブル「(空...
-
Excelで、入力文字の後に自動で...
-
エクセル 連番が途切れていると...
-
ピボットテーブルで空白セルの...
-
「データ要素を線で結ぶ」がチ...
-
Excel:関数が入っているセルに...
-
数式による空白を無視して最終...
-
空白セル内の数式を残したまま...
-
excel2010 空白セルにのみ貼り...
-
【Excel】 csvの作成時、空白セ...
-
エクセルで上の行の値を自動的...
-
エクセルのIF関数で、隣のセル...
-
エクセルで、「複数のセルの中...
-
形式貼り付けの「空白を無視す...
-
関数TRANSPOSEで空白セルを0に...
-
【Excel】 Ctrl+方向キー で空...
-
色つき行の一括削除は?
おすすめ情報