• ベストアンサー

エクセルのVBAを使って、セルの値の検索をしたいと思ってます。

エクセルのVBAを使って、セルの値の検索をしたいと思ってます。 ですが、cells.findのように、アクティブセルが移動することなしに、値のみを取得し、変数に格納したいと思っていますが、どうすればよいか、見当がつきません。 繰り返し構文を使えば、検索はできますが、それだと、無駄に重くなりそうなので、何か良い方法はありませんか?

質問者が選んだベストアンサー

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

例: sub macro1()  dim h as range  set h = cells.find(what:=検索値)  if not h is nothing then   msgbox h.address  end if end sub >繰り返し構文を使えば、検索はできますが Excel VBEの画面でVBAのヘルプからFind メソッドの使用例を見てみると,どんぴしゃであなたの疑問の直接の回答例が載っています。 ヘルプを調べるには,VBE画面で表示メニューからオブジェクトブラウザを出してFindを検索,みつけたら?ボタンをクリックします。 または標準モジュールなどに適当に「cell.find」のサンプルマクロを書き込み,findの言葉のところに編集カーソル(Iカーソル)を入れてF1キーを押します。 マクロの勉強では「ヘルプを熟読する」のは(マクロの自動記録と並んで)絶対に外せない勉強方法です。多くの場合に楽しようとネットで当てもなくさまよったりするよりも,遙かに効果的に知識を得られますので,ヘルプの勉強の仕方をマスターしてください。

roadstar77
質問者

お礼

ありがとうございます、実は、前のバージョンまでのヘルプと、今のエクセルのヘルプの使い方の違いがいまいち分からず、困っておりました。またエクセル自体の使い方もずいぶん変わってましたので、まずそこから苦労させられました。エクセルを使うのも5年ぶりということもあり、一からマクロの勉強をしていた次第です。 なんとかヘルプの見方がわかりましたので、さっそく検索してみますと、まさにドンピシャの回答が載っており、大変参考になりました。ありがとうございます

関連するQ&A

  • Excel VBA で色付きのセルの値を取得する

    ExcelのVBAマクロで、For ~ Then構文で複数のセルを参照していき、 色付きのセル(塗りなしのセル)に入力されている値のみを取得する方法を教えてください。 Excel2007を使用しています。

  • 改行のあるセルをFindで検索したい

    エクセルです。 A1セルに 「あああ」と入力して、ALT+Enterで改行し、「いいい」と入力しました。 VBAで Sub test() MsgBox Cells.Find(What:="あああ" & Chr(13) & "いいい", LookAt:=xlWhole).Address End Sub として、セル番地を取得したいのですが オブジェクト変数または With ブロック変数が設定されていません。(Error 91) と言うエラーが返ってきてしまいます。 $a$1が返ってきてほしいのですが。 Sub test() Debug.Print Cells.Find(What:="あああ*", LookAt:=xlWhole).Address End Sub で、$a$1が返ってきますが、 できれば改行含む検索ができるようになりたいです。

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • セルの隣のセルの値を取得 VBA

    初歩的な質問ですいません 検索したセル(最大値)の隣のセルの値(L)を取得したいです。 どこまでのコードを貼り付けたらいいかわかりませんが、 ret = Application.Max(Range("M:M")) と変数に格納したのですが、その後 piyo = ret.ActiveCell.Previous このようにしてみましたが、取得出来ていないようです。 記述法なのか、よろしくお願いします。

  • excel vba 日付型の2つの値を一つのセルに入力する方法

    excel vbaについて教えてください。 Wという変数にDate型で"1:00"という数値が入っており、 Zという変数にDate型で"2:00"という数値が入っています。 この二つを、同じセル内に改行して挿入したいと思っています。 Cells(1, 1) = W & Chr(10) & Z 上記のようにセットしようとすると、 4.16666…7E-02 4.16666…7E-02 といったように値が変形してしまいます。 1:00、2:00という値は前処理で時刻の比較などをしているため、 文字列型にすることはできません。 どのようにしたら 1:00 2:00 といった形にできるでしょうか? 途中で(セルに挿入する直前で)文字列型に 変換する、というようなことはできるでのしょうか? よろしくお願いします。

  • VBAで検索対象では無いセルが検索される

    下記のようなコードで特定の範囲内を検索しています。 X = 16 Y = 1 Do While Cells(Y, X).Value <> "" Set lFoundCell = Range("K8:K65536").CurrentRegion.Find(What:=Cells(Y, X), lookat:=xlWhole) Y = Y + 1 Loop Cells(X, Y)には文字列が格納されていてK8:K65536の範囲内に同じ値があった場合に lFoundCellに該当箇所をRange型の値で格納しています。 しかし、実際にこれを実行すると検索対象外のB列の値が格納されてしまいます。 たしかにB列にはCells(Y, X)と同じ値があるのですが 検索対象はK8:K65536に限定されているはずです。 これはなんでなんでしょうか? 何かコードにミスがあればお教えください。 よろしくお願いします。

  • エクセル VBA find は別シートを検索できますでしょうか?

    こんばんわ。マクロ初心者です。 皆さんいつも親切なご回答ありがとうございます。 早速ですが質問内容を記入いたします。 ・ブックA を開いています。 選択している行のC列セルの値を検索キーワードにして、 ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、 ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。 ※ブックBをアクティベートする事無く行えますでしょうか? (他の処理と組合わせて行い、回数も多いので、  ブックA⇔ブックB アクティベートの往復は避けたいです。) 下のようなマクロを作成してみましたがうまくいきません。 どうかご指導よろしくお願いいたします。 --------------------------------------------------------------- dim 検索品目 as string dim fcell as object dim i as integer i = Selection.Row '選択行の3列目セルの値を変数『検索品目』に格納 検索品目 = Cells(i, 3).Value 'オブジェクト変数『fcell』に検索したセルを格納 Set fcell = Cells.Find(What:=検索品目, After:=Workbooks("ブックB.xls").Worksheets("sheet1").Range("G2"), LookAt:=xlWhole, searchorder:=xlByColumns) '検索したセルの3行左のセルの値を変数『オーダ番号』に格納 オーダ番号 = fcell.Offset(, -3).Value 'ブック A の選択行の15列(O列)にデータ入力 Cells(i, 15) = オーダ番号

  • VBAでのセルの参照

    VBAであるセルの値をCSV出力にしようしたいと思っています。 対象セルが、ただ値のみが入っているセルならば問題ないのですが、式が入っているセルですと上手くできません。 詳細は以下のとおり セルA1:8.25  セルA2:8.80   セルA3:=A1-A2 (画面には-0.55と表示)で 変数=Cells(3,1).Valueと言った形で、A3の値を変数に受け取ろうとしています。 すると変数には入るべき値の近似値(-0.54999999・・) が入ります。 すべてのセルの書式は数値で、少数第2位までに設定されており、決して上記以外の値が入っていることはありません。 何故、このような現象が起こり、またどうすれば解決できるのでしょう? ちなみに変数=Cells(3,1).Textにすると正しい値(-0.55)が入ります。 .Valueと.Textの違いも教えていただけるとあり難いです。 宜しくお願いします。

  • VBAで連続した複数セルの値の調べかた

    エクセルVBAでA1セルからF1セルまでの6せるのそれぞれの値を1つの値として取得できる方法はありませんか? LOOP処理とかで1セルごと処理して取得するとかでなく 関数とかRANGE(”A1:F1”)のプロパティとかで何か無いでしょうか 宜しくお願いします。

  • vba 結合されたセルの列番号を取得したい

    セルを結合しているセルに、値が入っていて、 その値を検索して列番号を取得したいのですが エラーになります。 A1セルとA2セルを結合して、 「a」をいれて Sub test() MsgBox Cells.Find(What:="a", LookAt:=xlWhole).Column MsgBox Rows("1:2").Find(What:="a", LookAt:=xlWhole).Column End Sub をしても、どちらもエラーになります。 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」 というエラーです。 でもB1に「a」を入れれば、問題なく2が返されます。 結合されててもセルを検索する方法を教えてください。

専門家に質問してみよう