EXCEL VBAについての質問です。
初心者です。宜しくお願い致します。
使用環境はWindows 2000 service pack4
Excel 2000.
=質問=
セルA1~A10に数値を入力しセルB1はその合計だとします。
セルB1が0以下になったときに"メッセージ1"が表示するようにするには以下のプログラムで実行できます。
Private Sub Worksheet_Calculate()
If Range("B1") < 0 Then
メッセージ1 '起動するマクロ名
End If
セルA1~A10に数値を入力した際、すでにA3の入力でセルB1が0以下で、そのA4~A10に数値を順に入力してもセルB1はマイナスのままだったとします。
上記、プログラムではA4~A10を入力する都度メッセージ1が表示されてしまいます。
メッセージ1はセルB1がはじめてマイナスになったときだけ表示させるようにするにはどのように変更すればいいでしょうか?
ご教授の程宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
今回使用する myFlg は、モジュールレベルで宣言する必要があります。
宣言する場所はモジュールの最上部で、最初のプロシージャの上の部分です。(宣言セション)
変数については、こちらを参考に
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VB …
わざわざ画像まで添付していただき、誠にありがとうございます。
先頭行にフラグを立てることで繰り返し注記が表示されることは無くなりました。
以上、お礼申し上げます。
No.2
- 回答日時:
フラグを付けるだけで良いでしょう
Dim myFlg As Boolean
Private Sub Worksheet_Calculate()
If Range("B1").Value < 0 And myFlg = False Then
MsgBox "マイナスになりました。", 48
myFlg = True
End If
End Sub
Range("B1") ⇒ Range("B1").Value
Valueプロパティは付けるようにしましょう
この回答への補足
早速の回答ありがとうございます。
アドバイスに従って、新規ファイルにVBAを組み込んだところ、正常に機能しました。(条件が1度発生した時のみメッセージが表示される。)
しかし、実際に使用するファイルの中には他の条件やプログラムが記載されており、その中にアドバイス文を入れ込むと動作しません。(毎回、メッセージが表示される。)
Dim myFlg As BooleanをPrivate Sub Worksheet_Calculate()より上の行に記載しなければうまく動かないようですが、その場合、さらに上に記載しているPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
文に対しコンパイルエラーが発生してしまいます。
以下に実際に使用するためのプログラムの抜粋を記しました。
以下に修正すべきかご教授いただけると助かります。
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
Range("$CC$26") = "A"
Else: Range("$CC$26") = ""
End If
End Sub
Private Sub CommandButton5_Click()
Sheets("F3").Select
End Sub
Private Sub CommandButton6_Click()
Sheets("F1").Select
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Address = "$D$11:$E$11" Then
With UserForm1
.ListBox1.List = Array("A", "B", "C")
.Show (0)
End With
ElseIf .Address = "$D$13:$E$13" Then
With UserForm2
Select Case Range("$D$11")
Case "A"
.ListBox1.List = Array("あ, "い","
う", "え", "お")
Case "B"
If Range("$CH$48").Value = "1A" Then
.ListBox1.List = Array("か", "き")
ElseIf Range("$CH$48").Value ="3A" Then
.ListBox1.List = Array("く")
ElseIf Range("$CH$48").Value ="2AN" Then
.ListBox1.List = Array("け")
ElseIf Range("$CH$48").Value ="3AN" Then
.ListBox1.List = Array("こ")
End If
Case "C"
.ListBox1.List = Array("さ", "し","
す", "せ")
End Select
.Show (0)
End With
End If
End With
End Sub
(以下、アドバイスいただきた文)
Dim myFlg As Boolean
Private Sub Worksheet_Calculate()
If Range("CC6") < And myFlg = False Then
MsgBox "注意1のメッセージ", 48
myFlg = True
End If
If Range("CF33") >= 3 And myFlg = False Then
MsgBox "注意2のメッセージ", 48(←48の意味を教えていただければ幸いです。)
myFlg = True
End If
(以下はセルCF42が1になったときに4秒間だけ注意3のメッセージを表示するプログラムです。)
If Range("CF42").Value >= 1 Then
注意3
End If
End Sub
Sub 注意3()
Dim myShell As Object
Set myShell = CreateObject("Wscript.Shell")
myShell.PopUp "注意3のメッセージ"
Set myShell = Nothing
End Sub
以上、度重なる質問で恐縮ですが宜しくお願い致します。
No.1
- 回答日時:
こんにちは。
ご質問のような場合はセルの値をチェックするのとは別のアプローチで
グローバル変数をフラグとして使えば対処できると思います。
モジュール先頭に
Dim blnCheckData as Boolean
などにして
IF BlnCheckData = False Then
'マイナスチェック処理
BlnCheckData = True
End IF
上記でできるかと推測します。
はずしてたらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) Excelで祝日を除く1回目の金曜日を返す 3 2023/01/31 16:07
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) Excel 関数 数式 について 2 2022/09/02 21:45
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) エクセルの計算式について教えて下さい。 sheet1のA1セルの値をsheet2のB1セルに返し、尚 1 2022/05/25 11:32
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
メッセージボックス 1度だけ表示したい
Excel(エクセル)
-
最初の1回のみにボタンクリックでマクロ実行する
Visual Basic(VBA)
-
excel VBA YESNO付きのメッセージボックスが2回出てしまいます。
Excel(エクセル)
-
-
4
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
5
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
8
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
9
VBAで文字列を数値に変換したい
Excel(エクセル)
-
10
Excelで,特定のシートを開いたときにメッセージボックスを表示するに
その他(Microsoft Office)
-
11
UserForm1.Showでエラーになります。
工学
-
12
VBA 2回実行してしまう?
Windows 7
-
13
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
14
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
15
エクセルVBA 連続してメッセージで判断
Access(アクセス)
-
16
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
17
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
20
初回起動のみ判別したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データが入力されている隣のセ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
セル色を5秒間隔で変える
-
EXCELマクロ 保護されているシ...
-
Windowsで動くVBAがmacOSで動か...
-
エクセルVBA(実行時エラー438...
-
アクティブセルの行のセルを複...
-
Excelのセル内にある図形を削除...
-
Swing 編集不可でも選択可能なJ...
-
Excel VBA ダブルクリックで入...
-
エクセルでオ-トフィルと
-
Sheet2からオートフィルターで...
-
【VBA】参照値を1ずつ増やして...
-
エクセルのVBAでダブルクリック...
-
VBAについて教えてください。 E...
-
StringGridでの文字入力制限
-
エクセル: セルの枠を超えて表示
-
エクセルのセル内の余白の設定...
-
IF関数で空欄("")の時、Null...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELマクロ 保護されているシ...
-
データが入力されている隣のセ...
-
エクセルテキストボックスの文...
-
VBA セルに合わせて移動するが...
-
VBAで、貼り付け禁止命令を実現...
-
VBAで丸をつけたいです。
-
セル色を5秒間隔で変える
-
ダブルクリックすると現在の時...
-
ハイパーリンクされているファ...
-
エクセルVBA(実行時エラー438...
-
メッセージを1度だけ表示したい。
-
Jtableの特定のセルの背景色や...
-
(VBA)アクティブセルを起点に...
-
Windowsで動くVBAがmacOSで動か...
-
Swing 編集不可でも選択可能なJ...
-
Excelのセル内にある図形を削除...
-
マクロを使って画像を貼り付け
-
FileSearch2007に変わる構文に...
-
Excel VBA セルを指定個数ラン...
-
StringGridでの文字入力制限
おすすめ情報