プロが教えるわが家の防犯対策術!

下記コードを実行するとオブジェクト変数または With ブロック変数が設定されていませんとエラーになります。
findで変数を使うにはどのような変更が必要なのか教えてください。

Dim Sht2 As Worksheet
Dim Sht3 As Worksheet
Dim rng As Range
Dim Buf As String
Set Sht2 = Sheets(1)
Set Sht3 = Sheets(2)
Buf = Month(Sht3.Cells(2, 1)) & "月"
Set rng = Sht2.Range("A:A").Find(what:=Buf, lookat:=xlWhole).Offset(0, 16)

質問者からの補足コメント

  • ありがとうございます。Set rng = Sht2.Range("A:A").Find(what:=Buf, lookat:=xlWhole)
    で同エラーは出ませんでした。
    If rng1 Is Nothing Then
    MsgBox "みつかりませんでした。"
    End If
    をつけているので見つかりませんでした。となります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/06/23 17:17
  • Buf = Month(Sht3.Cells(2, 1)) & "月"
    のCells(2,1)には、「2023/5/1」が入っています。
    変数を使わず
    Set rng = Sht2.Range("A:A").Find("5月", lookat:=xlWhole).Offset(0, 16)
    とするとrngはオフセットの値が代入できるのですが....
    Buf = Month(Sht3.Cells(2, 1)) & "月"
    では「5月」にはならないのでしょうか。教えてください。

      補足日時:2023/06/23 17:20

A 回答 (6件)

>下記を全角にする方法もあるのでしょうか...


>Buf = Month(Sht3.Cells(2, 1)) & "月"

Buf = Month(Sht3.Cells(2, 1)) & "月"
Buf = StrConv(Buf, vbWide)

とすると、Bufの内容は全て全角になります。
    • good
    • 0
この回答へのお礼

いつも正解をいただきありがとうございます。
引数 string で指定した文字列を、引数 conversion で指定した変換の結果を返すのですね!すごい!

お礼日時:2023/06/23 18:45

No2です。



>Cells(2,1)には、「2023/5/1」が入っています。
>Buf = Month(Sht3.Cells(2, 1)) & "月"
>では「5月」にはならないのでしょうか。教えてください。
A2セルにどのようにして値が設定されるのかにもよりますが、正しい日付形式であれば月を取得できます。
(ご質問文からは読み取れませんけれど)人間が入力したりする値であれば、日付に似た形であってもエクセルが日付と認識できないものはエラーになりますという意味です。
例えば、
「2023年5月1」とか「2023.05.01」、「20230501」などなど。
日付とは関係のない値が入力されている場合にも当然ながらエラーが発生します。

ご質問文からは不確定な部分がどこまでかがわかりませんけれど、入力ミスなども含めて、可能性のある部分に関しては、値を使用する前にチェックが必要であろうと思います。
質問者様だけが利用するマクロなら、省略したところで問題はありませんけれど、他の人が利用して、たとえ入力ミスであったとしても、エラーが発生すれば「使いものにならないマクロ」という評価になることでしょう。
    • good
    • 1
この回答へのお礼

厳しいご意見ありがとうございます

お礼日時:2023/06/23 18:43

>Cells(2,1)には、「2023/5/1」が入っています。


>Buf = Month(Sht3.Cells(2, 1)) & "月"
>では「5月」にはならないのでしょうか。教えてください。

A列に設定されている5月が全角になっていませんか。
(5が全角だと検索でエラーになります)
    • good
    • 0
この回答へのお礼

たすかりました。A列の5月は全角でした。半角にしてみたところ解決しました。下記を全角にする方法もあるのでしょうか...
Buf = Month(Sht3.Cells(2, 1)) & "月"
今回A列を半角にしても別の人に来月全角にされてします恐れがありますので教えていただけるとたすかります。

お礼日時:2023/06/23 18:04

Set rngで右辺の結果がNothingの場合にはそのエラーとなります。



そこをチェックする必要が有ります。
If Not 右辺 Is Nothing Then
Set rng=右辺
End If
    • good
    • 0

こんにちは



どこでエラーが発生しているのか記載がありませんけれど・・

>Set rng = ~~~~
の行で発生しているのなら、Findの結果、該当する値が見つからない場合のエラーではないでしょうか?

センテンスを
 Set rng = Sht2.Range("A:A").Find(what:=Buf, lookat:=xlWhole)
までにして、一旦終えておけば、エラーは発生しないでしょう。
例えば、その前の行でも、セル値に文字が入っていたりすればエラーになります。

どういう環境を想定できるのかがわかりませんけれど、セルの状態等が予定通りかをチェックしておくことが必要なのではないでしょうか。
    • good
    • 1
この回答へのお礼

ありがとうございます。チェックしてみます。

お礼日時:2023/06/23 17:59

Set rng = Sht2.Range("A:A").Find(what:=Buf, lookat:=xlWhole).Offset(0, 16) を



Set rng = Sht2.Range("A:A").Find(what:=Buf, lookat:=xlWhole)
にしてください。
この回答への補足あり
    • good
    • 0

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