ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのfindメソッドのNothingエラー

  • mixiチェック
  • このエントリーをはてなブックマークに追加
findメソッドのエラーの質問です。
つぎのサンプルでBは動くのですが、AはNothingになってしまいました。

(サンプルA)
Dim myrange As Range
Dim sagasu As String
sagasu = ooxx
Set myrange = Worksheets("未処理").Range("AE:AE").Find(what:=sagasu)
(サンプルB)
Dim list_name As String
Dim myrange As Range
list_name = ListBox1.List(intIndex)
Set myrange = Worksheets("登録").Range("b:b").Find(what:=list_name)
この2つを比べると、 Range("AE:AE") のところが大文字になっているだけの違いのようです。それで、小文字に変えたところ、ちゃんと動いてくれたのですが、一回閉じてまた立ち上げたら、またエラーになってしまいました。こんどはお手上げです。
誰か、考えられる原因が分かる人がいましたらよろしくお願いします顔(願)

コメント(6)

検索条件(引数)を指定する。

指定しないと、最後の検索条件が使われ、それには手で検索したときのものも使われます。アドレス指定は無関係。(^_^)
>Sedvicious さま
>藤代千尋 さま

どうも有り難うございます。
仰る通りにやってみましたが、ダメでした。やっぱり、Nothing になります。

プログラム全体を書きますが。
下記の中で、sagasu = kamoku & list_name (デバッグの時にカーソルを置いたときに出る値・・・具体的には、kamoku="sss"、list_name="vvv" の時、sagasu ="sssvvv")としていたため、試しに & を使わず、sagasu = kamoku (つまり"sss")としたとき、エラーは起こりませんでした。
しかし、myrange の中身は、kamoku & list_name の時に指定していた値("sssvvv")が出てきました。
これはおかしいので、前のデータが消えていないのかもしれません。
(myrangeが範囲名で入っているのかと思ったらkamokuに入っている値と同じ値で入っていたというのも気になりますが・・・例えば、kamoku="eee"の時、myrange="eee"となっている・・・$AE$4とかでなく)
ループを使っているので、それが、エラーの原因なのでしょうか。

少しづつ検証していこうかと思いますが、もし、一目で見てこれはおかしいというところ、或いはヒント等があれば、教えて頂ければ有り難いです。

-------------------------------------------------------
ユーザーフォームの中のリストボックスに入れたコードです。(リストボックスの項目を選択したときに発生するイベントの処理)

Private Sub ListBox2_Click()
Dim intIndex As Integer
Dim list_name As String 'リストボックスで選択された項目
Dim myrange As Range   'sagasu に対応するセル(の場所)
Dim kamoku As String  '文字
Dim sagasu As String '文字
kamoku = Label_B.Caption
Dim ri As String 'セルの中の値(数値)
Dim si As String '同上

For intIndex = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(intIndex) = True Then
list_name = ListBox2.List(intIndex)
Label_L.Caption = list_name '同じユーザーフォームの中のラベルに表示させる
sagasu = kamoku & list_name

Set myrange = Worksheets("未処理").Range("ae:ae").Find(what:=sagasu, LookAt:=xlPart, MatchCase:=False, MatchByte:=False)

ri = myrange.Offset(0, -2).Value 'myrange の場所を基準にセルを参照して導き出される数値
si = myrange.Offset(0, -1).Value
If kamoku = "xxx" Or kamoku = "ooo" Then
Label_Z.Caption = ri - si
Else
Label_Z.Caption = si - ri  '導き出された数値を同じラベルに表示
End If
End If
Next intIndex
End Sub

(Excelは2003です)
> しかし、myrange の中身は、kamoku & list_name の時に指定していた値("sssvvv")が出てきました。
> これはおかしいので、前のデータが消えていないのかもしれません。

前のデータが消えていないのではないと思います。
FindメソッドでパラメータLookAtをxlPartにしているわけですから、「対象範囲において変数kamokuの値を含む最初のセルを探している」ことになると思います。
したがって最初に見つかったセルがたまたま「sssvvv」だっただけだと思います。

さてこのコードのままでは、たとえFor...Nextでループさせても、検索対象範囲(AE列)で"最初に"見つかったセルがmyrangeの値になってしまいます。
変数kakmokuの値を含む"すべてのセル"を抜き出したいのであれば、FindNextや他の方法を考える必要があると思います。

もしそのように考えているならば「excel vba find 複数」で検索すれば良いと思います。
>Yujin さま

ありがとうございます。

確かに・・・(AE列)の中身は

sssvvv
ssswww
sssxxx
sssyyy
・・・

のようになっているので、「sss」を含む一番初めの値は「sssvvv」になりますね。

実際エラーでないときに、ユーザーフォームの中のリストボックスの選択肢を変えても「sssvvv」しか表示されません。ということは、仰るとおりですね。




まだまだ道のりは長そうです。

とりあえず、皆様の意見を参考にしながら色々調べていきたいと思います。質問のポイントが、今の状態では、あまりにも広すぎる事態になりましたので、またポイントが絞られ、それでも解決できない時に皆様にお世話になりたいと思います。皆様のおかげで1つ賢くなりました。有り難うございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。