• 締切済み

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

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

みんなの回答

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

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

  • keithin
  • ベストアンサー率66% (5278/7940)
回答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/7940)
回答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

  • エクセル2007VBAで検索するコードを知りたい。

    エクセル2007(Excel2007)のVBAで【検索と置換】と同等の機能をもった検索アプリケーションを作りたいのですが、 そのコード(コマンドボタンを実行したときのコード)を教えていただけないでしょうか。 (おそらくですが、リストボックスのコードも必要だと思います。) 正しくは、【検索と置換】から【置換】機能を無くしたものとイメージしていただきたいです。 ●設置するもの ユーザーフォーム(UserForm1) テキストボックス(TextBox1) コマンドボタン(CommandButton1) リストボックス(ListBox1) ●仕様 ユーザーフォームのテキストボックスに入力してコマンドボタンを押すと、検索対象を見つけ、 リストボックスにその対象一覧を行ごとに表示するものになります。 ●検索するときの条件 (1)大文字と小文字を区別しない (2)半角と全角を区別しない (3)部分一致すれば(一部でも一致すれば)検索対象にする (4)今、開いているワークシート上の「全てのセルが検索対象(列や行を指定しない)」 ※検索されたセルの存在する行ごとに、ユーザーフォームのリストボックスに(1行ずつ)表示したいです。 そして、リストボックスに表示されたデータのうち、どれか1つを選ぶと、その選択対象の行の【D列】にアクティブセルを移動するようにしたいです(画面もアクティブセルが見える位置にスクロールします)。 ●リストボックスに(1行ごとに)表示するもの● ↓↓↓ (左から)I列の値、D列の値、O列の値、Q列の値(→4列の値になります) ※リストボックスにQ列の値が表示された場合のみ(Q列に何かしらのデータがある場合のみ)、 リストボックス上の【その行の(I列の値、D列の値、O列の値、Q列の値の)文字すべてを赤色】にして表示していただきたいです。 分かる方がいましたらよろしくお願いいたします。

  • Excel VBA 行の検索と値の取得

    いつもお世話になっています。 スピンボックスで1からの数字を入力できるテキストボックスを作成しました。 ここに入力された数字は、行の先頭の数値を表します。(つまり連番) この数値を基に行のデータを検索、テキストボックスに値を取得したいのですが 検索の仕方が分かりません。 お力添えをよろしくお願いいたします。

  • EXCEL VBAで・・・。

    テキストボックス34に入力した値を、ExcelのA列の値より検索し その隣の値をテキストボックス4に表示させる、と言う処理をしています。 検索時に検索データが見当たらない場合、メッセージボックスを表示し、 更に、テキストボックス34のデータを消去→テキストボックス34にフォーカス移動 させたいのです。 下記のコードですと、メッセージボックス表示と テキストボックス34のデータ消去までは出来るのですが フォーカス移動してくれません。 イベントをexitにしている理由は特にないのですが、changeを使うと、 テキストボックス34に1文字入力された時点でメッセージボックスが表示されたり、 1文字でも一致するデータが順に表示されてしまいます。 (テキストボックス34に入力するデータの文字数は3文字固定です。) 何か良いお知恵がありましたら、お教え下さい。 ----------------------------------------------------------- Private Sub Textbox34_exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Result As Variant Set Result = Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True) If Result Is Nothing Then MsgBox ("入力されたコードは登録されていません。") TextBox34.Text = "" TextBox34.SetFocus Else Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True).Activate ActiveCell.Offset(0, 1).Select TextBox4.Text = ActiveCell.Value End If End Sub

  • エクセルVBAのテキストボックス改行について

    質問させて頂きます。 今VBAを使っているのですが TextBox内の改行がうまくいきません。 フォーム上にテキストボックスを置いて5~6行表示できる大きさにして、 (テキストボックス内に書いたものを保存ボタンでエクセル内の指定部分に反映させるコードを書き) それをマクロから開いて文字を入力している時に エンター押せば改行できると思っていたのですが出来ません。 CtrlやAlt押しながらもダメでした。 テキストボックスのプロパティ内に行を指定できる何かがあるのでしょうか? 色々いじりすぎて元に戻せなくなりつつあったので 質問させて頂きました。 ご存じの方おられましたら是非教えて下さい。 よろしくお願いします。

  • エクセルの検索「オプション」

    エクセルの検索機能について教えてください。 メニュー⇒編集⇒検索⇒検索「オプション」⇒検索対象 最後の検索対象をデフォルトで『値』に設定したいのですが…何か設定方法がありますか? EXCEL2002 SP3 を使用しております。 

  • エクセル VBA タブストップに対する質問2

    下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。 条件は下記といっしょで テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。 全てのTabStopはTrue、TabIndexは順に1~5が入っています。 テキストボックス1に何もデータを入れないで、Enterが押された場合、 テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。 どうかご指導よろしくお願いいたします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then 'ENTER If TextBox1.Value = "" Then TextBox1.SetFocus End If End If End Sub このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。

  • エクセルVBAで、テキストボックスにセルの値を入れる

    宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

  • [VBA]テキストボックスからエクセル反映(複数行)

    始めまして。初めて質問させて頂きます。至らない点があると思いますがよろしくお願い致します。 今テキストボックスよりエクセル(単一セル)に文字を入力するシートを作成しております。 テキストボックスで複数行入力(Enterで改行)の方法と複数行入力した文字をシート(1セル)に反映したいのですが良い方法をご存知でしたらご教授お願いします。 【やりたい事項】 テキストボックス内 (1)○は△です。(Enterで改行) (2)×は●です。 エクセルシート上(A1セルで) (1)○は△です。(ALT+Enter) (2)×は●です。 現状:MultiLineをTRUEにして右端まで文字入力すると2行目に入力可能 エクセルに反映すると「○は△です。×は●です。」と1セルで1行で表示となってます。 言葉足らずかもしれませんが、よろしくお願いします。

  • エクセルVBAでデータ検索(Win2000,Excel2000)

    エクセルで毎日の業務で手計算している作業をVBAコードかいて試しているのですが、縦と横の検索で行き詰まってしまい質問しました。どうぞよろしくお願いします。 _A__B____C____D__E__F___G___H 1| 2|_______その他_1~3_4~6_7~10_11~20_21~30 3| 3|__項目A___ 0___50__49__46___43__40 4|__項目B___ 0___45__44__39___37__34 5|__項目C___ 0___43__42__34___30__ 28 行 *このデータは現在(B3:V42)にあり今後増える可能性あり *1行目とA列は空白です。 *2行目とB列は対応する項目です。 *3行目は関係ない値が入っています(データをつくる為の値) このようなデータが、"Sheet2"にあると仮定します "Sheet1"のシート上に配置したComboBox(コントロールツールボックスの)に検索値があります。 (ComboBox1 → 数値 , ComboBox2 → 数値 , ComboBox3 → 文字)*リストは"Sheet1"に登録してあります。 TextBox1 ÷ 2 の結果を小数点以下切上げし、これにTextBox2の値をかけたもの(仮にAAAとする)が、2列目のそれぞれのセルの数値範囲に対応し、TextBox3の文字列がB列に対応し、両検索結果の交わったセルの値を返すようにしたい。 例)もしAAAが「8」なら「F列」をみる。TextBox3 の文字列が「項目B」なら「4行目」をみる。この結果、交わったセルは「F4」なので、「F4」にある値「39」を"Sheet1"."A1"に返す。 また、これらコンボボックス(このシートとは別にテキストボックスを使うこともある)にはひとつずつchangeイベントでいきなり別シート("Sheet3")に書くコードが既に書いてあります。このセルから取り出すことも可能です。よろしくお願いします。

  • エクセル VBA 

    エクセルのユーザーフォームのチェックボックスについて 教えて下さい。 現在チェックボックスが15個あるのですが 例えばテキストボックスが2個あり テキストボックス1に数字の2 テキストボックス2に数字の6 を入れ、コマンドボタンを押すと チェックボックスの2から6にまとめてチェックが入るようなコードが組みたいです。 宜しくお願いします。

専門家に質問してみよう