[[20220421112914]] 『instrとrangeの組み合わせについて』(きむ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『instrとrangeの組み合わせについて』(きむ)

VBAで初めてInStrを使用したのですが、「型が一致しません」のエラーが出てしまい、原因がわかりません。

        If InStr(ws3.Range("h4:h47").Value, "44") > 0 Then
            MsgBox "返金が発生しています。"
        End If

ちなみに、上述の「"h4:h47"」の部分を「"h4"」に変更すると、エラーは発生しませんでした。

InStrの理解不足なのか、それとも単純な見落としなのか・・・。
どなたかわかる方、教えてください。

< 使用 Excel:Excel2016mac、使用 OS:Windows10 >


InStr関数は、1つの値について評価します。

Range("h4:h47").Value
となると、複数の値(配列)になるので、
「型が一致しません」のエラー
になります。

Range("h4:h47")のセル範囲のそれぞれの値に対してどのように評価したいのでしょうか?

(まっつわん) 2022/04/21(木) 11:42


まっつわん様

どうもありがとうございます。
ああ、複数の値にはInStrは使えないのですね・・・。勉強不足でした。

やりたいことは、"h4:h47"の範囲に1か所でも「44」という数字が入力されているのか、それとも1か所も入力されていないのかを確認することです。
(きむ) 2022/04/21(木) 11:46


 簡単に書いたけど...これでよいのかどうか?

 Sub Sample()
    Dim i As Long, cnt As Long
    For i = 4 To 47
        If InStr(Cells(i, "H"), 44) > 0 Then
            cnt = cnt + 1
        End If
    Next
    If cnt >= 1 Then
        MsgBox cnt & "件の返金が発生しています"
    Else
        MsgBox "返金は、ありません"
    End If
 End Sub

(あみな) 2022/04/21(木) 14:01


 ws3 でしたね。

 後は、調整してください。^^;

(あみな) 2022/04/21(木) 14:04


 >やりたいことは、"h4:h47"の範囲に1か所でも「44」という数字が入力されているのか、
 >それとも1か所 も入力されていないのかを確認することです。

ならば、繰り返し1個づつセルの値をみていくか、
エクセルVBAならシート上で使う関数を使って、

if worksheetsfunction.countif(ws3.Range("h4:h47"),44) > 0 then

といような感じでできますね。
シート上の関数はセル範囲を受け取る関数が多々あるので、
VBAの関数より便利な場合が多いです。

(まっつわん) 2022/04/21(木) 14:17


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.