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

こんにちは、エクセル365を使っています。

画像のように固定値と変動値が8種類あります。
画像では6種類(黒枠線が1種類として)ですが、後列にBG~BH BK~BL にも同じものがあります。

各々、独立したもので、設定ボタンを押し設定をし、変動値が既定の状態になったらメールを送信したいと思います。
(ちなみに変動値はRTD関数にて、サーバーに請求しています。)

具体的には設定ボタンを押した時に、AIの数値よりAJの数値のほうが小さい場合、AJの数値がAIの数値を上回った時に、同じく設定ボタンを押した時に、AIの数値よりAJの数値が大きい場合、AJの数値がAIの数値を下回った場合に一度だけメール送信をしたいです。

これを、8種類全てに動作させたいと思います。
また、設定ボタンを再度押した場合、そこからまた再動作するようなものが希望です。

詳しい方、教えて頂けませんでしょうか。
よろしくお願い致します。

「エクセル マクロ セル数値が条件を満たし」の質問画像

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

  • どう思う?

    こんにちは、遅くなりすみません。

    試して見ましたまずは3行目だったものを4行目に書き換えました。
    以下のようなものです。

        Case "AJ4"
          flg(1) = 0

        Case "AJ4"
          flg(1) = 1

    ARのみ行番号が指定されていない様でしたので、同じように4を追記しておきました。
    良かったでしょうか?

    その後オブジェクトライブラリの参照設定を行いました。

    この後、VBEの画面を閉じたのですが、閉じた瞬間に、AJ2 become largeのmsgboxが出てOKを押すとコンパイルエラーが出ます。

    内容は、ユーザー定義型は定義されていません。
    行は outlookObj As Outlook.Application の部分がブルーアウトしています。

    これはどこが悪かったのでしょうか。
    よろしくお願いいたします。

      補足日時:2020/06/22 21:01

A 回答 (2件)

#1です。


行番号がないので適当でした (#1はボタンが3行目にある場合)
ボタンが4行目にあるとした場合、下記 Sub btn()内を変更してください。

If Range(celAdrs).Offset(-2).Value <= Range(celAdrs).Offset(-2, -1).Value Then
Select Case celAdrs
Case "AJ4"
flg(1) = 0

・ * #1を参考に変更


End Select
Range(celAdrs).Offset(-2).Interior.Color = RGB(200, 200, 255)
Else
Select Case celAdrs
Case "AJ4"
flg(1) = 1

・ * #1を参考に変更


End Select
Range(celAdrs).Offset(-2).Interior.Color = RGB(255, 200, 200)
End If


並列に動作を実行することは出来ませんが、
フラグを順番に監視して条件を満たした時にアクションを起こす事は出来ます。
    • good
    • 0
この回答へのお礼

ありがとう

あ、こちらの画像は行番号映って居ませんでしたね、すみません。

4行目で間違いないので、変更して試してみたいと思います。

何度も回答を頂き、ありがとうございます。

お礼日時:2020/06/22 11:51

下記コード全てを該当のシートモジュールに


Microsoft Outlook XX.X Object Libraryの参照設定 必須です。

Dim flg(1 To 8)
Sub btn()
Dim celAdrs As String
  celAdrs = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address(0, 0)
  If Range(celAdrs).Offset(-1).Value <= Range(celAdrs).Offset(-1, -1).Value Then
    Select Case celAdrs
    Case "AJ3"
      flg(1) = 0
    Case "AN3"
      flg(2) = 0
    Case "AR"
      flg(3) = 0
    Case "AV3"
      flg(4) = 0
    Case "AZ3"
      flg(5) = 0
    Case "BD3"
      flg(6) = 0
    Case "BH3"
      flg(7) = 0
    Case "BL3"
      flg(8) = 0
    End Select
    Range(celAdrs).Offset(-1).Interior.Color = RGB(200, 200, 255)
  Else
    Select Case celAdrs
    Case "AJ3"
      flg(1) = 1
    Case "AN3"
      flg(2) = 1
    Case "AR"
      flg(3) = 1
    Case "AV3"
      flg(4) = 1
    Case "AZ3"
      flg(5) = 1
    Case "BD3"
      flg(6) = 1
    Case "BH3"
      flg(7) = 1
    Case "BL3"
      flg(8) = 1
    End Select
    Range(celAdrs).Offset(-1).Interior.Color = RGB(255, 200, 200)
  End If
End Sub
Private Sub Worksheet_Calculate()
Dim i As Integer, n As Integer: n = 1
  For i = 36 To 64 Step 4
    If flg(n) = 0 Then
      If Cells(2, i).Offset(, -1) < Cells(2, i) Then
        MsgBox (Cells(2, i).Address(0, 0) & " :became_large"): flg(n) = 2
        Cells(2, i).Interior.Color = xlNone
        Call OLK_Mail
      End If
    End If
    If flg(n) = 1 Then
      If Cells(2, i).Offset(, -1) > Cells(2, i) Then
        MsgBox (Cells(2, i).Address(0, 0) & " :became_small"): flg(n) = 2
        Cells(2, i).Interior.Color = xlNone
        Call OLK_Mail
      End If
    End If
    n = n + 1
  Next
End Sub
Sub OLK_Mail()
'Microsoft Outlook XX.X Object Libraryの参照設定 必須
Dim outlookObj As Outlook.Application
Dim mailObj As Outlook.MailItem
  Set outlookObj = New Outlook.Application
  Set mailObj = outlookObj.CreateItem(olMailItem)
  With mailObj
    .To = ""       'メール宛先
    .CC = ""       'メールCC
    .Subject = ""    'メール件名
    .Body = ""      'メール本文
    .BodyFormat = olFormatPlain  'メール形式に設定
    .Display       '表示
    .Send        ’送信
  End With
End Sub
    • good
    • 1
この回答へのお礼

Qchan1962 様

色々教えて頂き、ありがとうございました。
ちょっと勉強して利用できるように頑張ります。

お礼日時:2020/06/25 14:11

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

このQ&Aを見た人はこんなQ&Aも見ています