• ベストアンサー

[マクロ]値に変換しても、空白のセルがカウントされてしまいます。

式が入っているセルを値に変換し、値が入ってるセルだけをカウントさせたいのですが、もともと式が入っていた空白になっているセルもカウントしてしまいます。 値の変換の仕方が間違っているのでしょうか? それともカウントの仕方が良くないのでしょうか。 値に変換するのは自動記録のマクロを作成しました。 カウントは、COUNTA関数をVBAで使用しています。 空白のセルをカウントさせない方法を教えてください。 マクロ・VBA初心者なので、値に変換するVBAも合わせて教えていただけると勉強になります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 COUNTA 関数の問題よりも、元のマクロの問題だと思います。 .Value = .Value で、解除できるのではありませんか? たとえば、 Range("A1:A10").Value = Range("A1:A10").Value というようにすればよいと思います。

plumbloom
質問者

お礼

ご回答どうもありがとうございます。 教えて頂いた方法で解決できました! 本当にどうもありがとうございました(*^_^*)

その他の回答 (4)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

◆マクロではありませんが、「未入力セル」をカウントする式です =COUNTIF(A1:A10,"=") ◆ついでに、「空白のセル」をカウントする式です =COUNTIF(A1:A10,"<=!")

plumbloom
質問者

お礼

空白セルをカウントする式の"<=!"フレーズは初めて知りました。 ご回答どうもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

やってみると Sub test03() MsgBox Application.WorksheetFunction.CountA(Range("B1:B10")) End Sub では捉えられないようだ。 ーーー 例 下記データ例では A1A10はデータ。A6以後は未入力=空白。 B1には当初 =IF(A1="","",A1)を入れて式を下方向に複写 コピーして、形式を選択して貼り付けー値  で値化 上記コードを実行ー>10と出る。 C列は=IF(B1="",1,2)の式を入れて複写。 B5:B10はC列の式では空白と捉えている。 しかしB5:B10は数式バー部を見ると’が見える。 CountAはこれを空白で無いと捉えるようだ A列  B列  C列 123 123 2 234 234 2 456 456 2 d d 2 e e 2 1 1 1 1 1 ーーー 別の方法で非空白のセル数を考えざるを得ないと思う。 B5:B10をDeleteキーで空白にすると下記は5となる。 Sub test03() x = "" MsgBox Application.WorksheetFunction.CountA(Range("B1:B10")) MsgBox Application.WorksheetFunction.CountIf(Range("B1:B10"), "<>" & x) End Sub しかしその前の状態では10になる。 ーーー とりあえずは回答文も長くなるので、ForNEXTで空白かを聞いて Sub test04() n = 0 For i = 1 To 10 If Cells(i, "B") <> "" Then n = n + 1 End If Next i MsgBox n End Sub で逃げておきます。関数でよいのが見つかれば追加します。

plumbloom
質問者

お礼

検証途中等、詳細にご連絡頂きどうもありがとうございます。 私にはまだまだ難しい構文ですが、今回ご提案頂いたような構文を自分でも組めるよう、勉強を進めていきます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

=if(A1="","",A1)といった式の入っているセルを値貼り付けで上書きしても、長さ0の文字列となって、empty扱いはされない様ですね。コピー、形式を指定して貼付で、空白セルを無視するにチェックを入れても、空白セル扱いされない事からも分かります。 VBAでの値変換ですが、 Sub testx() Dim mycell As Range For Each mycell In Range("b1:b5") 'mycell.Value = Val(mycell.Value) mycell.Value = mycell.Text Next End Sub mycell.Value = Val(mycell.Value) だと、""セルの値は0になりました。 mycell.Value = mycell.Text だと空白セルはempty扱いされるようになりましたが、値が浮動小数点数の場合は、表示されている桁数で切りつめられてしまいます。""の場合は、別に処理するのが良いのではないでしょうか。 If mycell.Value = "" Then mycell.ClearContents

plumbloom
質問者

お礼

ご回答どうもありがとうございます。 私は今回初めて、if関数を値に変換しても、長さ0の文字列が残ってしまうことを知りました。関数の世界はとても奥が深いですね。

noname#77845
noname#77845
回答No.1

カウントしているところを =COUNTIF(セル範囲,"<>0") にしたらどう?

plumbloom
質問者

お礼

ご回答どうもありがとうございます。 条件"<>0"は思いつきませんでした。 なるほどと思いました。 COUNTAをCOUNTIFに置き変えて条件設定し、検証してみましたが、構文エラーになってしまいました。。セル範囲には、"-R"等ではなく、A1:A20と具体的に設定しないと機能しないのでしょうか?今後の参考にアドバイスを頂ければ幸いです。 よろしくお願いします。