"" 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 ">

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



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

メーカー名:関連性無し
OSに関係無し
パソコン名:不明
--
お疲れ様です。
以前の質問が過去ログ落ちしたようなので、
もう一度質問させて頂きます。お願いします。
(記事番号 3701)

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

そして、マクロを使うことにしました。
以下のソースは自分が調べたものをo2kaさんが作り直してくれたものです。
で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。
お願いします。

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

▲このページのトップに戻る
4070Re:続編☆エクセルのオブジェクト内の文字列検索についてです。がみかみ 6/5-10:21
記事番号4069へのコメント
がみかみさんは No.4069「続編☆エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>お疲れ様です。
>以前の質問が過去ログ落ちしたようなので、
>もう一度質問させて頂きます。お願いします。
>(記事番号 3701)
>
>エクセルではセル内の普通の文字列に関しては検索可能でありますが、
>オブジェクト(例えばテキストボックス)内の
>文字列検索はできるのでしょうか?
>自分でもヘルプ等で確認しましたが、
>いまいちできるのかどうか、定かでありません。
>プラグインなどのソフト等使えば検索可能になったりするのかどうか、
>ご存知の方教えてください。お願いします。
>
>そして、マクロを使うことにしました。
>以下のソースは自分が調べたものをo2kaさんが作り直してくれたものです。
>で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
>そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。
>お願いします。
>
>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
>

前回はDiscoveryさん、o2kaさん、Reiさんにご協力頂きました。
ありがとうございます。

▲このページのトップに戻る
4073Re:続編☆エクセルのオブジェクト内の文字列検索についてです。がみかみ 6/5-10:27
記事番号4070へのコメント
がみかみさんは No.4070「Re:続編☆エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>がみかみさんは No.4069「続編☆エクセルのオブジェクト内の文字列検索についてです。」で書きました。
>>お疲れ様です。
>>以前の質問が過去ログ落ちしたようなので、
>>もう一度質問させて頂きます。お願いします。
>>(記事番号 3701)
>>
>>エクセルではセル内の普通の文字列に関しては検索可能でありますが、
>>オブジェクト(例えばテキストボックス)内の
>>文字列検索はできるのでしょうか?
>>自分でもヘルプ等で確認しましたが、
>>いまいちできるのかどうか、定かでありません。
>>プラグインなどのソフト等使えば検索可能になったりするのかどうか、
>>ご存知の方教えてください。お願いします。
>>
>>そして、マクロを使うことにしました。
>>以下のソースは自分が調べたものをo2kaさんが作り直してくれたものです。
>>で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
>>そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。
>>お願いします。
>>
>>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
>>
>
>前回はDiscoveryさん、o2kaさん、Reiさんにご協力頂きました。
>ありがとうございます。

Cells.FindNext(After:=ActiveCell).Activateとかを
記録したら出たので使うのかと思いました。
けど、それをどう使うのかもわかっていません。

▲このページのトップに戻る
4104Re:続編☆エクセルのオブジェクト内の文字列検索についてです。o2ka 6/5-21:16
記事番号4069へのコメント
>で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
>そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。

最初から hitしたオブジェクトを選択するようにはなっています。
メッセージボックスを閉じないとシート上に制御が返されないので
編集が出来ないだけです。

で、inputboxを使用して「制御がシートに帰らないでも編集ができる」ような
サンプルを作成してみました。

1) どこが選択されているかがわかるように、選択されたオブジェクトを黄色く塗る

途中途中に入る「ActiveWindow.SmallScroll Down:=0」は、オブジェクトへの
変更(黄色くしたり、白に戻したり)が即座に反映されないために、苦肉の策として
入れました。

2) メッセージボックスをinputboxに変更し、テキストが入れられた場合
  そのテキストを選択されたオブジェクトに代入

あらかじめ「ss = Selection.Text」としておいてもinputboxでは
テキスト欄がクリアされてしまうので、初期値をセットする事ができませんでした。
もっと良い方法が見つかったら、ゼヒ教えてください。

では、GoTo Source

# 「プログラミング同好会」が再開していれば、そっちに投げたい・・・

▲このページのトップに戻る
4106Sourceo2ka 6/5-21:17
記事番号4104へのコメント
Sub Test3()
 Dim shp As Object
 Dim s As String
 Dim i As Integer
 Dim ss As String

 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
     On Error Resume Next
     GoTo RAST
    End If
    shp.Select
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13
    ActiveWindow.SmallScroll Down:=0
    ss = InputBox("「" & shp.Text & "」が " & shp.Name & " の中に見つかりまし
た。 変更するテキストを入れてください。")
    If ss <> "" Then
     Selection.Text = ss
    End If
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 9
    If MsgBox("次を検索しますか?", vbYesNo) = vbNo Then Exit Sub
    i = i + 1
   End If

RAST:

  Next shp

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

▲このページのトップに戻る
4157Re:続編☆エクセルのオブジェクト内の文字列検索についてです。がみかみ 6/6-16:49
記事番号4104へのコメント
o2kaさんは No.4104「Re:続編☆エクセルのオブジェクト内の文字列検索についてです。」
で書きました。
>>で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに
>>そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。
>
>最初から hitしたオブジェクトを選択するようにはなっています。
>メッセージボックスを閉じないとシート上に制御が返されないので
>編集が出来ないだけです。
>
>で、inputboxを使用して「制御がシートに帰らないでも編集ができる」ような
>サンプルを作成してみました。
>
>1) どこが選択されているかがわかるように、選択されたオブジェクトを黄色く塗る
>
>途中途中に入る「ActiveWindow.SmallScroll Down:=0」は、オブジェクトへの
>変更(黄色くしたり、白に戻したり)が即座に反映されないために、苦肉の策として
>入れました。
>
>2) メッセージボックスをinputboxに変更し、テキストが入れられた場合
>  そのテキストを選択されたオブジェクトに代入
>
>あらかじめ「ss = Selection.Text」としておいてもinputboxでは
>テキスト欄がクリアされてしまうので、初期値をセットする事ができませんでした。
>もっと良い方法が見つかったら、ゼヒ教えてください。
>
>では、GoTo Source
>
># 「プログラミング同好会」が再開していれば、そっちに投げたい・・・

ありがとうございます。
テストしてみます。
もっと良い方法と言われても考えることらできません。
イメージをコーディングできないものですから。

▲このページのトップに戻る
4182もっと良い方法o2ka 6/6-21:57
記事番号4157へのコメント
>もっと良い方法と言われても考えることらできません。

表示されるinputboxに、最初から値が入っていたほうが、「ちょこっと変える」場合に
楽ですよね。

で、http://www.asahi-net.or.jp/~zn3y-ngi/YNxv20008.html
というページを見つけました。

前回のソースの

ss = InputBox("「" & shp.Text & "」が " & shp.Name & " の中に見つかりました。 変更するテ
キストを入れてください。")

の行を

ss = InputBox("「" & shp.Text & "」が " & shp.Name & " の中に見つかりました。 変更するテ
キストを入れてください。", shp.Name, shp.Text)

のように変更すると、いい感じになりました。

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

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

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

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


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

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

参考回数投稿日時何か一言