• 締切済み

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

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

みんなの回答

回答No.5

こんにちは。 >Rangeオブジェクトがemptyになるわけではないんでしょうか? Range のEmpty というのは、何も入っていない、Variant型の空の意味で、Value値では、""(長さ0の文字列)と同等です。そのコードは、存在しないものを探しているのですから、エラーそのものになります。 しかし、ある程度熟練したVBAプログラマーは、名前定義を使いません。それは、VBAでは見失うことがあるのです。見失ってしまうと、VBAでは、取り出せなくなるからです。理由ははっきりしませんが、バグの一種があります。 以下は、あまり実用的ではない内容ですが、レベルとしては、VBAの学習をひと通り終わったレベルです。 '// Sub Test1() Dim i As Long Dim cnt As Long Dim dum As Variant 'ダミー cnt = 10 '探す最後の名前 For i = 1 To cnt    On Error Resume Next    dum = ActiveWorkbook.Names("_" & i)    If dum = Empty Then MsgBox "Missing Name '_" & i & " '"    dum = Empty Next i End Sub

kusisters
質問者

お礼

なるほどなるほど、わかりました。どうもありがとうございました!

回答No.4

これがズバリでは?? 定義されている名前のリスト作れマス、、、 Excel VBA セルの名前があるか無いかを知るには? 投稿日時:2004/10/25 19:43 http://okwave.jp/qa/q1056062.html

回答No.3

定義されていないものは参照できない、参照すれば実行時エラーになる。 コレを避けるには、定義されている名前の一覧を作成し、これで確認できたものだけが参照できる。 2005年07月10日(日) 9時24分 定義済み名前一覧を作成する http://www.relief.jp/itnote/archives/001367.php

回答No.2

コレでは? Excel: SetステートメントでRangeオブジェクトに名前付きセルを指定したい http://qanda.rakuten.ne.jp/qa790276.html

kusisters
質問者

お礼

ありがとうございました。 上記のリンクも参照しました。 range("_1")で参照できる(セルが見つかる)ことは確認しましたが、range("_8")というセルが存在しないとき、存在の有無を判定する良い方法はないのかなー、と思ったわけなんです。

noname#256148
noname#256148
回答No.1

If Range("_8") = Empty Then・・・セル位置を指定してないのでダメです。 If Range("F1").Value <> "_8" Then If Range("F1").Text <> "_8" Then お試し下さい。

kusisters
質問者

お礼

ありがとうございました。 でも、セル内容をチェックしたいわけではなくて、"_8"という名前のセルを探しに行きたいんです...

関連するQ&A

  • EXCELのVBAでセル値の移動でエラー

    EXCEL2002のVBAでセル値の移動をVBAでやりたいのですが (1)の様に1行は出来るのですが、(2)の様に2行を移動させるとエラー (実行時エラー1004 アプリケーション定義またはオブジェクト定義のアラーです。)が出てしまいます。 (2)のマクロでどうしてエラーが出るのか分かりません。 エラーを出さずに2行目を移動させる方法を教えてください。 (1)_________________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value datachn = Range("L1").Value End If (2)_______________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value Cells(2, i + 13).Value = Cells(2, i + 12).Value ←ここでエラー i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value Cells(2, 13).Value = Range("L2").Value datachn = Range("L1").Value End If

  • VBAでセル範囲の「名前の定義」の有無を取得

    エクセルのセル範囲(結合セル)にいろいろな名前を定義してあります。 名前の定義されたセル範囲を変更した場合、マクロが動くようにしたいのです。 ところが、名前の定義のないセルを変更すると 「実行時エラー1004、アプリケーション定義またはオブジェクトの定義のエラーです」 になってしまいます。 一応、下記のような方法で解決はできましたが、エラーで判断するのではなく、名前の定義の有無を取得して分岐させるのが正しい?やりかたなのではと思います。 ご教示いただけましたら幸いです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim x As String On Error Resume Next x = Target.Cells(1).Name.Name On Error GoTo 0 If x = "" Then Exit Sub Select Case Target.Cells(1).Name.Name Case "住所" Range("送付先住所").Value = Target.Value Case "氏名" Range("送付先氏名").Value = Target.Value End Select End Sub

  • Excel VBA If文の処理について

    Excel VBA If文の処理方法で質問です。 http://www.sigoto.co.jp/excel/statement/state09.htm を参考にしながら作ってます。 ▲空白なら の方法は記載されていますが… If 要素.Value = Empty Then ~ ▲セルに(文字・数値に関係なく)情報があるなら… という定義をしたいのですがどうやればよろしいでしょうか? If 要素.Value != Empty Then ~ これだとエラーが返りました。VBAは (※Else以外の方法で) 否定文の処理方法ってありますか? *内容抜粋* Set cell = Range("G5:I9") If cell.Value = "" Then '…ここの定義どうやれば良いか? ・ ・ End If アドバイスよろしくお願い致します。

  • エクセルVBAでのセルの扱い

    If Cells(retsu(n) + 3, zentai(n)).Value + 10 < Cells(retsu(n) + 3, zentai(n) + gyou(n)).Value Then 二つのセルの大きさを比較する分を作ったのですが、オブジェクトの定義エラーと表示されます。いったいどこがだめだかさっぱりわからないのですが、皆さんの知恵を貸してください。。

  • Excel VBA セルの名前があるか無いかを知るには?

    Excelのセル範囲に名前をつけています。 VBAで、Worksheetに名前"牛丼"が無ければ、処理をスキップしたいのですが、存在の有無を知る方法はあるでしょうか? if 0 < Range("牛丼").column then ... ' これはダメでした(TT) .Worksheet.Name はシート名のようですし...

  • Do While中のVBAアプリケーション定義エラー

    Win2000、Excel2000で作業をしています。 無限ループで、Sheet1を監視し、特定のセルに「1」が入ったら別のセルの内容を変更すると言うものです。 ここで、何度目かに「1004)アプリケーション定義またはオブジェクト定義のエラーです」とでます。 (テストのため、(1,5)のセルに何か書き込み、(1,3)に1を入れるというのを繰り返していると、(1,5)に書き込んだ時に出る。) Do While True If Sheet1.Cells(1, 3) = "1" Then Sheet1.Cells(1, 5) = "" Sheet1.Cells(1, 6) = "0" End If DoEvents Loop ハイライトもしなくて、どこで落ちているのかわからず困っています。 ちなみに、1をvalで見ても同じで、1秒ごとに見ても同じでした。 どなたか原因の心当たりのあるから、ご助力お願いいたします。

  • エクセル VBA セル範囲の一部解除

    rangeオブジェクト型変数にセル範囲を代入した後、一部のセルを解除したいのです。 グラフを描くためにc列とE列をデータに散布図を描こうとしてます。セル範囲の選択はrange型変数に代入しました。しかしゼロ以下の値のセルは削除したいのです。 for each c in datacell if c.value <0 then c.value="" next c 上記のようにすると目的は達しますが、ワークシート上の値も削除されてしまい、好ましくありません。良い方法はないでしょうか?

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

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

  • エクセルVBAでセルのクリックイベントについて

    エクセルのVBAでDo Whileループの中で,いずれかのセルがクリック され(アクティブ)になったことを知る方法が分かりません。 調べたいセルの個数は数十個で,セルのクリックを連続的に行い, その度に,ある操作を行いたいのです。 Do while flag=true   if ActiveCell.Address="A1" then ****   if ActiveCell.Address="A2" then ****   if ActiveCell.Address="A3" then ****   (これをいくつか記述)   (ループから抜け出る記述) loop これだと,無限ループに陥ってしまいます。 どなたか,お知恵をお貸しください。

  • VBA 結合セルの値を削除

    マクロ超初心者です。 C7~K7が結合されたセルの値を削除したいです。(値はC7に入力されています) Range("C7").MergeArea.ClearContents で実行してみたところ 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と出てきます。 セルの書式設定をみてみると、保護/ロックにチェックが入っておりました。もしかしたらこれが悪さをしているのでしょうか。 分かりにくくて申し訳ありませんが、知恵を貸していただけたら助かります。よろしくお願いいたします。

専門家に質問してみよう