Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8826 / 13644 ツリー ←次へ | 前へ→

【30904】検索について Sal 05/11/6(日) 22:44 質問[未読]
【30905】Re:検索について HiroHiro 05/11/6(日) 22:58 発言[未読]
【30906】Re:検索について Kein 05/11/6(日) 23:17 回答[未読]
【30907】Re:検索について ponpon 05/11/6(日) 23:20 発言[未読]
【30909】皆さんありがとうございます Sal 05/11/7(月) 0:06 質問[未読]
【30910】Re:皆さんありがとうございます awu 05/11/7(月) 1:23 発言[未読]
【30911】Re:皆さんありがとうございます HiroHiro 05/11/7(月) 7:09 回答[未読]
【30917】お恥ずかしい Sal 05/11/7(月) 11:05 お礼[未読]
【30930】Re:お恥ずかしい Kein 05/11/7(月) 13:04 発言[未読]
【30954】ホント ありがとうございました。 Sal 05/11/7(月) 22:02 お礼[未読]

【30904】検索について
質問  Sal E-MAIL  - 05/11/6(日) 22:44 -

引用なし
パスワード
   初心者の質問で申し訳ありません。
VBAの本を見て、セルを検索するマクロを勉強しているのですが
イマイチ上手くいきません(検索が出来たり出来なかったりします)

------- ここから -------
Sub Kensaku()
  Dim fc As Variant
  Set fc = Range("A1").CurrentRegion.Find("テスト")
  If fc Is Nothing Then
    MsgBox ("Nothing")
  Else
    MsgBox fc.Address
    fc.Select
  End If
End Sub
------- ここまで -------
このマクロを実行しても、何故か成功したりしなかったりします。
ワークシート内には必ず テスト という文字列を入れて実験しましたが
検索が成功したり失敗したりする事があり、その法則が全然わかりません。
(A1に書くと成功しやすいような気がします…)

また、これを発展させて セルを結合させた名前ボックス を取得したいと思うのですが
出来れば、そちらの方も教えて下さい。

よろしくお願いします。

【30905】Re:検索について
発言  HiroHiro  - 05/11/6(日) 22:58 -

引用なし
パスワード
   ▼Sal さん:

何も問題ないと思いますが。
CurrentRegionですので、セルの中に何か文字なり数字があり、セルが繋がっていて
そのセルの中に「テスト」と言う文字があることが条件になります。

>初心者の質問で申し訳ありません。
>VBAの本を見て、セルを検索するマクロを勉強しているのですが
>イマイチ上手くいきません(検索が出来たり出来なかったりします)
>
>------- ここから -------
>Sub Kensaku()
>  Dim fc As Variant
>  Set fc = Range("A1").CurrentRegion.Find("テスト")
>  If fc Is Nothing Then
>    MsgBox ("Nothing")
>  Else
>    MsgBox fc.Address
>    fc.Select
>  End If
>End Sub
>------- ここまで -------
>このマクロを実行しても、何故か成功したりしなかったりします。
>ワークシート内には必ず テスト という文字列を入れて実験しましたが
>検索が成功したり失敗したりする事があり、その法則が全然わかりません。
>(A1に書くと成功しやすいような気がします…)
>
>また、これを発展させて セルを結合させた名前ボックス を取得したいと思うのですが
>出来れば、そちらの方も教えて下さい。
>
>よろしくお願いします。

【30906】Re:検索について
回答  Kein  - 05/11/6(日) 23:17 -

引用なし
パスワード
   ワークシートメニューの「編集」「検索」を選択して、出てきたダイアログの
"完全に同一の・・"というところにチェックが付いていませんか ?
そのダイアログで指定する項目は、手作業で変更するなり、マクロのコードで
明確に指定しないかぎり、いつまでも設定が変わりません。なので部分一致でも
ヒットするように

Set fc = Range("A1").CurrentRegion.Find("テスト", , xlValues, xlPart)

というように、xlPart を引数に渡すようにすれば、たぶんヒットすると思います。

【30907】Re:検索について
発言  ponpon  - 05/11/6(日) 23:20 -

引用なし
パスワード
   ▼Sal さん:
OSとEXCELのバージョンは?

>検索が出来たり出来なかったりします>

どのような場合に検索できないのでしょうか?
詳しく書くと、原因がわかるかも。

>Range("A1").CurrentRegion

ですから、離れたところは検索できませんよ。
書き込みのある範囲なら、
Worksheets("Sheet1").UsedRangeを使ってもできます。

Winxp EXCEL2003で下記コードで検索できてます。

Sub Kensaku()
  Dim fc As Range
  Set fc = Range("A1").CurrentRegion.Find(what:="テスト", LookAt:=xlWhole)
  If fc Is Nothing Then
    MsgBox "Nothing"
  Else
    MsgBox fc.Address
    fc.Select
  End If
End Sub


>
>また、これを発展させて セルを結合させた名前ボックス を取得したいと思うのですが

Range("名前ボックスで付けた名前").Select

【30909】皆さんありがとうございます
質問  Sal E-MAIL  - 05/11/7(月) 0:06 -

引用なし
パスワード
   皆さんの暖かい回答感謝いたします。

僕は WindowsXP EXCEL2002 を利用しています。
今、色々試したのですがどうしても検索結果 Nothing が出てしまいます。
しかし成功するセルもあります。
成功するセルは A1 B1 A2 B2 です(少な!)
さっきまで C1 C2 も検索成功してた気がしますが…今やってみたら駄目になりました。

念の為 テスト という文字はワークシート内で1つだけしか書いていません。

マクロの実行方法は
ツール(T) - マクロ(M) - マクロ(M)を選んだ後
マクロ名 Kensaku を選んで 実行(R)ボタンを押しています。

現在試してるマクロは ponpon さんの
Sub Kensaku()
  Dim fc As Range
  Set fc = Range("A1").CurrentRegion.Find(what:="テスト", LookAt:=xlWhole)
  If fc Is Nothing Then
    MsgBox "Nothing"
  Else
    MsgBox fc.Address
    fc.Select
  End If
End Sub
です。

【30910】Re:皆さんありがとうございます
発言  awu  - 05/11/7(月) 1:23 -

引用なし
パスワード
   ▼Sal さん:
>成功するセルは A1 B1 A2 B2 です(少な!)

既に答えが出ているように思いますが・・・

CurrentRegion をヘルブで調べてみましょう。

A1と(縦、横、斜め)連続している範囲だけが、検索の対象です。つまりこの場合は、セルA2、B1、B2 が空きセルですとA3もC1も検索対象外に
なります。

A1からデータが連続していますか?

【30911】Re:皆さんありがとうございます
回答  HiroHiro  - 05/11/7(月) 7:09 -

引用なし
パスワード
   ▼Sal さん:
おはようございます。

貴方のコードで良いのです。
操作もその通りです。もう一度貴方のコードでテストしてみてください。
次の内容でしてみてください。

  A  B  C  D  E  F
1  A1
2    B2
3      C3  
4        D4 テスト(E4またはE5)


A1、B2、C3、D4のセルにこのように文字を入れてください(何の文字でも良いのですが)
そして「テスト」という文字をセルのE4またはE5に入れてください。
斜めでも文字が入力されたセルが繋がっていれば検索可能です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
「テスト」という文字を一旦消して、F5に「テスト」という文字を入れてください。
入力されているセルが、繋がっていないから、nothing と返ってきます。
       ~~~~~~~~~~~~~~~~~~~~~~~

これでお分かりになると思います。

【30917】お恥ずかしい
お礼  Sal E-MAIL  - 05/11/7(月) 11:05 -

引用なし
パスワード
   みなさん こんにちは。

やっとセルが繋がっているという意味がわかりました。
シート全体を空白があっても検索したかったのでこれじゃ駄目だったんですね。
で、ヘルプを見て何か無いかと探したら、いい(?)サンプルがあったので使わせてもらいました。

------- ここから -------
Sub Kensaku2()
  With Worksheets(1).Range("A1:Z256")
    Set c = .Find("テスト", LookIn:=xlValues)
    If c Is Nothing Then
      MsgBox ("Nothing")
    Else
      MsgBox c.Address
    End If
  End With
End Sub
------- ここまで -------
出来れば Range部分でA1〜Z256みたいな固定的な指定をするのではなく
普通に全体を検索するものを作りたかったんですが、勉強不足みたいですね。

そこで、最後にお聞きしたいのですが
Range やら Find 、Workbook などのプロパティやメソッドの事が
辞書(ランタイムライブラリー?)みたいになっているようなお勧めの本があったら教えて下さい。
よろしくお願いします。(HELPじゃ、探しにくくて…)
取り合えず、今から本屋に走ります。

【30930】Re:お恥ずかしい
発言  Kein  - 05/11/7(月) 13:04 -

引用なし
パスワード
   >シート全体を空白があっても検索したかった
ならば

Set c = Worksheets(1).Cells.Find("テスト")

です。
>Range やら Find 、Workbook などのプロパティやメソッドの事が
>辞書(ランタイムライブラリー?)みたいになっている
というと、オブジェクト・ブラウザのことでしょーか ?
そこには参照されているライブラリの、全オブジェクトがリストになって表示
されています。適当に選んでみると、そのオブジェクトのプロパティ・メソッド
の一覧が右側の窓にでます。さらにそこから選んで右クリックすると、メニューに
"ヘルプ"がありますから、それを選択してヘルプを調べることが出来ます。
おそらくそのやり方を覚えるだけで、必ずしも本は必要なくなると思いますが、
調べ方の好みとか、他に参考になりそうな記事とかのメリット等も考えると、
一度は本屋で探すのも無駄ではないでしょうね。
ちなみにオブジェクト・ブラウザを出すショートカットキーは、[F2]です。
VBE画面を出した状態で有効です。(こちらはExcel2000を使用)

【30954】ホント ありがとうございました。
お礼  Sal E-MAIL  - 05/11/7(月) 22:02 -

引用なし
パスワード
   VBAを知ってまだ数日しか経っていませんが、
こんな便利な機能を今まで眠らせていた事を考えるともったいない気分です。

今は日曜大工の超高級な道具を目の前にしている状況です。
やり方がわからずカンナで釘を打ったりもしますが
ちゃんと、カナヅチを見つけて釘を打てるよう勉強したいと思います。
アドバイスをして頂いた hirohiro氏 kein氏 ponpon氏 awu氏 ありがとうございました。
僕もアドバイスが出来るようになれればいいんですが…取りあえず頑張ります。

8826 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free