• 締切済み

エクセル VBA オプションの検索

エクセルのオプション検索で、検索対象が値のみの、フォントサイズ20が条件で検索しております。 エクセルを立ち上げる度に条件設定しないといけないので、できればウィンドウ枠の固定で固定した行に、テキストボックスを追加して入力した文字が含まれる行にエンターを押す度に移動できればいいのですが、宜しければコードをご教授お願いします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>次 「次」コマンドボタン等を隣に用意して,たとえばfindnext,またはふつーにfindするのでも出来ますが,で次を検索してください。 回答を参考に結局いまどういうマクロにしたのか不明なので,アナタの検索から続けて上手に作業を引き継ぐ「次を検索」マクロをアドバイスできません。 といっても単に「次って一体どこから次を探し出せばよいのか」を,どうやってマクロに判らせるか(今のアナタのマクロでは,そこんとこが一体どうなっているのか)だけの工夫の問題ですが。 たとえば先の回答で「取り敢えず見つけた数式セルが選択されている」状態から「次を探す」なら, private sub commandbutton1_click() on error resume next cells.specialcells(xlcelltypeformulas).findnext(activecell) end sub とかでいいんじゃないかと思います。 当初ご質問だった検索の基本方針は解決できたご様子なので,続きがどうしても行き詰まるようならこのご相談は一端解決で閉じ,ここまでで出来た範囲を改めて明記して別途のご相談としてまた皆さんのアドバイスを求めてみてください。今度は「どういう状況で何をしたい」のか,できるだけ書き漏らし(あとから次々実は実はあれもこれも…が出てくる)の無いようにお願いします。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>私が検索したいのは、「数式の計算結果としての値」+フォントサイズ20が条件です。 これがヤリタイ事として,他はどうでも良いと言うことなので 手順: シート名タブを右クリックしてコードの表示を選び, 現れたシートの内容を全て削除し,下記をコピー貼り付ける Private Sub worksheet_change(ByVal Target As Excel.Range)  If Target.Address <> "$F$1" Then Exit Sub  If Target = "" Then Exit Sub  On Error Resume Next  Application.FindFormat.Font.Size = 20  Application.Goto Cells.SpecialCells(xlCellTypeFormulas).Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, searchformat:=True), True End Sub F1セルに記入すると,該当する数式セルを表示する。 #何に記入することにしても,また「スクロール」だろうが「該当するセルに移動」でもマクロの内容は概ね流用できるので,アナタのヤリタイ事に応じて適宜応用してください。 「該当するセルのA列のセルにスクロール」とかなら,ほとんどそのまんま流用できます。 アクティブセルを移動せず該当するセルの行番号を取得してスクロールとかでも,「ActiveWindow.ScrollRowなんか」についてご存じなら応用は容易いはずです。

sasa_miyu04
質問者

お礼

有難うございました。 書いてみたら動かなかったので、調べてみたら完全一致で書いてくれてたのですね。 一部にしてちゃんと動きました。試行錯誤してスクロールすることもできました。 初めに書いとけばよかったですが、検索する値は文字列&数字になっていて文字列を入力するのは大変なので数字のみで検索して探したいので、かぶる部分があります。今のままだと先頭の検索部分しかできないのですが、複数あった場合に次を検索していくことはできませんか。 面倒だと思いますが、出来ればお願いします。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ん? あぁ, >ウィンドウ枠の固定した行に を追加されたんですね。 ところで。 >検索対象が値のみの これが何を意図しているのか,実は曖昧です。 通常,検索ダイアログボックスのオプションを開いて検索対象を「値」とした場合,生データは勿論ですが,「数式の計算結果としての値」も検索対象とする意味になります。 そうではなく「数式セルは除外して生データで記入されているセルだけを検索対象としたい」というお話だった場合,その旨マクロに仕込んでやらないといけません。 下記のサンプルマクロは,後者の意味で解釈した場合について示します。 #余談 エクセルでは「テキストボックス」として, ・図形のテキストボックス ・「フォーム」のテキストボックス ・「コントロールツールボックス(ActiveXコントロール)」のテキストボックス の3種類が利用できます。どれを使うかによって,マクロの書きぶりとか出来ること出来ないことが変わりますので,一体どれを使うお話をしているのか(話しをされているのか),どれを「使いたい」のか,注意しなければなりません。 で。テキストボックスを使わない方法。 サンプル:「F1セル」に検索したい文字列を記入すると,自動で検索する 手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub worksheet_change(byval Target as excel.range)  if target.address <> "$F$1" then exit sub  if target = "" then exit sub  on error resume next  application.findformat.font.size = 20  cells.specialcells(xlcelltypeconstants).find(what:=target.value, after:=target, lookat:=xlpart, searchformat:=true).select end sub

sasa_miyu04
質問者

お礼

ご回答ありがとうございます。とても勉強になりました。 値の検索で生データも検索するのは知らなくて、申し訳ないです。 私が検索したいのは、「数式の計算結果としての値」+フォントサイズ20が条件です。 コントロールツールボックス以外にもテキストボックスがあったのですね。 一応コントロールツールボックスを使う予定でしたが、できるならどれでもよいです。 あと、できれば検索した行を取得して、ActiveWindow.ScrollRowなんかで一番上に行がくるようにできれば有難いです。検索したセルに入力するわけではないので、選択されてなくていいです。これだと次の検索ができないでしょうか。 宜しければまた宜しくお願いします。

関連するQ&A