エクセルのオブジェクト内の文字列検索についてです。



◇-エクセルのオブジェクト内の文字列検索についてです。-がみかみ(5/31-19:52)No.3701
 ┗Re:エクセルのオブジェクト内の文字列検索についてです。-Discovery(6/1-00:05)No.3718
  ┗Re:エクセルのオブジェクト内の文字列検索についてです。-がみかみ(6/1-12:03)No.3756
   ┗動作未確認-o2ka(6/1-14:38)No.3760
    ┗直リンクダメですね-o2ka(6/1-14:52)No.3763
     ┗Re:直リンクダメですね-がみかみ(6/1-15:12)No.3765
      ┗リンクのクリックが駄目-o2ka(6/1-15:19)No.3767
       ┗Re:リンクのクリックが駄目-がみかみ(6/1-15:25)No.3769
        ┗Re:リンクのクリックが駄目-がみかみ(6/1-15:36)No.3771
         ┣Re:リンクのクリックが駄目-Rei(6/1-21:02)No.3782
         ┣Re:リンクのクリックが駄目-Discovery(6/2-00:39)No.3800
         ┗バージョンアップ-o2ka(6/2-01:29)No.3805
          ┗インデントが飛んじゃった-o2ka(6/2-01:34)No.3807
           ┗Re:インデントが飛んじゃった-がみかみ(6/3-09:32)No.3918
            ┗自分では-がみかみ(6/3-09:36)No.3919

▲このページのトップに戻る
3701エクセルのオブジェクト内の文字列検索についてです。がみかみ 5/31-19:52

メーカー名:関連性なし
OS名:Windows98
パソコン名:不明
ソフト名:
--
こんばんわ。
エクセルではセル内の普通の文字列に関しては検索可能でありますが、
オブジェクト(例えばテキストボックス)内の
文字列検索はできるのでしょうか?
自分でもヘルプ等で確認しましたが、
いまいちできるのかどうか、定かでありません。
プラグインなどのソフト等使えば検索可能になったりするのかどうか、
ご存知の方教えてください。お願いします。

▲このページのトップに戻る
3718Re:エクセルのオブジェクト内の文字列検索についてです。Discovery 6/1-00:05
記事番号3701へのコメント
がみかみさんは No.3701「エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>OS名:Windows98
>パソコン名:
>ソフト名:
>こんばんわ。
>エクセルではセル内の普通の文字列に関しては検索可能でありますが、
>オブジェクト(例えばテキストボックス)内の
>文字列検索はできるのでしょうか?
>自分でもヘルプ等で確認しましたが、
>いまいちできるのかどうか、定かでありません。
>プラグインなどのソフト等使えば検索可能になったりするのかどうか、
>ご存知の方教えてください。お願いします。
>

VBA使えば可能かな?

▲このページのトップに戻る
3756Re:エクセルのオブジェクト内の文字列検索についてです。がみかみ 6/1-12:03
記事番号3718へのコメント
Discoveryさんは No.3718「Re:エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>がみかみさんは No.3701「エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>>OS名:Windows98
>>パソコン名:
>>ソフト名:
>>こんばんわ。
>>エクセルではセル内の普通の文字列に関しては検索可能でありますが、
>>オブジェクト(例えばテキストボックス)内の
>>文字列検索はできるのでしょうか?
>>自分でもヘルプ等で確認しましたが、
>>いまいちできるのかどうか、定かでありません。
>>プラグインなどのソフト等使えば検索可能になったりするのかどうか、
>>ご存知の方教えてください。お願いします。
>>
>
>VBA使えば可能かな?

自分ではマクロ組めないので検索してそういうマクロを見つけてきました。
でも下記のマクロだと、
シート内においてオブジェクトがテキストボックスのみだと
検索可能なんですが、矢印などのオブジェクトがシート内にあると、
そこを検索で見に行ったときに、

実行時エラー'438':
オブジェクトは、このプロパティーまたはメソッドをサポートしていません。

とエラーが出てしまいます。

このエラーを回避して矢印などのオブジェクトがシート内に存在しても、
引き続いて検索可能になるようにするにはどうしたらいいんでしょうか?
どうか教えてください。お願い致します。


Sub Test3()

 Dim shp As Object

 Dim s As String

On Error GoTo RAST
 
 s = InputBox("検索する文字列を入力して下さい")

 If s = "" Then Exit Sub

  For Each shp In ActiveSheet.DrawingObjects

   If InStr(1, shp.Text, s, 1) Then

    shp.Select

    MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"

    If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub

   End If

RAST:

  Next shp
 
  MsgBox "「" & s & "」は見つかりませんでした。"

End Sub

▲このページのトップに戻る
3760動作未確認o2ka 6/1-14:38
記事番号3756へのコメント
「If InStr(1, shp.Text, s, 1)」でエラーが発生しているんですよね?

http://www.geocities.co.jp/SiliconValley-SanJose/9236/subdoc2/0214.htm
を参考にすると、

  On Error Resume Next
>   If InStr(1, shp.Text, s, 1) Then
>
>    shp.Select
>
>    MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
>
>    If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
>
>   End If
   On Error GoTo 0

こんな感じになるのかな?
動作は未検証(確認できる環境が無い)なので、ホントにこれで動くのかは知りません。

http://www.gld.mmtr.or.jp/~kunosk/home/excel/excel6.htm
命令の意味はこちらでご確認ください。

キーワード「VBA "On Error"」でinternet上を検索すれば、他の手法もみつかります。

▲このページのトップに戻る
3763直リンクダメですねo2ka 6/1-14:52
記事番号3760へのコメント
>http://www.geocities.co.jp/SiliconValley-SanJose/9236/subdoc2/0214.htm
>を参考にすると、

直リンク駄目ですね。

http://www.geocities.co.jp/SiliconValley-SanJose/9236/
から入って、「初級編」の「データ操作」で一番上の
「0214 重複しないユニークなデータを取り出したい。
(No.0159〜No.161でやりましたが、究極?の方法)」
です。

▲このページのトップに戻る
3765Re:直リンクダメですねがみかみ 6/1-15:12
記事番号3763へのコメント
o2kaさんは No.3763「直リンクダメですね」で書きました。
>>http://www.geocities.co.jp/SiliconValley-SanJose/9236/subdoc2/0214.htm
>>を参考にすると、
>
>直リンク駄目ですね。
>
>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>から入って、「初級編」の「データ操作」で一番上の
>「0214 重複しないユニークなデータを取り出したい。
>(No.0159〜No.161でやりましたが、究極?の方法)」
>です。

>「If InStr(1, shp.Text, s, 1)」でエラーが発生しているんですよね?
その通りです。

すいません。会社からだとそこのページは規制がかかっているようで
見れません。貼り付けてもらえませんか?

私は
>キーワード「VBA "On Error"」でinternet上を検索すれば、他の手法もみつかります。
こちらを試して見ます。

▲このページのトップに戻る
3767リンクのクリックが駄目o2ka 6/1-15:19
記事番号3765へのコメント
>>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>
>すいません。会社からだとそこのページは規制がかかっているようで
>見れません。貼り付けてもらえませんか?

http://www.geocities.co.jp/SiliconValley-SanJose/9236/

をコピーして、Ieを開いたアドレス欄に貼り付けてください。

# 何で、ジャンプだとダメなんだろう?

▲このページのトップに戻る
3769Re:リンクのクリックが駄目がみかみ 6/1-15:25
記事番号3767へのコメント
o2kaさんは No.3767「リンクのクリックが駄目」で書きました。
>>>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>>
>>すいません。会社からだとそこのページは規制がかかっているようで
>>見れません。貼り付けてもらえませんか?
>
>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>
>をコピーして、Ieを開いたアドレス欄に貼り付けてください。
>
># 何で、ジャンプだとダメなんだろう?

ごめんなさい。回答した直後に貼り付けて出来ました。

改定後の全ソースはこういうことですよね。
テストしてきます。

Sub Test3()

Dim shp As Object

Dim s As String

On Error GoTo RAST

s = InputBox("検索する文字列を入力して下さい")

If s = "" Then Exit Sub

For Each shp In ActiveSheet.DrawingObjects

On Error Resume Next
If InStr(1, shp.Text, s, 1) Then

shp.Select

MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"

If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub

End If
On Error GoTo 0

RAST:

Next shp

MsgBox "「" & s & "」は見つかりませんでした。"

End Sub


▲このページのトップに戻る
3771Re:リンクのクリックが駄目がみかみ 6/1-15:36
記事番号3769へのコメント
がみかみさんは No.3769「Re:リンクのクリックが駄目」で書きました。
>o2kaさんは No.3767「リンクのクリックが駄目」で書きました。
>>>>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>>>
>>>すいません。会社からだとそこのページは規制がかかっているようで
>>>見れません。貼り付けてもらえませんか?
>>
>>http://www.geocities.co.jp/SiliconValley-SanJose/9236/
>>
>>をコピーして、Ieを開いたアドレス欄に貼り付けてください。
>>
>># 何で、ジャンプだとダメなんだろう?
>
>ごめんなさい。回答した直後に貼り付けて出来ました。
>
>改定後の全ソースはこういうことですよね。
>テストしてきます。
>
>Sub Test3()
>
> Dim shp As Object
>
> Dim s As String
>
>On Error GoTo RAST
>
> s = InputBox("検索する文字列を入力して下さい")
>
> If s = "" Then Exit Sub
>
> For Each shp In ActiveSheet.DrawingObjects
>
> On Error Resume Next
> If InStr(1, shp.Text, s, 1) Then
>
> shp.Select
>
> MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
>
> If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
>
> End If
> On Error GoTo 0
>
>RAST:
>
> Next shp
>
> MsgBox "「" & s & "」は見つかりませんでした。"
>
>End Sub
>
>
テスト結果を提出いたします。
エラーではおちなくなったのですが、
矢印オブジェクトやテキストボックスオブジェクト全てにおいて
見つかりました。と出ててしまってバージョンダウンしてしまいました。
うううぅ。

▲このページのトップに戻る
3782Re:リンクのクリックが駄目Rei 6/1-21:02
記事番号3771へのコメント
はじめまして。

がみかみさんは No.3771「Re:リンクのクリックが駄目」で書きました。

>> If InStr(1, shp.Text, s, 1) Then

の行でエラーが発生することを期待して

>>On Error GoTo RAST

この宣言により、ジャンプしようとするのならば

>> On Error Resume Next

この行は不要でしょう?

▲このページのトップに戻る
3800Re:リンクのクリックが駄目Discovery 6/2-00:39
記事番号3771へのコメント
がみかみさんは No.3771「Re:リンクのクリックが駄目」で書きました。
>がみかみさんは No.3769「Re:リンクのクリックが駄目」で書きました。
>>Sub Test3()
>>
>> Dim shp As Object
>>
>> Dim s As String
>>
>>On Error GoTo RAST
>>
>> s = InputBox("検索する文字列を入力して下さい")
>>
>> If s = "" Then Exit Sub
>>
>> For X = 1 To ActiveSheet.DrawingObjects.Count
If ActiveSheet.DrawingObjects(X).Name = "Text Box 1" Then
>>
>>
>> If InStr(1, shp.Text, s, 1) Then
>>
>> shp.Select
>>
>> MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
>>
>> If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
>>
>> End If
>>     End If
>> On Error GoTo 0
>>
>>RAST:
>>
>> Next X
>>
>> MsgBox "「" & s & "」は見つかりませんでした。"
>>
>>End Sub
>>
>>
>テスト結果を提出いたします。
>エラーではおちなくなったのですが、
>矢印オブジェクトやテキストボックスオブジェクト全てにおいて
>見つかりました。と出ててしまってバージョンダウンしてしまいました。
>うううぅ。
>

で限定したいのか???例えばテキストボックスとか
この場合1つだけですけど
後はワイルドカードでも使って何とかすれば
くれぐれも言って置きますが動作検証はしていませんのであしからず

▲このページのトップに戻る
3805バージョンアップo2ka 6/2-01:29
記事番号3771へのコメント
「resume」の動作を勘違いしていました。
 ↑RPGの"ITER"みたいな動きを期待していた

ってわけで、実際にExcelを入れて動作を見て、以下のように修正しました。


Sub Test3()
Dim shp As Object
Dim s As String
Dim i As Integer

i = 0

On Error Resume Next
s = InputBox("検索する文字列を入力して下さい")
If s = "" Then Exit Sub

For Each shp In ActiveSheet.DrawingObjects

If InStr(1, shp.Text, s, 1) Then
If Error <> "" Then
On Error GoTo 0
Rem MsgBox "えら"
On Error Resume Next
GoTo RAST
End If
shp.Select
MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
i = i + 1
End If

RAST:

Next shp

If (i = 0) Then
MsgBox "「" & s & "」は見つかりませんでした。"
Else
MsgBox i & "個の「" & s & "」が見つかりました。"
End If
End Sub


いかがでしょうか?

# ちなみに、「REM」の行は動作確認のために付けていた行。
# 「REM」を外すと線オブジェクトにぶつかったときに「えら」のメッセージが開く。

▲このページのトップに戻る
3807インデントが飛んじゃったo2ka 6/2-01:34
記事番号3805へのコメント
見にくいので、ソースを書き直し・・・

Sub Test3()
 Dim shp As Object
 Dim s As String
 Dim i As Integer

 i = 0

 On Error Resume Next
 s = InputBox("検索する文字列を入力して下さい")
 If s = "" Then Exit Sub

  For Each shp In ActiveSheet.DrawingObjects

   If InStr(1, shp.Text, s, 1) Then
    If Error <> "" Then
     On Error GoTo 0
Rem    MsgBox "えら"
     On Error Resume Next
     GoTo RAST
    End If
   shp.Select
   MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
   If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
    i = i + 1
   End If

RAST:

  Next shp

  If (i = 0) Then
   MsgBox "「" & s & "」は見つかりませんでした。"
  Else
   MsgBox i & "個の「" & s & "」が見つかりました。"
  End If
End Sub

▲このページのトップに戻る
3918Re:インデントが飛んじゃったがみかみ 6/3-09:32
記事番号3807へのコメント
o2kaさんは No.3807「インデントが飛んじゃった」で書きました。
>見にくいので、ソースを書き直し・・・
>
>Sub Test3()
> Dim shp As Object
> Dim s As String
> Dim i As Integer
>
> i = 0
>
> On Error Resume Next
> s = InputBox("検索する文字列を入力して下さい")
> If s = "" Then Exit Sub
>
>  For Each shp In ActiveSheet.DrawingObjects
>
>   If InStr(1, shp.Text, s, 1) Then
>    If Error <> "" Then
>     On Error GoTo 0
>Rem    MsgBox "えら"
>     On Error Resume Next
>     GoTo RAST
>    End If
>   shp.Select
>   MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
>   If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
>    i = i + 1
>   End If
>
>RAST:
>
>  Next shp
>
>  If (i = 0) Then
>   MsgBox "「" & s & "」は見つかりませんでした。"
>  Else
>   MsgBox i & "個の「" & s & "」が見つかりました。"
>  End If
>End Sub

ありがとうございます。
完璧でした。
で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。



▲このページのトップに戻る
3919自分ではがみかみ 6/3-09:36
記事番号3918へのコメント
がみかみさんは No.3918「Re:インデントが飛んじゃった」で書きました。
>o2kaさんは No.3807「インデントが飛んじゃった」で書きました。
>>見にくいので、ソースを書き直し・・・
>>
>>Sub Test3()
>> Dim shp As Object
>> Dim s As String
>> Dim i As Integer
>>
>> i = 0
>>
>> On Error Resume Next
>> s = InputBox("検索する文字列を入力して下さい")
>> If s = "" Then Exit Sub
>>
>>  For Each shp In ActiveSheet.DrawingObjects
>>
>>   If InStr(1, shp.Text, s, 1) Then
>>    If Error <> "" Then
>>     On Error GoTo 0
>>Rem    MsgBox "えら"
>>     On Error Resume Next
>>     GoTo RAST
>>    End If
>>   shp.Select
>>   MsgBox "「" & s & "」は " & shp.Name & " の中に見つかりました。"
>>   If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
>>    i = i + 1
>>   End If
>>
>>RAST:
>>
>>  Next shp
>>
>>  If (i = 0) Then
>>   MsgBox "「" & s & "」は見つかりませんでした。"
>>  Else
>>   MsgBox i & "個の「" & s & "」が見つかりました。"
>>  End If
>>End Sub
>
>ありがとうございます。
>完璧でした。
>で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
>そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。
>
>
>
Cells.FindNext(After:=ActiveCell).Activateとかを
記録したら出たので使うのかと思いました。

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言
検索投稿あり2009/04/07-21:48左記[投稿あり]クリックにて検索(逆リンク調査)します同様の質問へのリンクとなっています