- ベストアンサー
エクセルのマクロでアラームを作成したいのですが
sample_の回答
Option Explicit Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Const FILE_NAME As String = "C:\WINDOWS\Media\chimes.wav" Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" _ Or Target.Address = "$B$2" Then Call Check End Sub Sub Check() 'Aの値はB1に入っているとし 'Bの値はB2に入っているとする Dim A_Value As Integer: A_Value = Range("B1") Dim B_Value As Integer: B_Value = Range("B2") '指定された範囲の数字が入っているかのチェックは省略 '正×正 0以上 負×負 0以上なので If 0 < A_Value * B_Value Then 'アラームを鳴らす条件 If (0 < A_Value And A_Value < B_Value) _ Or (A_Value < 0 And B_Value < A_Value) Then 'アラームを鳴らす Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) End If End If End Sub 前提: シートモジュールに記載しました。 B1にAの値 B2にBの値が入っていると過程し、-3~3の値のどれかが入力されているとしました。 (細かいチェックとかは省略していますということです。) 値を入力した際のChangeイベントをトリガーにアラームをならす条件に該当するかチェックし WindowsAPIを使って音をならしています。 mciSendString関数をネットで検索するとぽろぽろ情報がひっかかると思います。 コードの流れはこんな感じです。 もうちょっと細かい説明 ・Private Declare Function mciSendString ~ WindowsAPIを使いたいので宣言(Declare)してmciSendString関数が使えるようにしています。 ・Private Const FILE_NAME As String~ 今回アラームとして使ったサウンドです。 windowsXPに入っている標準の音を使っています。 ・Private Sub Worksheet_Change~ シート内の値変化をトリガーに利用するためこのイベントを使っています。 ・ If Target.Address = "$B$1" _ Aの値、Bの値は B1,B2に記載しているのでそれらの時だけ、値チェックするようにしています。 ・Sub Check()~ A、Bの値をチェックし条件をみたすとき音をならす関数です。 ・Dim A_Value~ A、Bの値を取得しておきます。 ・If 0 < A_Value * B_Value Then 両者が正の時 A<Bの時と 両者が負の時 B<Aの時を調べたいので 両者が正、または負の時はかけ算をすると必ず0以上になるのでこれで判定しています。 ・If (0 < A_Value And A_Value < B_Value)~ 両者が正 かつ AよりBが大きいとき ・Or (A_Value < 0 And B_Value < A_Value) Then または、両者が負の時で AよりBが小さい時 ・Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) 音をならす 以上
関連するQ&A
- エクセルで…関数かマクロか?
エクセル2007を使っています。 3列のシートがあるとしますね。 それぞれの列は、「A 現金残高」、「B 収入」、「C 支出」とします。 たとえば、3行目から数値を入れるとします。 普通ならば、B3 (収入)のセルに 1000(円) と数字を打ち込めば、 A3 (現金残高)のセルに同じく 1000が入るよう、=B3 とすればいいと思います。 同様に、C3のセルに1000と入力すれば、 A3のセルには -1*(C3) とすることで、現金残高が収入と支出によって、 プラスマイナスされるようにし、あとで各列を∑すれば済みますね。 でも、いま僕がやりたいのは、 たとえば現金残高 A3のセルに -1000 と入力すると、自動的に C3のセルに 1000 と 表示され、A3に 1000 と入力すると、 B3のセルに 1000と表示されるようにしたいのです。 要するに、現金残高に入力した数値がプラスかマイナスかによって、 数字が表示されるセルを個別に指定し、指定したセルに計算結果を表示させたいわけです。 IF関数で、数値のプラスマイナスは判断できますが、任意のセルを指定させる方法が わかりません。 「もし…だったら 『任意のセルに』○○せよ」 というような指定はできるのでしょうか? もしくは、マクロを使わないとできないのでしょうか? いろいろサイトも調べてみましたが、力不足で回答にたどり着くことができませんでした。 よろしくご教授お願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセルでマクロの作成
a列の1行目が『No』の項目名以下の行が空欄になっています。 b列に『あ』があれば同じ行のa列を空白にして、次のb行が空欄であれば同じ行のa列に1の数字を、b列の空白行に対しa列には連続番号が入るようにしたいのですが、マクロがどうしてもうまくできません。 どなたか、初心者向けに解りやすい解説と実際のマクロを教えていただけませんか? 初心者でうまく説明できてないかもしれませんがよろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルマクロについてです
以下のようなマクロで、条件A1~A4のいずれかを満たした場合は、その時点でFor-Nextを抜け(例えばi=1のときにどれかの条件を満たせばi=2,3,4は検討しない)、 さらにNの数字が増えたときに、If以下の検討をするとき、条件A1~A4の中で既に満たされた条件が含まれている行は無視する、 というようにしたいのですが、どのようにすればよいでしょうか。 N=0 Do Until N = 10 For i = 1 To 4 If 条件A1 Then B1 ElseIf 条件A2 Then B2 ElseIf 条件A3 Then B3 ElseIf 条件A4 Then B4 EndIf Next i N = N + 1 Loop
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロで教えてください
エクセルのマクロで教えてください A1に入っている値が変化するごとにD列に順にその変化を出力していきたいのですが マクロではどのようにしたらいいでしょうか A1には=C1+C2というような計算式が入っていてC2の数字を変えて計算結果が変わるごとに出力したいのですが
- ベストアンサー
- オフィス系ソフト
- Excelのマクロ作成について
電車の時刻表がありまして A B C D E F G H I J K L M N 1 2 あ 1054 1425 1555 1725 3 い 0 1059 1430 1600 1730 4 う 5 1104 1235 1435 1505 1605 1735 5 え 7 1105 1237 1437 1507 1607 1737 6 お 9 1108 1239 1439 1509 1608 1739 7 か 1110 1240 1430 1440 1510 1610 1740 1840 8 き 9 く A列は駅の名前、B列の数字は0と入力した駅からそれぞれの駅までの平均的な所要時間でC列以降は時刻です(:は抜いて対応) マクロで作りたいことは、 0と書かれた行の時刻を1セルずつ見ていき、そのセルに色を付けます。 次にB列の最終行の数字の所までそれぞれ足して合致していいるものがあれば色を塗る。 もし途中で合致しないものがあればその瞬間今まで色を塗っていたものを元の状態(色を塗っていたものを全て真っ白)に戻して次のセルを見ていき、最後のセルまで行う。 上の例の場合 (1)まず0と書かれた行の最初のセルC3を見て確認のため色を付けます。 (2)次にC3とB4の時刻を足して合致するものが4行目にあれば色を付けます。このときC4に1104がありますので色を付けます。 (3)今度はC3とB5の時刻を足して合致するものが5行目にあれば色を付けるのですが、このとき5行目には1106はないので、この瞬間、C3とC4に付けた色をデフォルトの状態にし以降のチェックは行わず、D3のチェックに移ります。 (4)次はD3に移り、C列同様、D3とB4~B6の時刻を足したものがそれぞれ4行目、5行目、6行目にあるかチェックします。省きますが、全部あるのでD3、E4、E5、E6に色が付き、E3に移ります。 (5)E3も同様に行います。E3とB4~B5の時刻を足して対応したものがそれぞれ3行目、4行目にあるのですが、E3+B6の時刻が6行目には無いのでE3、G4、G5の塗ったセルをもとに戻し、F3に移動します。 (6)F3に移動し以下同様です。対応するものがあるのでF3、H4、H5、H6に色が付き、0と書かれた行の最終行なので処理が終了します。 ※B列の平均所要時間はいつもB3から入れるわけではなく、ケースバイケースで変わってきます。 一応、この例をマクロを使って無事動いた時の画像も載せておきます といったマクロを作りたいのですが、初心者のため手も足も出ません。 時間もないので、マクロ作成に自信のお有りの方、もしよろしければこれを実装するためのコードを教えて頂けないでしょうか? 丸投げで誠に申し訳ございません。 長文失礼足しました。
- ベストアンサー
- Visual Basic
- エクセルのマクロについて教えてください。
エクセルのマクロについて教えてください。 a b c d A 1 2 3 4 B 5 6 7 8 ↓ aA1 bA2 cA3 dA4 aB5 bB6 cB7 dB8 という並びになるようにしたいので、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセル マクロ
エクセルを使って12桁の数字をsheet A と sheetBとの違いを調べる、表?をつくりたいのですが、マクロを使えば簡単と聞きました、マクロは全くわからないので、マクロを使わなくてもいいのですが、良い方法はありますか? 例えば エクセルの sheet A に 12桁の数字を50, sheet Bに12桁の数字を50, その中からsheetAにはあってsheetBには無いもの、sheetAには無くてsheetBには有るもの を色をつけてわかるようにしたいと思っています。 みなさんよろしくお願いいたします。
- 締切済み
- その他(ビジネス・キャリア)
- エクセルかマクロで・・・
エクセル関数かマクロで作りたいのですが、 A列に数字B列に個数を入力していくとします。 A列の数字をB列の個数分だけC列に表示したいのです。 例えばA1に300、B1に5、A2に500、B2に6と入力した場合、 C1からC5に300、C6からC11に500、と表示するにはどうしたらよい でしょうか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
お礼
誠にありがとうございます! おかげさまで問題が解決して本当に助かりました! 初めての質問投稿でしたがここまで詳しく丁寧にご返答頂けるとは思ってもみませんでした。 お礼申し上げます!