dポイントプレゼントキャンペーン実施中!

たびたび申し訳ありません。
エクセルVBAのコードについて質問です。

以前別の質問で、「ユーザーフォームのテキストボックス1に入力した値を、エクセルシート1のA行の範囲で探す」と言うコードについて、
Dim Trg As Range
Set Trg = Sheets("Sheet1").Range("A:A").Find(TextBox1.Value)
といった書き方を教えていただきました。
✳︎テキストボックス1には0001が、エクセルのA行には0001〜0009が入っているイメージです。

通常であればこれで問題ないのですが、
textbox1は、書式設定をしており、number formatを0000(「1」と入力すると「0001」と表示する)と設定しています。
→実行した場合に「textbox1.value」も「textbox1.text」も「0001」と認識されます。

エクセルのデータも、セルの書式設定により、1〜9と入力したものを0001〜0009と表示させておりますが、実行の結果、こちらは、「0001」ではなく「1」と認識されるため、
findメソッドの実行結果がエラーになります。(検索結果がnothingになる)

解決方法として、エクセルのデータ自体を「‘0001」と文字列形式にすれば良いのは分かります。
ただ、できれば今の表示形式(number format0000)を保持したまま、処理できる方法を模索したいと思っています。

何か良い方法があれば、コードなどを教えていただけないでしょうか。
長々と失礼しました。
よろしくお願いします。

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

  • HAPPY

    皆様回答本当にありがとうございました。
    色々な書き方があることがわかったので、
    自分でも使えるように、勉強したいと思います。

      補足日時:2021/03/27 09:14

A 回答 (6件)

すみません、No.1に誤記がありました。


下記でどうでしょうか。

Dim Trg As Range
Dim strWork As String

'数値の場合のみ"0001"->"1"の変換をする
strWork = textbox1.Text
If IsNumeric(strWork) Then strWork = CStr(Val(strWork))

Set Trg = Sheets("Sheet1").Range("A:A").Find(strWork)
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます。
おかげさまで出来ました。
大変勉強になります。

お礼日時:2021/03/27 09:09

No.4です。



見落としてました。

>✳︎テキストボックス1には0001が

だと、

Set r = Range("A:A").Find(what:=Val(TextBox1.Value), LookIn:=xlFormulas, LookAt:=xlWhole)

かな?(未検証)
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。大変助かりました。

お礼日時:2021/03/27 09:11

No.4です。



この方法は比較的『日付検索』で使われてた手段です。
それでも内容によってはミスる場合もあるようです。
    • good
    • 0

例えば、



Dim r As Range

Set r = Range("A:A").Find(what:=TextBox1.Value, LookIn:=xlFormulas, LookAt:=xlWhole)

If Not r Is Nothing Then
r.Select
End If

Findメソッドの引数で『値』ではなく『数式(xlFormulas)』を明確に指定してあげるとか?
    • good
    • 0

こんばんは、


>textbox1は、書式設定をしており、number formatを0000(「1」と入力すると「0001」と表示する)と設定しています。
>エクセルのデータも、セルの書式設定により、1〜9と入力したものを0001〜0009と表示させておりますが、

書式設定、.Range("A:A").Findをそのまま使うなら
If Not IsNumeric(TextBox1.Value) Then Exit Sub
Set Trg = Sheets("Sheet1").Range("A:A").Find(CInt(TextBox1.Value))
If Not Trg Is Nothing Then
For i = 2 To 4

Not IsNumericやNot Trg Is Nothingは
ご質問の場合のエラー対策です。
    • good
    • 1
この回答へのお礼

助かりました

丁寧にありがとうございます。おかげさまで解決出来ました。

お礼日時:2021/03/27 09:10

下記でどうでしょうか。



Dim Trg As Range
Dim strWork As String

'数値の場合のみ"0001"->"1"の変換をする
strWork = textbox1.Text
If IsNumeric(strWork) Then strWork = CStr(strWork)

Set Trg = Sheets("Sheet1").Range("A:A").Find(strWork)
    • good
    • 0

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