[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
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.