• ベストアンサー

セルが空か0か

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

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

Emptyを数値と比較すると、0にキャストされます。以下を実行すると分かりやすいかも。 Debug.print CLng( Empty ) 本当にセルの値が空かを調べたいなら、こうかしら: If IsEmpty( Range("A1").Value ) Then

adon0r
質問者

お礼

解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

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

IsEmpty()関数がVBAにあり、()内に数・数式・文字列式を書きます。ですから()内に、セルの値を表現する式Cells(1,1).Value を書けます。 なお質問の If Cells(0,0)=Empty Then の  Cells(0,0)ですが Sub test02() MsgBox Cells(1, 1).Value MsgBox Cells(0, 0).Value End Sub の MsgBox Cells(0, 0).Value はエラーになりました。Offsetと違い、これは見たことない。

全文を見る
すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.3

Private Sub CommandButton1_Click()   If Len(Range("A1") & "") = 0 Then     MsgBox "Cells(0, 0) is empty!"   End If End Sub 私は、Len関数での判定で統一しています。

全文を見る
すると、全ての回答が全文表示されます。
  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

Excel VBAですよね。 VisualBasicはかなり経験がありますがExcel VBAは仕事で最近始めました。 If Sheets(0).Range("A1")="" Or Sheets(0).Range("A1")=0 then   MsgBox "A1は値なしかゼロです",vbokonly End If でどうでしょうか? 今手元にExcelがないので、スペルが間違っているかもしれませんが…

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA スペースが入力されていても、空白セルと判断する方法

    VBAで、空白ではないときに処理するようなマクロを組みたいのですが、空白のはずのセルにスペースが入っている場合があり、 IF cells(i,j)<>empty then のような記述では、スペースが入力されているセルも該当してしまいます。 スペースのみのセルを消去するか、それか、数値か文字列の何かが入力されていることを判断するような方法はありますか? よろしくお願いします。

  • セルの値が0はクリアするマクロ

    エクセル2003です。 ある集計表において 4行目のH列からAM列まで 数値データがあります。 最終行は常に変化します この表内にてセルの値が0のセルは セル内を空白にしたいです。 以下のマクロを作成しましたが If Cells(処理行, 8).Value = 0 Then Cells(処理行, 8).ClearContents をあと(処理行, 13)から(処理行,31) まで記述しなければなりません。 構文的にも処理的にも不利? と思うので、なにかいい方法を教えてください。 Sub 数字0クリア() '2012年2月3日節分 Dim 最終行 '最終列をG列で求めます 最終行 = Cells(Rows.Count, 7).End(xlUp).Row Application.ScreenUpdating = False For 処理行 = 4 To 最終行 If Cells(処理行, 8).Value = 0 Then Cells(処理行, 8).ClearContents End If If Cells(処理行, 9).Value = 0 Then Cells(処理行, 9).ClearContents End If If Cells(処理行, 10).Value = 0 Then Cells(処理行, 10).ClearContents End If If Cells(処理行, 11).Value = 0 Then Cells(処理行, 11).ClearContents End If If Cells(処理行, 12).Value = 0 Then Cells(処理行, 12).ClearContents End If If Cells(処理行, 13).Value = 0 Then Cells(処理行, 13).ClearContents End If Next 処理行 Application.ScreenUpdating = True MsgBox "終了しました" End Sub

  • エクセルで空白セルを空セルに

    B1にセルをおきます。A1の内容を比較します。 if A1=0 then B1を空セルに else A1をB1に代入 endif 同様にA列の内容を比較し結果をB列に格納します。 VBAではどのように記述しますか?

  • セルが空になる値を返す関数

    エクセルでの質問です。 セルが空になるような値を返す関数はあるのでしょうか。 例えば、以下のような処理で""とすれば、空文字が入るようなのですが、完全に空白セルにはならないようです。   =IF(C1<1,C1,"") もし条件にあわなければ、グラフでプロットしないようにしたいためです。(空白セルをプロットしない) すみませんが、分かる方、教えてください。

  • VBAの考え方からVisualBasicへ

    いつもお世話になっています。 約半年ほど前よりエクセルのVBAを勉強し始めまして 機会がありVisualBasicを覚える事になりました。 会社の先輩が作ったVB6のコードを見ていたのですが やっている事が何となくわかる様なわからない様な・・・ という感じです。。 例えばエクセルでは(A1~A20までのセル)、VBでは同じようにグリッドにデータが入力してあり 選択しているセル(A1)のデータと一致するセルを含む行又はレコードを選択するという処理があったとします。(あくまでも例です) エクセルでもVBでもFor~Nextが使える事はわかったのですが 対象とする目印?的なものの(基準というか考え方というか)が理解出来ないのです・・・・。。 エクセルだとcells(rows.count,1).end(xlup).rowで最終行を取得して For~NextでIf Range("A1").value = cells(i,1).value then・・・ で処理できますがVBではどうなのかとか・・・・ (説明がめちゃくちゃですみません。。泣) 同じようにVBAからVisualBasicを始めた方! VBAでのプログラミングの考え方とVisualBasicの考え方の違いや どういう風に勉強していけば良いか等、アドバイスや経験談等を教えて頂きたいです。 宜しくお願い致します。

  • セル値

    すみません エクセルVBA勉強中のものですが、セルA1とA2がブランクだったら、セルB1に”あ”を表示するという式を作ったのですがうまく動いてくれません ご指導のほどお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(1, 1).Value <> "" & Cells(2, 1).Value <> "" Then Cells(1, 2).Value = "あ" End If End Sub

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

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

  • 空白セルの記述方法

    Excel VBAで日付データがA列、通貨データがB列にあるとして シート1のセル(A:1)、セル(B:2)が空白セルとして条件式を作りたいのですが記述方法はどのようになりますか? 下記でよろしいでしょうか? If CDate(sheet1.cell(A:1).value) = Empty then If CCur(sheet1.cell(B:1).value) = Empty then

  • エクセルのマクロ。セルの値により複数条件分岐を

    皆様 よろしくお願いします。 エクセルで社内で使っている現金出納帳がありまして。 D6セルから下方向に数字・日本語アルファベット混在して 入力されています。 例「1月13日 現金売上」 「2月13 切手代」 「3月31日 食事料金」 といった具合です。 そのセルの内容を判断して G6セルから下方向に 該当する数字を書きこむべく 以下のようなマクロを作っています。 条件はもっと増えてきた場合に 一個一個条件を書き足すと膨大なマクロになってくると思いまして スマートな書き方がございましたら ご指導くださると助かります。 Sub 科目自動入力() Dim a As Integer a = 6 '内容が空白になるまで繰り返す Do Until Cells(a, 4).Value = "" '「売上」が含まれていたら700 If Cells(a, 4).Value Like "*売上*" Then Cells(a, 7).Value = 700 '「切手」もしくは「レター」が含まれていたら756 If Cells(a, 4).Value Like "*切手*" Or Cells(a, 4).Value Like "*レター*" Then Cells(a, 7).Value = 756 '「残業」もしくは「食事」が含まれていたら746 If Cells(a, 4).Value Like "*残業*" Or Cells(a, 4).Value Like "*食事*" Then Cells(a, 7).Value = 746 '「旅費」もしくは「交通費」が含まれていたら755 If Cells(a, 4).Value Like "*旅費*" Or Cells(a, 4).Value Like "*交通費*" Then Cells(a, 7).Value = 755 a = a + 1 Loop End Sub

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range   ActiveSheet.Copy after:=ActiveSheet   For idx = Range("A65536").End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, "A"), Chr(10)) > 0 Then       wkStr = Split(Cells(idx, "A").Value, Chr(10))       Set rng = Cells(idx, "B")       For cnt = UBound(wkStr) To 0 Step -1         Cells(idx, "A").Value = wkStr(cnt)         Cells(idx, "B").Value = rng.Value         Cells(idx, "C").Value = rng.Offset(0, 1).Value         If cnt > 0 Then           Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown         End If       Next cnt     End If   Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。