2024年のうちにやっておきたいこと、ここで宣言しませんか?

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target = "" Then
    MsgBox "空欄です"
  End If
End Sub

上記コードで、セルにカーソルを合わせてDeleteキーを押すと正常にメッセージが表示されます。
ただし、カーソルを合わせたセルが結合されていた場合、
「型が一致しません」というエラーで停止してしまいます。
結合されているセルに対しても同じ処理をするには、
  If Target = "" Then
の部分をどのように指定すればよいでしょうか。

A 回答 (5件)

If Target.Text = "" Then



Textプロパティでよければエラーになりませんね。

不思議な挙動ですね。
結合されたセルが空の場合のみValueプロパティの値が「Variant()」配列で渡されてますね。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。

とても気持ちよく動作しております。
記述の意味もわかりやすいですし。
Valueプロパティ云々は正直理解できていないのですが、
今までのコードに.Textを追加するだけでいけそうです。

お礼日時:2007/07/10 16:32

Private Sub Worksheet_Change(ByVal Target As Range)


  If Application.CountA(Target) = 0 Then
    MsgBox "空欄です"
  End If
End Sub

はどうですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
解決したのに締め切るのを忘れていました、
申し訳ありません。

提示していただいたコードも正常動作しました。
なにやら他とは毛色が違うのでとっつきにくい印象がありますが、
使わせていただこうと思います。
ありがとうございました。

お礼日時:2007/07/23 14:42

Private Sub Worksheet_Change(ByVal Target As Range)


If Target.MergeCells = True Then
MsgBox "セル結合"
End If
End Sub
が参考になれば。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

「Target.MergeCells = True 」を組み込むことで正常に動作しました。
if文の階層を1つ増やすか、orを入れないと空白の判断はできませんけど、
動作的に問題ないです。

お礼日時:2007/07/10 16:35

簡単にするなら


  If Target.Cells(1,1) = "" Then

選択範囲の「左上のセル」を処理対象としています。
結合セルをきちんと判断するならもう少し複雑になりますが…
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

正常に動きました。
が、何故左上のセルを処理対象とすると動くのかがわかりません。
結合セルは、常に隣り合った2つを結合したものに対して使うつもりです。

お礼日時:2007/07/10 15:57

If Range(Left(Target.Address(0, 0), 2)) = "" Then


とすればいいでしょう。

この回答への補足

回答ありがとうございます。

すみません、ちょっと意味がわかりません。
Target.Addressは対象のセルのアドレスで、
Target.Address(0, 0)は同じアドレスだけど[$]マークを抜いた形で出るようですね。
で、そこから前2文字を抜き出したRangeというのは、何を指しているのでしょうか。

補足日時:2007/07/10 15:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A