• ベストアンサー

エクセルの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週間くらいなので、なにぶんわからないことだからで、もしわかる方がいらしたら教えてください。

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

  • ベストアンサー
noname#60992
noname#60992
回答No.3

再度、(excel を使わないのではずしているかもしれませんが、) まず IsNumeric(Target) でエラーが出るのか Target.Value >100 でエラーが出るのか それを検証しましょう。 もしisNumericでエラーが出るなら、target(range型)はIsNumericの判定はできないということだと思います。(target.valueなど、適切なものに変える必要あるのかな?) Target.Value > 100 でエラーが出ているなら、 Target.value を数値型に変更(Val(Target.Value)>100)すればよいと思います。 あとは、どのようなrangeがtargetに入っているのかによって、 target.valueが取得できるかどうかが変わる可能性もあるのではないかと推測しますが、よくわかりません。  office系ソフトのほうで質問したらすぐ回答がつくと思いますよ。

mm13mm
質問者

お礼

ご親切にアドバイスありがとうございます。 office系の方で質問したと思います。 もし、また質問などでお世話になることがあったら、よろしくお願いします。

mm13mm
質問者

補足

お世話になっています。 IsNumeric(Target) でエラーが出るのか、Target.Value >100 でエラーが出るのか?という質問ですが、両方としてもエラーがでました。 (Val(Target.Value)>100)にしても、やっぱりダメでした。 16Augustのおっしゃる通り、office系の方で質問したいと思います。いろいろ親切にありがとうございました。

その他の回答 (2)

noname#60992
noname#60992
回答No.2

エクセルVBAを使ったことがないので、はずしているかもしれませんが "a" > 100 のような判定をしようとした場合(文字列と数値の比較) 「型が一致しません」というエラーがでると思います。 エラーが出たときの target.value は数値でしたか?

mm13mm
質問者

補足

target.valueですが、文字列として数字がエクセルの方へ取り込まれているようです。 16Augustさんのおっしゃる通り、文字列と数値では比較できないのかもしれません。こういう場合、文字列で出力されるデータを、マクロで数値へ変換しなければならないということでしょうか? 文字列を数値へ変換する場合、どのような方法があるのでしょうか? 文字列を数値に変換するというので、yahooの知恵袋の方で、文字列を数値へ変換するようなマクロがありまして、それをためしたのですが、やぱり、If IsNumeric(Target) And Target.Value > 100 Thenのところで、型が一致しませんとエラーがでてしまいまして、困っています。 参考URL:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413233289

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

質問のコードでよいように思いましたが、 >型が一致しませんとエラー?がでてしまいます、が再現できませんでした。 私の場合は英字を入れても 音が鳴りませんでしたので下記のように(ORに)しました Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then MsgBox IsNumeric(Target.Value) If IsNumeric(Target.Value) = False Or Target.Value > 100 Then For i = 1 To 10 Beep Next i MsgBox "範囲外です" End If End If End Sub をやってみてください。 エクセルでは、全角の数字の入力時には数値に強制修正されます。

mm13mm
質問者

補足

返事が遅くなりました。 会社の方で上述のマクロを入力してやってみたのですが、うまくいきませんでした。 エクセルの方へ出力されるデータが文字列で保存されるため、うまくいかないのではないと思います。

関連するQ&A