エクセルで測定データが100以上になったら警告音をならす方法

このQ&Aのポイント
  • エクセル2000を使用している際に、測定データを取り込み、D列の数字が100以上になった時に警告音をならして知らせる方法について教えてください。
  • 現在、エクセル2000で実験の測定データを取り込んでいます。D列の数字が100以上になった場合に警告音を鳴らして知らせる方法を教えてください。
  • エクセル2000を使って実験の測定データを取り込んでいます。D列の数字が100以上になったら警告音を鳴らす方法を教えてください。
回答を見る
  • ベストアンサー

警告音をならす方法

こんばんは。 昨日まで、違うカテゴリーの方で質問をしていたのですが、こちらの方がよい回答が得られるのではないかということを教えていただき、こちらに再度質問をしたいと思っています。よろしくお願いします。 私はエクセル2000を使用しています。 現在やろうとしていることは、 実験の測定データをエクセルに取り込み(測定データは文字列としてエクセルに取り込まれます)、D列の数字が100以上になったら音をならして知らせるようにしたいと考えております。 それで、以下のマクロを組んでやってみました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If IsNumeric(Target) And Target.Value > 100 Then Beep    MsgBox "範囲外です" End If End If End Sub しかし、If IsNumeric(Target) And Target.Value > 100 Thenのところで、型が一致しませんとエラー?がでてしまいます。 まだ、VBAを勉強しはじめて2週間くらいなので、なにぶんわからないことだからで、もしわかる方がいらしたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.3

Private Sub Worksheet_Change(ByVal Target As Range) '  Dim ctarget As Range  ←これ要りません   Dim rrng As Range   Dim crng As Range   Set rrng = Application.Intersect(Target, Columns(4))   If Not rrng Is Nothing Then    For Each crng In rrng      If IsNumeric(crng.Value) And crng.Value > 100 Then       Beep       MsgBox crng.Address & " 範囲外です"       End If      Next    End If End Sub

mm13mm
質問者

お礼

今日、会社で試したところ音がなりました。 本当にありがとうございます。

その他の回答 (2)

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.2

>実験の測定データをエクセルに取り込み(測定データは文字列としてエクセルに取り込まれます)、 この取り込み方法がポイントでしょうか? '=========================================================== Private Sub Worksheet_Change(ByVal Target As Range)   Dim ctarget As Range   Dim rrng As Range   Dim crng As Range   Set rrng = Application.Intersect(Target, Columns(4))   If Not rrng Is Nothing Then    For Each crng In rrng      If IsNumeric(crng.Value) And crng.Value > 100 Then       Beep       MsgBox crng.Address & " 範囲外です"       End If      Next    End If End Sub

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

IsNumeric(Target) の部分を WorksheetFunction.IsNumber(Target) にしてみる?

関連するQ&A

  • エクセルのVBAで、音をならす方法

    こんばんは。私はエクセル2000を使用しています。 現在やろうとしていることは、 実験の測定データをエクセルに取り込み(測定データは文字列としてエクセルに取り込まれます)、D列の数字が100以上になったら音をならして知らせるようにしたいと考えております。 それで、以下のマクロを組んでやってみました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If IsNumeric(Target) And Target.Value > 100 Then Beep    MsgBox "範囲外です" End If End If End Sub しかし、If IsNumeric(Target) And Target.Value > 100 Thenのところで、型が一致しませんとエラー?がでてしまいます。 まだ、VBAを勉強しはじめて2週間くらいなので、なにぶんわからないことだからで、もしわかる方がいらしたら教えてください。

  • 別の列のデータを検索してセルの色を変える

    Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column <> 1) And (Target.Column <> 5) Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Target.Offset(0, 1).Value = Now() End Sub 上記のスクリプトで 「1列目にナンバーを記入すると2列目に、5列目にナンバーを記入すると6列目に時刻が自動的にセルに入る」ようになっています。 これに追加で 「5列目にナンバーが記入されると、そのナンバーと同じものを1列目から探し出して、1列目のセルの色を薄い青にする。なければなしとアラートを出す」 ように改造したいのですが どうすればいいでしょうか? どうかお願いいたします。

  • エクセル 加算 

    1つのセルに数字を入力すると加算されているマクロを探していたら 以下の回答がありました Dim memo Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value <> "**" And IsNumeric(Target.Value) = False Then Exit Sub Application.EnableEvents = False If Target.Value = "**" Then memo = 0 Else memo = memo + Target.Value End If Target.Value = memo Application.EnableEvents = True End Sub このマクロですがA1に入力した場合に適用しますが、このマクロをたとえばA1からC1の範囲で使用した1場合にどのようなマクロをすればよいかわかりません それか、このマクロではそのようなことができるのかもわかりませんので教えて頂けないでしょうか

  • Excelのworksheetどこ間違えてますか?

    Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") Else Target.Offset(0, 1).Value = "" End If End Sub 以前、このサイトで教えてもらったワークシートのプログラムです。 簡単に言えばA列に1から5までの値を入れれば現在時間をB列に 表示し、それ以外の場合は何もいれないと言ったものです。 以前はできたんですが最近また入れるとできなくなっていました。 どこかおかしいとこありますでしょうか??

  • VBAの時間入力について

    先日、時間を文字列で、HH:mmのフォーマット入力するPGを教えて頂き、 内容理解をしているのですがわからない部分があります。 ★の部分の条件で、00:00も入力したいです。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から 'Intersect:http://officetanaka.net/excel/vba/tips/tips118.htm 'Is Nothing:nullではない 'Selection.Count <> 1:選択数が1以下ではない(<> :等しくない) ' Not IsNumeric(Target):数値ではない If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub ' 'Target:セルの値は24:00以下 '2つの数値の除算を行いし,その剰余を返す 'Mod:2つの数値の除算を行いし,その剰余を返す '★ここで00:00時も入力したい。 If Target <= 2400 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

  • 時間フォーマット VBA

    VBA初心者です。Javaなどはある程度できるレベルのものです セルにHH:mmフォーマットで時間を入力したくて以下のコードで実行すると12列目は正常に入力でき、 13列目にも同じように指定シたいです。 試したのは If IntersectからEnd Ifまでを最終行の手前にColumns(13)で全体を追加しました。 しかし、13列目はVBAが効いていません また、12列目に入力した値を消すと : (コロン)が残ってしまいます。 また、ThisWorkBookにこのコードを書いてもVBAが効いていません。 このファイルは作業中のシートに対するものでしょうか。 だとしたら、作業中シートに対して行うにはどう書いたらよいのかわからずにおります。 細かい質問ですみません。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 Or Not IsNumeric(Target) Then Exit Sub ' Debug.Print "Target==" & Target If Target <= 2359 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

  • 二つの構文を繋げるのには

    よろしくお願いいたします。 WIN7 EXCELL2010 です。 重複を防止するために入力規則で防ごうとしましたがユーザーフォームでデーターシートに記入すると データー 入力規則 では コピー ペーストになりできないことが調べて分かりました。 そこでマクロを適用しようとおもいます。 現在下記のマクロは適用しています。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("K2:M100")) Is Nothing Then Exit Sub 'ココで範囲指定 Application.EnableEvents = False If Target.Value = 1 Then Target.Value = "入昼" If Target.Value = 2 Then Target.Value = "入夕" If Target.Value = 3 Then Target.Value = "入朝" If Target.Value = 4 Then Target.Value = "退朝" If Target.Value = 5 Then Target.Value = "退昼" If Target.Value = 6 Then Target.Value = "退夕" If Target.Value = 11 Then Target.Value = "パ" If Target.Value = 12 Then Target.Value = "米" If Target.Value = 13 Then Target.Value = "粥" If Target.Value = 14 Then Target.Value = "ミ" If Target.Value = 15 Then Target.Value = "毎" Application.EnableEvents = True End Sub 上記のマクロに下記のマクロを追加したいのですがどう繋げていいいのかが分かりません。 END IF, END WITHでいろいろ試しましたがうまくいきません。 どう繋げればいいいかをご指導いただけませんでしょうか。 Private Sub Worksheeet_Change(ByVal Target As Rage) If Targeet.Count <> 1 Then Exit Sub If Targeet.Row > 10 Then Exit Sub If Targeet.Column <> 1 Then Exit Sub If Application.WorksheetFunction.CountIf(Range("O:O"), Target.Value) > 1 Then MsgBox "部屋番号と入所日が重複しています" Target.Value End If End Sub

  • エクセル VBAマクロ if文 はどうすれば?

    先ほど質問したのですが、さらにわからなくなったのでお願いします 先ほどの質問 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://okwave.jp/qa/q7236338.html >変数と式の両立は難しいでしょうからどうすればよいのでしょう?  ⇒関数では出来無いのはエクセルの常識ですのでマクロ(VBA)組込みになります。 一例です。 対象シートタブ上で右クリック→コードの表示→以下のコード貼り付けてA1に枚数を入力して お試しください。 サンプルコード Private Sub Worksheet_Change(ByVal Target As Range) 単価 = 5 If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then  Application.EnableEvents = False  Target.Value = Target.Value * 単価  Application.EnableEvents = True End If End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↓変更&応用したのですが、、、、 EX:(セル)    セル番号  用紙種類1~3       用紙種類    C12   A3モノクロ1     D12  A3カラー1    C13   A3モノクロ2     D13  A3カラー2    C14   A3モノクロ3     D14  A3カラー3 ※金額の違いは、モノクロとカラーの値段が違うだけ  1~3は金額的な違いはない とあった場合、 ためしに先ほどのを応用して用いたのですが 変更点は、用紙サイズ、カラーの有無による金額        出力先セルの番号 Private Sub Worksheet_Change(ByVal Target As Range) を Private Sub A4_mono_1(ByVal Target As Range) Private Sub A4_mono_2(ByVal Target As Range) ・             ・            ・ と変更したのですがうまく動作しなかったのですが、 どういった点が悪かったのでしょうか? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 最終的な質問↓ 上記のものはVBAマクロ文は基本1つのみなので、if文で作らなくてはいけないということが分かったのですが、そこでさらに疑問が浮かびました、 Private Sub Worksheet_Change(ByVal Target As Range) If or(target.columns = C12:C14) Then 単価1 = 7.6 If Intersect(Target, Range("C12:C14")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then Application.EnableEvents = False Target.Value = Target.Value * 単価1 Application.EnableEvents = True単価1 = 7.6 elseif or(target.columns = D12:D14) Then 単価2 = 30.6 If Intersect(Target, Range("D12:D14")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then Application.EnableEvents = False Target.Value = Target.Value * 単価2 Application.EnableEvents = True End If End Sub としたっ場合全く式になっていません どのようにすればよいのでしょう?

  • こんばんは、watabe007さん。

    961awaawaです。 >シートモジュールに貼り付けてお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Intersect(.Cells, Range("L:M")) Is Nothing Then Exit Sub If .Row < 3 Or .Value = "" Then Exit Sub If Not IsNumeric(.Value) Then Exit Sub .Offset(, 3).Value = Cells(.Row, .Value).Value End With End Sub というソースを作って頂いたのですが、既に各sheetにprivate sub からなるソースが入ってましてコンパイルエラー(名前が適切ではありません Worksheet_Change)となります。他に方法等頂けましたらありがたいです。

  • Excel VBA 一定の数値以下で音を鳴らす

    一つのセル内の数値(VBAにより、1秒ごとに更新される流動的な数値です)において、-2以下になるとすぐにBEEP音が鳴る設定をしたいのですが、何故か1分ごとにしか鳴りません。 今のモジュールは、標準モジュールに Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Sheet1に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Range("Q6") < -2 Then Call Beep(2000, 500) Call Beep(2000, 500) End If End If End Sub と入力しています。 改善方法をどうかご教授願います。

専門家に質問してみよう