• ベストアンサー

VBAで「セルに何か入っている場合」

EXCELでVBAを使いアプリケーションを作っています。 今「このセルに何か入っている(何でも良い。とにかく空でない)場合、この処理」という意味のプログラムを書きたいのですが、「このセルに何か入っている場合」の部分がどうしてもわかりません。null、isnull、emptyなど片っ端から試してみたり、逆に問題のセルが空欄の時にfalseになる変数を前もって設定して、その変数がtrueの時に処理させようとしたりしてみたのですが、すべてうまく行きませんでした。 解決法を教えていただけたら幸いです。

noname#101292
noname#101292

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#1>結合してあるセルを指定しているので 結合してあるセルの値は、左上のセルの値になります。 なので、 Set a = Range("A1:B1") ではなくて Set a = Range("A1") のように指定してください。

noname#101292
質問者

お礼

ありがとうございます。 おっしゃる通りだったようです。 マクロの記録で罫線を引いていったら Range("A1:B1").Select というように記録されたので、 そう指定するものだとすっかり思い込んでいました。 VBAは難しいなぁ~。

その他の回答 (4)

回答No.5

#4さんの言っているように、A1とB1が結合されているときはA1に値が入るので、下記のコードでよいと思います。 私が試してみた限りではうまくいきました。 If IsEmpty(Range("A1")) Then MsgBox "AAA" End If

noname#101292
質問者

お礼

ありがとうございます。 おっしゃるとおりです。こんなところでミスっていたとは。 マクロの記録で罫線を引いていったら Range("A1:B1").Select というように記録されたので、 そう指定するものだとすっかり思い込んでいました。 ありがとうございます。 おっしゃる通りだったようです。 マクロの記録で罫線を引いていったら Range("A1:B1").Select というように記録されたので、 そう指定するものだとすっかり思い込んでいました。 VBA難しいです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Dim r As Range Set r = Range("A1") If r.Value <> Empty Then '処理 End If では、だめですか? 上記の場合 A1 ="" の様な式が入力されている場合、入力があるとは検知されませんが、そういう場合のことなのでしょうか

noname#101292
質問者

補足

ありがとうございます。 一番目の方への回答とほぼ同じ内容をお答えする事になりますが、 おっしゃるとおりにやってみると、 If r.Value <> Empty Then の部分が黄色反転で実行エラー13です。 私も、どこがいけないのかわかりません。

回答No.2

IsBlank(対象セル)関数は使えませんか?

noname#101292
質問者

補足

ありがとうございます。 IsBlankは、EXCELのシート上で使う関数だと思っていました。 VBAで使う場合の例がちょっと見つからず、よくわかりませんでした。 ちなみに、今回のプログラムは、セルに何か入っていたら罫線を引くという性質のものなので、シート上での処理はできないと思います。

回答No.1

条件を「セル<>""」としてできませんか?

noname#101292
質問者

補足

ありがとうございます。 私のつくっているものでは、結合してあるセルを指定しているので Rangeを使っていますが、 If Range("A1:B1")<>"" then '処理 Endif とするとまず一行目が黄色反転で、実行エラー13。 変数の設定をしていないから怒られたのかなあと 変数設定をしてみて Dim a As Range Set a = Range("A1:B1") If a.value <> "" Then '処理 End If としてみたのですが、 これもやっぱりIf a.value <> "" Thenが 黄色反転で実行エラー13です。 何がいけないのか、わからないのですが・・・。

関連するQ&A

  • エクセルVBAで セルの空白を識別する

    早速ですが IF Application.ISBLANK(Q17)=TRUE Then って やると Q17 が 未定義エラーとなります。 セルに書き込む関数と VBAとは 異なるらしいのですが・・・イマイチでして。 VBで使う  ISNULLも 変数しか 受付ないようですので、一旦 tanka=cells(3,17) isnull(tanka) とやるようです。 VBAから 空白を 識別する方法は無いものでしょうか 厳密には 未入力 DELE SPACE すべて 空白でいいのですが 数字のゼロに 置き換えると ゼロの時に おかしくなりそうで・・・

  • エクセル VBA

    エクセル VBA 指定セルがNULLじゃない場合、セルを横に1つずつずらしていきNULLのセルで抜けるVBを作りたいです。 Do Until IsNull???? loop

  • セルの値が「#VALUE!」の場合 vba

    セルの値が「#VALUE!」の場合、 VBAで If Cells(lastRow, Col_本体価格) = Empty Then とすると、 「実行時エラー 13 型が一致しません。」 となります。 セルの値が「#VALUE!」の場合でも、 VBAでifステートメントを使えるようにするには どうすればいいですか?

  • 【エクセル】ActiveCellはなぜNullではないのでしょうか?

    私は今まで新規のシートを挿入した際のActiveCellは、Nullだと思っていたのですが Sub Empty空白なら() If ActiveCell.Value = Empty Then Debug.Print "空白セルです" End Sub Sub Null空白なら() If ActiveCell.Value = Null Then Debug.Print "空白セルです" End Sub Sub Null空白なら2() If IsNull(ActiveCell.Value) = True Then Debug.Print "空白セルです" End Sub VBAでこのコードを実行すると Emptyの方だけ「空白セルです」となりました。 (1)なぜ空白でもNullだと反応しないのでしょうか? (2)NullとEmptyの違いはなんですか? ご教授よろしくお願い致します。

  • VBAでセルを結合

    いつもお世話になっております。 VBAで「B列に●●が入力されたら、B列から10列はなれたセルから3つ分を結合して、そのセルに××と入力する」という処理を行います。 まだ途中なんですが、こんな感じで考えています。 If B.Value = "火" Then   Range(offset0, 10),Resize(1, 3)).MergeCells = True   'ここからの処理は未定  End If マージした後にさらに値を入れるので、variantかなんかで変数を用意して、その中に入れたほうがいいかな?と考えていますが、どうでしょうか?

  • エクセル 条件を最初に満たしたセルの行の値の取得VBA

    いつもお世話になっております。 ある表においてA2以降に 2 FALSE 3 FALSE 4 FALSE 5 FALSE 6 FALSE 7 FALSE 8 FALSE 9 TRUE 10 FALSE 11 TRUE 12FALSE 13FALSE ・ ・ となっています。 上から調べて最初に”TRUE”であるセル(この場合はA9)の 行数の値(9)を取得するようなVBAはどのように記述すればよいでしょうか? 関数であればROW関数とVLOOKUP関数の組み合わせでできるのですが・・

  • excel vba 名前付きセルが存在しないとき

    あるワークシートのセルに、"_1", "_2","_3","_10"のように名前をつけています。 "_8"が見つからなかったら、ループで番号を上げていき、"_10"にたどりつくようにしたいんですが、"_8"というセルが見つからなかった時の判定方法がわかりません。 On error ではない処理を使いたいのですが、 If Range("_8") = Empty Then では実行時エラー1004 "アプリケーション定義またはオブジェクト定義のエラーです" と出ます。 Rangeオブジェクトがemptyになるわけではないんでしょうか? よい方法があれば、教えてください。

  • セルが空か0か

    VBでプログラミングをしているのですが、あるセルが空かどうかを調べるために If Cells(0,0)=Empty Then 等という風に書いたらセルA1が0と入力されているときもThen以下が処理されてしまいます、セルA1が0のときと空のときの処理を分けたいのですがどうすればいいか教えてください。

  • エクセルVBA セルの移動について

    今困っているのですが、A1~A8のセルに”あ”もしくは”い”が入ったときにB1のセルにとあるセルのリストを入力規制かけて、表示させるというVBAを作成中です。 と・・・そこまではできたのですが、希望としては、A1に文字が入った場合はセルを自動的にB1に移動させたいのです。 それと同じようにA2のときはB2、A3のときはB3にセルを持って行きたいのですが、どうしたらいいでしょうか。 どなたかわかる方、よろしくお願いいたします。 For i = 1 To 8 Select Case Cells(i, 1) Case "あ" Cells(i, 2).Activate Application.CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$F$1:$F$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Case "い" Selection.Cells(i, 2).Activate CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$G$1:$G$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Enxt End Sub

  • VBAでコメントにセルの値の設定

    VBAでコメントにセルの値や変数の値を設定する処理はあるのですか? よろしくお願いします。