Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
セル内IF文で導かれる値の取得について
投稿日時: 22/03/07 13:28:40
投稿者: nonotti

初めまして。
仕事でVBAを覚える必要が出てきて練習中の者です。
 
早速ですがお知恵を拝借させてください。
 
 
    A B C D
”品名””単価””売上個数””合計金額”
XXX  | 100  |  30  |  3000 |
 〜 〜 〜 以下同様 〜 〜 〜
 
 
上記のような表で、D行のセル内数式が IF(D1="","",B1*C1) となっている(数式は変更できないと言われてます)場合、
 
以下のコードで、D行の最大値を求めたいのですが、maxValueの取得で、型が一致しないエラーが出ます。
これはやはりD行の内容を数値として参照できないということなのでしょうか
 

Sub test1()

    Dim maxValue As Long
    Dim mv As Long

    maxValue = Cells(2, 1)

    For mv = 2 To 256
        If Cells(mv, 1).Value > maxValue Then
            maxValue = Cells(mv, 1).Value
        End If
    Next

    MsgBox "最大値は" & maxValue & "です。"
    

End Sub

 
このようなケースだとどのように修正すべきかご教示いただけると嬉しいです。
 
よろしくお願いいたします。

回答
投稿日時: 22/03/07 13:43:09
投稿者: よろずや

    If Cells(mv, 1).Value <> "" Then
        If Cells(mv, 1).Value > maxValue Then
            maxValue = Cells(mv, 1).Value
        End If
    End If

ではいかが。

回答
投稿日時: 22/03/07 13:49:35
投稿者: よろずや

ってか、D列指定になってないじゃん。

Sub test1()
    Dim maxValue As Long
    Dim mv As Long
    maxValue = 0
    For mv = 2 To 256
        If Cells(mv, "D").Value <> "" Then
            If Cells(mv, "D").Value > maxValue Then
                maxValue = Cells(mv, "D").Value
            End If
        End If
    Next
    MsgBox "最大値は" & maxValue & "です。"
End Sub

回答
投稿日時: 22/03/07 14:33:12
投稿者: Suzu

引用:
D行のセル内数式が IF(D1="","",B1*C1)

 
D1 の数式が、D1を参照しているとは思えないので、
IF(A1="","",B1*C1) なり、IF(B1="","",B1*C1) または IF(C1="","",B1*C1) だとして、
 
勉強と言うことなので、ループ動作を覚える意味で行っているのかも知れませんが
D列の、2行目から 256行目まで と決まっていて 数式で、"" を入れているなら、
ワークシート関数 の MAX関数を使えば "" は読み飛ばしてくれますから
 MAX(D2:D256) で求める事が出来ます。
 
Sub test2()
  Dim maxValue As Long
 
  maxValue = WorksheetFunction.Max(Range("D2:D256"))
 
  MsgBox "最大値は" & maxValue & "です。"
End Sub

投稿日時: 22/03/07 17:40:53
投稿者: nonotti

よろずや 様
Suzu 様
 
丁寧にご回答いただき有難うございました。
 
記事のコピペを引用して質問してしまい、混乱を招いたことをお詫びいたします。
 
規約上問題でしたら、今後から気を付けて参ります。
 
ご回答いただいた内容で理解できました。
ありがとうございます。
 
今後ともよろしくお願いいたします。