• ベストアンサー

Excel2010 マクロ Findで日付の検索

質問です。 Findで日付の関数をしているのですが、ダイレクトで入力した個所は成功するのですが、数式で表示している箇所は失敗します。”実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていません” ネットで調べて、色々試したのですが、上手くいかなくて困っています。ダイレクト入力・数式のどちらでもいける方法はないのでしょうか?よろしくお願いいたします。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8473/18137)
回答No.11

#1です。 これなら結果はどうなりますか? Option Explicit Sub test() Dim 検索日付 As Double Dim 日付検索列 As Long Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Worksheets("ハンマリング履歴") '検索日付 = CDate(ws1.Cells(4, 1)) '日付検索列 = ws1.Rows(2).Find(what:=検索日付, LookIn:=xlValues, LookAt:=xlWhole, _ ' searchorder:=xlByColumns, SearchDirection:=xlPrevious).Column 検索日付 = CDbl(ws1.Cells(4, 1)) 日付検索列 = WorksheetFunction.Match(検索日付, ws1.Rows(2), 0) MsgBox 日付検索列 End Sub

hidenori-world
質問者

お礼

返事が遅れて申し訳ありません。 色々考えてくれてありがとうございました。諦めていたのですが、上手くいきました。 数式が入っている日付の検索にFindは使えないんですね。

その他の回答 (14)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

直接の回答ではないのですが、 エクセルの日付の件で、日付シリアル値などを知らないVBA勉強者もいるようにおもいます。エクセルの日付の扱いは十分勉強(と言っても実情を知るしかないが)が必要な個所だと思います。 ーー http://officetanaka.net/excel/vba/tips/tips131.htm 日付を検索する 田中亨先生のこの記事を読んで、対策が必要かどうかすが蹴る考えることを勧めます。 その他にも、「vba 日付 検索」でGoogle照会すればたくさん記事があります。 本質問の原因がそれらに該当しなくても、是非一読すべきです。  小生も必要性やむつかしさは、判っているのですが、いつも日付の検索をやってないのと、質問者のシートのデータ状況が使えないので、また説明には、長文での説明が必要なのでここではできず、質問者にまず読んでいただくことを願う次第です。 ーー >「Findで日付の関数をしているのですが、ダイレクトで入力した個所は成功するのですが、数式で表示(入力??の結果?)している箇所は失敗します」 の、関数の引数のデータ実例、関数、関数の結果、検索Findのパラメータ(Formulas???)など書いてもらわないと、エラーが出ることの、追試(再現)のしようがないと思いませんか? >日付の関数をしている、とは何?

hidenori-world
質問者

お礼

色々突っ込んでくれてありがとうございました。見直して投稿したつもりなんですけど、誤字・文章の表現力の浅さ等、多々あって申し訳ありませんでした。 >日付の関数をしている、とは何?  → 関数ではなくて検索でした。 >日付の入力個所は最初のセルは2020/5/1と入力して、隣のセルは、数式で+1しています。 ネット(オフィスたなかは、検索したらかなりの確率でトップに表示されるので、分からなかったら目を通すようにしていますが、分かり難いです。)で色々見ても、自分みたいに頭の悪いアホには理解出来ないです。理解出来ていたら、質問していないと思いますよ。

  • f272
  • ベストアンサー率46% (8473/18137)
回答No.3

#1です。 それ以外で思いつくのは,検索日付が2行目に存在しない場合とか,「数式で表示している」というのが =F2+1 というような数式ではなくて =TEXT(F2,"yyyy/m/")&"2" というような数式になっている場合とか... 実際にはどんな数式なんですか?

hidenori-world
質問者

お礼

日付のセルの内容ですが F2は、そのまま 2020/5/1 と入力しています。 G2は、F2+1 H2は、G2+1 と続いています。 2行目の表示形式は書式設定の日付で設定しています。 一度、表示形式を数値にしたりして検索出来ないか試したんですけど、 数式が入力されている場所は駄目でした。

  • kkkkkm
  • ベストアンサー率66% (1721/2591)
回答No.2

Find(What:=DateValue(検索日付), LookIn:=xlValues) にしてみてはいかがでしょう。表示形式は質問の画像のように短い日付で。

hidenori-world
質問者

お礼

回答ありがとうございました。試したんですけど、型が一致しませんのエラーが発生しました。

  • f272
  • ベストアンサー率46% (8473/18137)
回答No.1

LookIn:=xlFormulas を LookIn:=xlValues にしてください。 ところで日付検察列はなぜ文字列なのですか?

hidenori-world
質問者

お礼

お早い返答ありがとうございました。 すみません。かなり久しぶりにマクロを作ろうと思いまして。ネットの記述を参考にしながら作ってました。列番号を知りたかっただけなので、Integerでしたね。御指摘ありがとうございます。LookIn:=xlValuesに変えたのですが、同じエラーが発生してNGでした。

関連するQ&A