Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6327 / 13646 ツリー ←次へ | 前へ→

【45881】セルが空白なら空白と表示したい さや 07/1/16(火) 23:10 質問[未読]
【45882】Re:セルが空白なら空白と表示したい へっぽこ 07/1/16(火) 23:21 回答[未読]
【45883】Re:セルが空白なら空白と表示したい さや 07/1/16(火) 23:40 質問[未読]
【45884】Re:セルが空白なら空白と表示したい ichinose 07/1/16(火) 23:50 発言[未読]
【45885】Re:セルが空白なら空白と表示したい ichinose 07/1/17(水) 0:09 発言[未読]
【45886】Re:セルが空白なら空白と表示したい さや 07/1/17(水) 0:18 お礼[未読]
【45890】Re:セルが空白なら空白と表示したい ichinose 07/1/17(水) 7:59 発言[未読]
【45893】Re:セルが空白なら空白と表示したい りん 07/1/17(水) 12:27 回答[未読]
【45911】Re:セルが空白なら空白と表示したい さや 07/1/17(水) 19:07 お礼[未読]

【45881】セルが空白なら空白と表示したい
質問  さや  - 07/1/16(火) 23:10 -

引用なし
パスワード
   もし、セルA1とA2がどちらも空白ならば、空白ですと表示したいのです。
自分で以下のVBAを作成しましたが、エラーです。
どこを直せば、よいのですか?

Sub セルが空白なら()

If Range("A1:A2") = "" Then
   MsgBox "空白です"
   
End If

End Sub

よろしくお願いします。

【45882】Re:セルが空白なら空白と表示したい
回答  へっぽこ  - 07/1/16(火) 23:21 -

引用なし
パスワード
   こんばんは。

こんな感じでしょうか?

Sub セルが空白ならその1()
 If Range("A1").Value = "" And Range("A2").Value = "" Then
  MsgBox "空白です"
 End If
End Sub

Sub セルが空白ならその2()
 If Range("A1").Value = "" Then
  If Range("A2").Value = "" Then
   MsgBox "空白です"
  End If
 End If
End Sub

【45883】Re:セルが空白なら空白と表示したい
質問  さや  - 07/1/16(火) 23:40 -

引用なし
パスワード
   ▼へっぽこ さん、ありがとうございます。

そうすると、例えば、該当のセルが100個とすると、「Range("A1").Value = ""」を100個、作らないとダメですか?

Range("A1:A100")のような形で簡単にする方法は、ないでしょうか?

よろしくお願いします。

【45884】Re:セルが空白なら空白と表示したい
発言  ichinose  - 07/1/16(火) 23:50 -

引用なし
パスワード
   こんばんは。

>
>そうすると、例えば、該当のセルが100個とすると、「Range("A1").Value = ""」を100個、作らないとダメですか?

>Range("A1:A100")のような形で簡単にする方法は、ないでしょうか?

Sub test()
  If Evaluate("Sum((a1:a100 = """") * 1)") = 100 Then MsgBox "空白です"
End Sub

こんな方法ですか?

【45885】Re:セルが空白なら空白と表示したい
発言  ichinose  - 07/1/17(水) 0:09 -

引用なし
パスワード
     If Application.CountBlank(Range("a1:a100")) = 100 Then
    MsgBox "全部空白"
    End If

こっちの方がよさそうです。

【45886】Re:セルが空白なら空白と表示したい
お礼  さや  - 07/1/17(水) 0:18 -

引用なし
パスワード
   ichinose さん、ありがとうございました。

何となく、意味がわかりました。

私にはレベルが高いので、

>Evaluate("Sum((a1:a100 = """") * 1)") = 100
について、説明していただけるとありがたいです。

【45890】Re:セルが空白なら空白と表示したい
発言  ichinose  - 07/1/17(水) 7:59 -

引用なし
パスワード
   ▼さや さん:
おはようございます。

>>Evaluate("Sum((a1:a100 = """") * 1)") = 100
>について、説明していただけるとありがたいです。

セル範囲が全部空白か否かの判断は、前述したように
CountBlank関数を使うほうが良い ということをお断りして・・。

Evaluateに関しては、

www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=8117;id=excel

Helpとここを参照していただくとして・・・。

中身の "Sum((a1:a100 = """") * 1)" これは、

配列数式です。

セルA1:A100以外のセルに

「=Sum((a1:a100 = "") * 1)」(両端の「」は除く)

を指定してください。
但し、セルの確定は通常のEnterキーではなく、Ctrl+Shift+Enterキーで確定します。

数式バーには、

{=SUM((A1:A100="")*1)}

このように表示されているはずです。 

この数式があるセルには、A1:A100全て空白なら、100と表示されます。

A1:A100="" という数式で空白か否かの結果が
TrueかFalseで100個分の配列として作成されます。
(空白なら、True、そうでなければFalse)

*1 をすることでブール型のデータを数値に変換しています。
(True--->1  False--->0)

これのSumつまり、合計を取得しているので空白の個数が求められます。

Evaluateや配列数式は上手に使うと便利です(私は、そう思っています)。

【45893】Re:セルが空白なら空白と表示したい
回答  りん E-MAIL  - 07/1/17(水) 12:27 -

引用なし
パスワード
   さや さん、こんにちわ。

>そうすると、例えば、該当のセルが100個とすると、「Range("A1").Value = ""」を100個、作らないとダメですか?
>Range("A1:A100")のような形で簡単にする方法は、ないでしょうか?

おなじみのCOUNTAワークシート関数です。
Sub TEST()
  Dim r1 As Range
  Set r1 = Application.ActiveSheet.Range("A1:A100")
  '
  If Application.WorksheetFunction.CountA(r1) = 0 Then
   MsgBox "空白です"
  Else
   MsgBox "何かあります"
  End If
End Sub

こんな感じです。

【45911】Re:セルが空白なら空白と表示したい
お礼  さや  - 07/1/17(水) 19:07 -

引用なし
パスワード
   へっぽこさん、ichinoseさん、りんさん、
丁寧なご回答ありがとうございました。

すぐに理解できない部分もありますが、これから勉強したいと思います。
今後、皆さんから見れば、基本的なことを質問するかもしれません。
よろしくお願いします。

6327 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free