続編☆エクセルのオブジェクト内の文字列検索についてです。
◇-続編☆エクセルのオブジェクト内の文字列検索についてです。-がみかみ(6/5-10:19)No.4069 ┣Re:続編☆エクセルのオブジェクト内の文字列検索についてです。-がみかみ(6/5-10:21)No.4070 ┃┗Re:続編☆エクセルのオブジェクト内の文字列検索についてです。-がみかみ(6/5-10:27)No.4073 ┗Re:続編☆エクセルのオブジェクト内の文字列検索についてです。-o2ka(6/5-21:16)No.4104 ┣Source-o2ka(6/5-21:17)No.4106 ┗Re:続編☆エクセルのオブジェクト内の文字列検索についてです。-がみかみ(6/6-16:49)No.4157 ┗もっと良い方法-o2ka(6/6-21:57)No.4182
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
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 |
▲このページのトップに戻る
4070 | Re:続編☆エクセルのオブジェクト内の文字列検索についてです。 | がみかみ | 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さんにご協力頂きました。 ありがとうございます。 |
▲このページのトップに戻る
4073 | Re:続編☆エクセルのオブジェクト内の文字列検索についてです。 | がみかみ | 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とかを 記録したら出たので使うのかと思いました。 けど、それをどう使うのかもわかっていません。 |
▲このページのトップに戻る
4104 | Re:続編☆エクセルのオブジェクト内の文字列検索についてです。 | o2ka | 6/5-21:16 |
記事番号4069へのコメント >で少し欲張りなんですが、検索ヒット数が複数ある場合、ヒットするたびに >そこのオブジェクトにカーソルがいくようにするにはどうしたらいいでしょうか。 最初から hitしたオブジェクトを選択するようにはなっています。 メッセージボックスを閉じないとシート上に制御が返されないので 編集が出来ないだけです。 で、inputboxを使用して「制御がシートに帰らないでも編集ができる」ような サンプルを作成してみました。 1) どこが選択されているかがわかるように、選択されたオブジェクトを黄色く塗る 途中途中に入る「ActiveWindow.SmallScroll Down:=0」は、オブジェクトへの 変更(黄色くしたり、白に戻したり)が即座に反映されないために、苦肉の策として 入れました。 2) メッセージボックスをinputboxに変更し、テキストが入れられた場合 そのテキストを選択されたオブジェクトに代入 あらかじめ「ss = Selection.Text」としておいてもinputboxでは テキスト欄がクリアされてしまうので、初期値をセットする事ができませんでした。 もっと良い方法が見つかったら、ゼヒ教えてください。 では、GoTo Source # 「プログラミング同好会」が再開していれば、そっちに投げたい・・・ |
▲このページのトップに戻る
4106 | Source | o2ka | 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 |
▲このページのトップに戻る
4157 | Re:続編☆エクセルのオブジェクト内の文字列検索についてです。 | がみかみ | 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) のように変更すると、いい感じになりました。 |
何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり
参考 | 回数 | 投稿日時 | 何か一言 |
---|