AKB48の推しメンをセンターにできちゃうかもしれない!? >>

過去に似たような質問があった(No.1164411)のですが、分からなかったので教えてください。

Excelでオートシェイプ内の文字列を検索するためには、Excelについている既存の検索機能では検索できないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは。


>既存の検索機能
ではできないのではないでしょうか。
シェアウェア以外でお探しであれば、VBAですが、つい最近レスしました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2107566
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
やはり、VBAなどで検索機能を強化?しなくては検索できないんですね。。

お礼日時:2006/04/24 14:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルでテキストボックス内の文字を検索したい

会社でよくエクセルを使うのですが、その中で
テキストボックス内を検索する方法がわかりません
テキストボックスを全部選択して検索をかけてもできないし、Webで方法を探したのですがみつかりません。
エクセルでテキストボックス内の文字を検索する方法を
教えて頂けませんでしょうか?

Aベストアンサー

こんにちは。
テキストボックスとは、図形のテキストボックスですか?
マクロを使わないと…ですね。…多分。
実行方法はご存知ですか?
'---------------------------------------------------------------------
Sub sample() '■まとめて表示
  Dim tb As TextBox
  Dim st As String, ans As String
  st = Application.InputBox("TextBox内で検索する文字を入力" _
    & vbLf & vbLf & "(部分一致は * 付加)")
  For Each tb In ActiveSheet.TextBoxes
    If tb.Text Like st Then
      ans = ans & tb.Name & vbLf
      tb.Select False
    End If
  Next tb
  If Len(ans) = 0 Then ans = "no data"
  MsgBox ans
End Sub
'---------------------------------------------------------------------
Sub sample1() '■1つずつ
  Dim fg As Boolean
  Dim tb As TextBox
  Dim st As Variant
  st = Application.InputBox("TextBox内で検索する文字を入力" _
    & vbLf & vbLf & "(部分一致は * 付加)")
  If VarType(st) <> vbBoolean Then
    For Each tb In ActiveSheet.TextBoxes
      If tb.Text Like CStr(st) Then
        fg = True
        tb.Select
        If MsgBox(tb.Name & " にありました。次を検索しますか?" _
          , vbOKCancel) = vbCancel Then Exit For
      End If
    Next tb
    MsgBox IIf(fg, "end", "no data")
  End If
End Sub
'---------------------------------------------------------------------

こんにちは。
テキストボックスとは、図形のテキストボックスですか?
マクロを使わないと…ですね。…多分。
実行方法はご存知ですか?
'---------------------------------------------------------------------
Sub sample() '■まとめて表示
  Dim tb As TextBox
  Dim st As String, ans As String
  st = Application.InputBox("TextBox内で検索する文字を入力" _
    & vbLf & vbLf & "(部分一致は * 付加)")
  For Each tb In ActiveSheet.TextBoxes
    If tb.Text Like st Th...続きを読む

QExcelでオートシェイプのテキストボックス内の文字列を検索するマクロ

Excelでオートシェイプのテキストボックス内の文字列を検索するマクロを探しています。
ご存知の方がいらっしゃいましたら教えていただけないでしょうか
(検索してヒットすると当該テキストボックスにジャンプするようなマクロが理想です。)

Aベストアンサー

とりあえず作成してみました。
アクティブシートに対してのみ有効で、対象はオートシェープのみです。
検索にヒットしたものが選択された状態になります。
適当にアレンジしてご利用ください。

Sub test()
Dim se As Shapes, sh() As Variant, key As String
Dim i As Integer, n As Integer, total As Integer

key = Application.InputBox(prompt:="検索する文字を入力してください。", Type:=2)
If (key = "False") Or (key = "") Then Exit Sub
Set se = ActiveSheet.Shapes
ReDim sh(0 To se.Count)
total = 0
n = 0

For i = 1 To se.Count
 If se.Item(i).Type = msoAutoShape Then
  total = total + 1
  se.Item(i).Select
  
  If Not IsError(Selection.Characters.text) Then
   If InStr(Selection.Characters.text, key) > 0 Then
    sh(n) = se.Item(i).Name
    n = n + 1
   End If
  End If
 End If
Next i

If n > 0 Then
 ReDim Preserve sh(0 To n - 1)
 se.Range(sh).Select
 key = Str(n) & "個が該当しました。"
Else
 key = "該当するものはありませんでした。"
End If
MsgBox (Str(total) & "個のAutoShapeのうち" & key)
End Sub

とりあえず作成してみました。
アクティブシートに対してのみ有効で、対象はオートシェープのみです。
検索にヒットしたものが選択された状態になります。
適当にアレンジしてご利用ください。

Sub test()
Dim se As Shapes, sh() As Variant, key As String
Dim i As Integer, n As Integer, total As Integer

key = Application.InputBox(prompt:="検索する文字を入力してください。", Type:=2)
If (key = "False") Or (key = "") Then Exit Sub
Set se = ActiveSheet.Shapes
ReDim sh(0 To se.Co...続きを読む

QExcel : テキストボックス中のテキストの検索・置換

Excelの図として貼り付けたテキストボックスにテキストが入力されていて、そのテキストボックスが数十個、シートに貼り付けられています。またそれが30シートくらいあります。

このたくさんのテキストボックスに入力されたテキストを複数のシートに渡って一括置換する方法はありませんでしょうか。

Aベストアンサー

こんばんは。Wendy02です。

ちょっとお話に興味があって、あえて修正版を作りました。

しょせん、Undoの仕組みというのは、どこかにバッファを置いているだけだと思うのです。私は、この手のものは、時々、Undoに代わるものを作ります。前のは、手抜きでしたから、今度は、もう少し手の込んだものを作りました。

通常は、VBAプロシージャで、すべてのUndoを考えていたら、VBA側に与えられているメモリは小さいので、それを食いつぶしてしまう可能性があります。

以下は、配列変数の一こまに、どの程度の許容量があるのか知りませんが、許容量を増やすなら、以下は、Logs の型をString 型すれば広がります。しかし、Null値を入れるために、Variant 型にしてあります。

String型の場合は、その代わりに、Chr(0)を入れればよいのですが。Null値のほうが簡単なのど、それを用いました。

'---------------------------------------------------------
'Option Explicit
Private Logs(100) As Variant

Sub ReplaceInTextBoxesR()
Dim shp As Object
Dim i As Integer
Const BEF As String = "あいうえお" '検索後
Const AFT As String = "ABCDE" '置換語

Const TX As Integer = vbTextCompare '全半角区別なし
Const BIN As Integer = vbBinaryCompare '全半角区別あり

 For Each shp In ActiveSheet.Shapes
 If shp.Type = msoTextBox Then
  Logs(i) = shp.DrawingObject.Text
  shp.DrawingObject.Text = _
  Replace(shp.DrawingObject.Text, BEF, AFT, , TX)  '全角半角区別なし
  i = i + 1
 End If
 Next
 Logs(i) = Null
 If MsgBox("これでよろしいですか?", vbQuestion + vbOKCancel) = vbCancel Then
  Call UndoLogs
 End If
End Sub

Private Sub UndoLogs()
'一回きり、戻せます。
Dim shp As Variant
Dim i As Integer
 For Each shp In ActiveSheet.Shapes
 If shp.Type = msoTextBox Then
  If IsNull(Logs(i)) Or IsEmpty(Logs(0)) Then Exit For
  shp.DrawingObject.Text = Logs(i)
  i = i + 1
 End If
 Next
Erase Logs
End Sub

こんばんは。Wendy02です。

ちょっとお話に興味があって、あえて修正版を作りました。

しょせん、Undoの仕組みというのは、どこかにバッファを置いているだけだと思うのです。私は、この手のものは、時々、Undoに代わるものを作ります。前のは、手抜きでしたから、今度は、もう少し手の込んだものを作りました。

通常は、VBAプロシージャで、すべてのUndoを考えていたら、VBA側に与えられているメモリは小さいので、それを食いつぶしてしまう可能性があります。

以下は、配列変数の一こまに、どの程度...続きを読む

QVBAマクロで、図形等のオブジェクトを選択(特定)する方法ってありますか

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時にシートごと削除する方法をとりました。(当然、確認用のダイアログボックスが表示されます。)
前置きが長くなりましたが、問題は、用済みの画像を選択するプロシージャがあれば、あえて削除用のシートを用意する必要はありません。セルの場合は、Rangeプロパティやcellsプロパティで特定できますが、画像などのオブジェクトをセル番地などを使って特定する方法ってあるのでしょうか。
因みに、画像の選択処理を、マクロ記録でプロシージャを作成したら、
ActiveSheet.Shapes("Picture 1").Select などとなります。
よろしくお願いします。

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時...続きを読む

Aベストアンサー

検索シートにシェイプが1つしかなければ
ActiveSheet.Shapes(1).Select
で選択
ActiveSheet.Shapes(1).Delete
で削除できます。

Qオートシェイプの文字列の抽出について

エクセルのマクロについて教えてください。

今、オートシェイプで四角が描いてあり、その中にテキストで他のエクセルブックへのパスが記入してあります。
この状態から、オートシェイプ内のパスのブックを開き、開いたブックに何らかの処理をして、開いたブックを閉じるという処理をしたいと考えております。
処理を始めるトリガーは、他のオートシェイプをクリックするなどを考えております。

いろいろ試してみたのですが、オートシェイプ内に記述してあるテキストを抽出する方法が思いつきませんでした。(ここで使われているのはテキストボックスではなく、四角のオートシェイプです。)

お詳しい方、どのようにすればよいか教えてください。
よろしくお願いいたします。

Aベストアンサー

Shape オブジェクトの TextFrame.Characters.Text を参照するとオートシェイプ内に記述してあるテキストが得られます。

Sub メモ1_Click()
MsgBox Sheet1.Shapes(1).TextFrame.Characters.Text
End Sub

Shape.TextFrame Property
http://msdn.microsoft.com/en-us/library/bb215095(v=office.12).aspx
TextFrame Object
http://msdn.microsoft.com/en-us/library/bb210284(v=office.12).aspx
TextFrame.Characters Method
http://msdn.microsoft.com/en-us/library/bb242015(v=office.12).aspx

QExcelでVBAを利用してオートシェイプ情報取得

Excelのオートシェイプをテキストデータに変化するVBAを作成したいです
ただし対象となるオートシェイプは複数のオートシェイプがグループ化された
グループオブジェクトになっています

それら特定のパターンを持つオートシェイプオブジェクトの一群があり
1つ1つには想定される名称が存在します

具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを
作成し、それらにそって対応するテキストを配置していきたいというものです

このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか
よろしくお願いいたします

Aベストアンサー

質問の意味をとらえきれていないかと思いますが参考にしてください。

まず、表題の「ExcelでVBAを利用してオートシェイプ情報取得」と最初にある「Excelのオートシェイプをテキストデータに変化するVBAを作成したいです」が異なることを言っているように思えます。『情報取得』と『変化』です。「テキストデータに変化する」がどんな意味なのか分からないからかもしれません。テキストデータに「円」と書かれていたら「図形の円」にする?


>このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか

これは、
 1.オートシェイプの情報をうまく拾う方法
 2.テキストデータと紐づける方法
の2つでしょうか

「1.オートシェイプの情報をうまく拾う方法」については参考にモジュールを作ってみました。

「2.テキストデータと紐づける方法」については、
 オートシェイプの情報がどのようなものか分からないですが、オートシェイプのテキストをセルを参照する形式にしてみてはどうでしょうか。添付図の場合、「楕円」のテキストは「=A11」で「明日は」になります。オートシェイプのテキストの算式を使った登録は「セル参照」のみで、複雑な計算式は登録できないのでこのようにしています。複雑な内容を登録したい場合はセル側で整形したりしています。

登録内容を変えたいときはセルの内容を変更します。


>Excelのオートシェイプをテキストデータに変化するVBAを作成したいです。ただし対象となるオートシェイプは複数のオートシェイプがグループ化されたグループオブジェクトになっています
 「テキストデータに変化する」がどんな意味なのか分かりませんが、「オートシェイプの情報をうまく拾う方法」として、グループ化された複数のオートシェイプから左から順にテキストを取り出して1行目に表示してみました。VBAでテキストを拾ってくる例です。オートシェイプの位置を変えれば再度マクロを実行すれば出力が変わります。

>具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを作成し、それらにそって対応するテキストを配置していきたいというものです
 この説明から、先にグループ化された複数のオートシェイプ(テキスト入力済み)があり、そのテキストを順に表示するのかなと考えた次第です。


「シートのコードウィンドウ」
グループ化されたオートシェイプを選択して実行します。

添付図にはコマンドボタンがありますが、ボタンから実行する場合は、コマンドボタンの「TakeFocuusOnClick」プロパティを「False」にしてください。

Sub オートシェイプのテキスト出力()
  Dim shp As Shape 'オートシェイプ
  Dim i As Integer, j As Integer 'カウンタ
  Dim n As Integer  'オートシェイプの個数
  Dim potLeft() As Single 'オートシェイプの左位置
  Dim Sort() As Integer  'オートシェイプの左位置の順

  On Error GoTo ErrorTrp
  
  With Selection.ShapeRange
    If .Type = msoGroup Then 'グループ化されていたら
      n = .GroupItems.Count
      ReDim potLeft(n), Sort(n)
      
      For i = 1 To n
        potLeft(i) = .GroupItems(i).Left
        Sort(i) = 1
        For j = 1 To i - 1 '左位置を取り込んでソート
          If potLeft(j) >= potLeft(i) Then
            Sort(j) = Sort(j) + 1
          Else
            Sort(i) = Sort(i) + 1
          End If
        Next
      Next
    End If
  
    For i = 1 To n
      For j = 1 To n  'ソート順に出力する
        If Sort(j) = i Then
          Exit For
        End If
      Next
      '1行目に順に出力
      Cells(1, i) = .GroupItems(j).DrawingObject.Characters.Text
    Next
  End With

  Exit Sub
ErrorTrp:

End Sub

質問の意味をとらえきれていないかと思いますが参考にしてください。

まず、表題の「ExcelでVBAを利用してオートシェイプ情報取得」と最初にある「Excelのオートシェイプをテキストデータに変化するVBAを作成したいです」が異なることを言っているように思えます。『情報取得』と『変化』です。「テキストデータに変化する」がどんな意味なのか分からないからかもしれません。テキストデータに「円」と書かれていたら「図形の円」にする?


>このようなオートシェイプの情報をうまく拾う方法、テキストデータと...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELマクロで全シート対象の検索マクロを教えて

EXCELマクロで全シート対象の検索マクロを教えてください。
アプリケーションダウンロードタイプでも自作マクロの
どちらでもよいです。

Aベストアンサー

無力のため、いつもFind、FindNextには苦労するのですが、思い切ってあげてみます。VBAの経験がおありなら、欠点は修正してもらえるかもと思って。
標準モジュールに
Sub test01()
s = InputBox("検索文字列=")
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
Set x = sh.Cells.Find(what:=s)
If x Is Nothing Then GoTo p1
MsgBox sh.Name & x.Address
b = sh.Name & x.Address
sh.Activate
x.Activate
'---
Do
Set y = sh.Cells.FindNext(after:=ActiveCell)
If y Is Nothing Then GoTo p1
If sh.Name & y.Address = b Then GoTo p1
MsgBox sh.Name & y.Address
y.Activate
Loop
p1:
Next
End Sub
シート名タブの左側のシートから探していきます。
上記はMggBoxで表示にしてますが、特別セルにセルアドレス値を出すなど適当に修正してください。
少数例でテストしてますが、十分テストしてください。

無力のため、いつもFind、FindNextには苦労するのですが、思い切ってあげてみます。VBAの経験がおありなら、欠点は修正してもらえるかもと思って。
標準モジュールに
Sub test01()
s = InputBox("検索文字列=")
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
Set x = sh.Cells.Find(what:=s)
If x Is Nothing Then GoTo p1
MsgBox sh.Name & x.Address
b = sh.Name & x.Address
sh.Activate
x.Activate
'---
Do
Set y = sh.Cells.FindNext(after:=ActiveCell)
If y Is Nothing T...続きを読む

QExcelで隠れてしまった図やテキストボックスを探す方法

前任者が使っていたExcelの表を利用しているのですが、利用しない図やテキストボックスを線のように細くして端に寄せていたようで、HTML保存をすると、その図が出てきてしまうのです。
マウスで端にカーソルを当てて触って図をさがしているのですが、見つからないものが多くどうすれば探すことが出来るのか教えてください。
時間がなく他の方の質問を調べている暇がなかったので似たような質問があった場合は申し訳ありません。

Aベストアンサー

次の手順をお試しください。
(1)[編集]→[ジャンプ]コマンドを実行
(2)[セル選択]ボタンをクリック
(3)[オブジェクト]オプションボタンをダブルクリック

これでシート上のすべてのオブジェクトを選択することができます。そのまま[Delete]キーを押せば、すべて削除できますね。ただし、オブジェクトには、グラフなども含まれます。一部、残したいオブジェクトが含まれる場合には、[Ctrl]キーを押しながら必要なオブジェクトをクリックすれば、選択対象から外すことができます。

QExcelのマクロを使用してオートシェイプ図形の色を変えたいのです。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。

・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう?

・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか?

よろしくお願いします。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで...続きを読む

Aベストアンサー

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてくれた名前を知るには

Sub List()
Dim シェイプ As Shape
  For Each シェイプ In Worksheets("Sheet1").Shapes
    Debug.Print シェイプ.TopLeftCell.Address; " "; シェイプ.Name
  Next
End Sub

などとすればよろしいかと思います。こうすればセル位置で確認できます。
なおここで表示される名前は右端に半角空白を一つあけて連番がついているようです。


> ・クリックしたオートシェイプ図形がどれであるかを返す関数
ありません。但し、その関数を自分で作ることはできます。
例えばこんな感じです

Sub Shapeの色を変える()
  With Worksheets("Sheet1").Shapes(Application.Caller)
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .Line.ForeColor.RGB = RGB(0, 255, 0)
  End With
End Sub

で、その自作関数を図形にリンクしてやる方法は
  図形を右クリックして 『マクロの登録』 で登録するか
  シェイプ.OnAction プロパティにそのマクロ名を文字列でセットしてやる
試してみましたが、この自作関数はモジュール上に書く必要があるようです。
それと、もちろんですが、50の図形全部についてマクロの登録がひつようです。
マクロを使って登録してもよろしい。
但し、シートにコマンドボタンがあるときは除外しないとエラーになります。

Sub btnShape_Click()
  Dim Shp0 As Shape
  For Each Shp0 In Worksheets("Sheet1").Shapes
    Shp0.OnAction = "Shapeの色を変える"
  Next
End Sub

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてく...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング