• ベストアンサー

エクセルの特定のセルに入力があった場合に動くマクロ

エクセル2000です。 仮にSheets("Sheet1"),range("F5")に偶数が入力された場合、マクロA、奇数が入力された場合マクロB、(消去された場合は何もしない)というのを行うにはどのように書けばいいのでしょうか?

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 以下のような感じでしょうか。 Dim temp As Variant temp = Sheets("Sheet1").Range("F5").Value If IsNumeric(temp) Then   If temp / 2 - Int(temp / 2) = 0 Then     '偶数の場合     マクロA   Else     '奇数の場合     マクロB   End If Else   'MsgBox "数値でない!" End If

joker999
質問者

補足

ありがとうございました。残念ながらうまくいきません。 下記のようにやってみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim temp As Variant temp = Sheets("Sheet1").Range("F5").Value If IsNumeric(temp) Then If temp / 2 - Int(temp / 2) = 0 Then '偶数の場合 マクロA Else '奇数の場合 マクロB End If Else 'MsgBox "数値でない!" End If End Sub F5以外のところに入力があった場合にまでマクロが動いてしまいます。あくまでF5に入力されたときに動くようにしたいのです。また、F5を消去してもマクロAが動いてしまいます。どうすればいいのでしょうか?

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

No.1です。 Worksheet_Changeイベントに記述することを、最初に言ってくれればよかったですね。 対応は、No.2やNo.3の方の通りです。 あと、未入力(消去)された場合は、IsNumericでTrueになってしまうのは、こちらの勘違いでした。 これも、No.3の方の方法で。 あと、偶数・奇数の判定方法ですが、セルF5に小数が入る可能性はあるのでしょうか? その場合は、奇数のマクロを動かすのでしょうか? それとも、何もしないのでしょうか? 私の場合は、整数でも小数でも2で割り切れない場合は、奇数のマクロが動きます。 一方、No.3の方のMod演算子の場合は、整数に丸められて判定されます。 つまり、 3.9→4に丸められて、偶数 3.1→3に丸められて、奇数 になります。 Worksheet_Changeイベントに記述しているので、間違って小数を入力しても、起動しますので、対応が必要かと思います。

joker999
質問者

お礼

何度もありがとうございます。 > Worksheet_Changeイベントに記述することを、最初に言ってくれればよかったですね。 すみませんでした。 F5 に偶数が入力された場合、マクロが動くようにするにはWorksheet_Changeイベントしか知らなかったのですが、標準モジュールに書いても同様なことができるのでしょうか? ボタンなどを押してマクロをうごかすのなら知っていますが。 > セルF5に小数が入る可能性はあるのでしょうか? そういう可能性もありますね。 考えてなかったです。その場合は、メッセージを出したいです。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんな感じでどうでしょう? Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target  If Not Application.Intersect(r, Range("F5")) Is Nothing Then    If IsNumeric(r.Value) And r.Value <> "" Then     If r.Value Mod 2 = 0 Then      MsgBox "偶数"     Else      MsgBox "奇数"     End If    End If  End If Next r End Sub

joker999
質問者

お礼

ありがとうございました。 勉強になります。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

>F5以外のところに入力があった場合 Changeイベント見張ってるのだからマクロが動くのはどうしようもないので、先頭にこんなことを書いておけば良いかと。 If Target.Address <> Range("F5").Address Then Exit Sub >F5を消去してもマクロAが動 F5が消去された時とは、=チェンジイベント時にF5の値が無い時と解釈すればこうとでもかけるかな。 If Target.Value = "" Then Exit Sub こういった例外処理的な作業は一つ一つつぶしていくしかないです。

joker999
質問者

お礼

ありがとうございました。 たすかりました。

関連するQ&A

  • Excelのマクロで特定のセルに罫線を引きたい

    Excelのマクロで特定のセルに罫線を引きたいのですが、 自分で実行したマクロを確認すると長過ぎてとても見づらいです。 それで調べて下記のようにまとめてみたのですが、 2つのシートをグループ選択する段階で止まってしまいます。 Dim 最終行 As Integer 最終行 = (Range("F65536").End(xlUp).Row) Sheets(Array("Sheet1", "Sheet2")).Select Sheets("Sheet1").Activate ActiveWindow.LargeScroll Down:=1 Range("F1:F" & 最終行).BorderAround LineStyle:=xlNone, _ Weight:=xlThin, _ ColorIndex:=xlAutomatic   With Selection.Borders(xlInsideVertical) End With どちらのシートも同じ列の最終行まで範囲選択することに変わりありません。 シンプルで簡単な書き方はないでしょうか? どうかよろしくお願い致します。

  • EXCELマクロ セルに入力したシート名から参照

    よろしくお願いします。 複数のシートがあり、それぞれ 1109,1110,1111,1112,1201,1202,1203,1204,1205 と名前がついています。 それぞれのシートには月毎のデータが入っています。 Sub Macro1() Columns("F:J").Select Selection.ClearContents Sheets("1205").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("C4:E5"), CopyToRange:=Range("F2:J2"), Unique:=False End Sub ↑のマクロをSheet3で作りましたが、4行目の「Sheets("1205")」の1205の部分を可変で作れればと 思っています。Sheet3のC3セル内に入力したシート名(1109や1203等)でフィルタ出来ると助かります。 どうぞよろしくお願いします。

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • エクセルマクロ セルの貼り付けについて

    マクロ初心者でわからないことばかりで困っております。 For i = 1 To 721 Step 80 Sheets("Sheet2").Activate Range("G3").Select ActiveCell.FormulaR1C1 = i Range("A1:D80").Select   Selection.Copy Sheets("Sheet3").Activate このあとにコピーしたもの「Range("A1:D80").Select」をセルに貼り付ける時に一回ごとに80行ずつずらして貼り付けたいのですが、そのような場合は どのようにRange指定して貼り付ければよろしいのですか? sheet2で演算した結果をsheet3のセルA1からA721まで貼り付けたいのです。一回の演算で80行まで計算されます。 わかりずらくて申し訳ありません。

  • エクセル マクロの記憶で記憶する自動マクロの編集

    こんにちわ。 エクセルで、マクロを記憶させて実行しています。 この自動で操作をしてくれるマクロを、50回繰り返したいのですが、 マクロの編集で文字を出して、この文字に何かを付け足すことで 50回繰り返すことはできますでしょうか? 以下、文字を出した画面です。(適当な操作を記憶させただけです) Sub あき() ' ' あき Macro ' マクロ記録日 : 2011/8/20 ユーザー名 : user ' ' Range("A1").Select Selection.ClearContents Sheets("RESULT_B(1)").Select Selection.AutoFilter Field:=1, Criteria1:="=", Operator:=xlAnd Range("A3").Select Sheets("Sheet1").Select Range("C1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("A3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("D1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("H3").Select ActiveSheet.Paste Sheets("Sheet1").Select End Sub このすべての作業を繰り返したいのですが、 お手数ですが、ご存知の方、 どこにどういう言葉を入力したらよいのか教えて頂けませんでしょうか。 当方素人の為、訳の分からない文章になってしまい 申し訳ありません。 よろしくお願い致します。

  • VBA 特定のシートが選択されていたら、セル入力

    Excel365。簡略化したVBAです。 現在、「あ」というシートが選択されていたら、「あ」シートの「A1」セルに「a」と入力 「い」というシートが選択されていたら「い」シートの「A1」セルに「i」と入力。 それ以外のシートが選択されていたら、何もしない。 If Sheets("あ").Activate Then Range("A1") = "a" ElseIf Sheets("い").Activate Then Range("A1") = "i" Else 以下省略 「い」シート選択中でも、「あ」シートの「a1」セルに入力され、シートを増やしても、「あ」シートの「a1」セルに入力されます。 「い」シートを入力していません。 簡単だと思っていたのですが…。 どんなコードになるのでしょうか?

  • エクセルの入力データーを別のシートの日付と氏名の交差点に記録していくマクロ

    現在別のカテゴリーで教えていただいたマクロなのですが、 Sheet1に入力されたデータをSheet2に転記するマクロに苦しんでおります。週明けには解決したいのでこのカテゴリーにも質問することにしました。 現在の状況は以下の通りです。 Sheet1    A   B   C   D   1 日付 氏名 成績 区分 2 9/23 佐藤 95  優 ここでマクロを実行すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21         80 5 9/21    95 6 9/21            95 7 9/22                 95 となって欲しいのですが、同じ日付で続けて入力すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21    95   80  95 5 9/21     6 9/21             7 9/22                 95 となってしまいます。 マクロは Sub Macro001() 'まず日付を転記します  Range("A2").Select  Selection.Copy  Sheets("sheet2").Select  Range("A65536").Select  Selection.End(xlUp).Select  ActiveCell.Offset(1, 0).Select  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _  False, Transpose:=False  Sheets("sheet1").Select  Application.CutCopyMode = False  Range("C3").Select '続いて転記します  Dim x As Long  Dim y As Integer  x = Application.Match(Sheets("sheet1").Range("a2"), Sheets("sheet2").Columns(1), 0)  y = Application.Match(Sheets("sheet1").Range("b2"), Sheets("sheet2").Rows(2), 0)  Sheets("sheet2").Cells(x, y) = Sheets("sheet1").Range("C2") End Sub です。 どうかよろしくお願いいたします。

  • エクセルのマクロで番号を入力する

    エクセルのマクロに取り組んでいます。 まだ初心者なのでわからないことが多いです。 エクセルのバージョンは2010です。 「入力シート」にボタンを作って、ボタンを押すと「1」と入力できる。 ほかの項目を入力し、保存し、「1」を消して、またボタンを押すと 「2」と入力になる。 このように、ボタンを押すと「1」「2」「3」…と入力できるようにしたいのですが、 どのようにマクロを組んだらよいでしょうか? また、自分で以下のように組んで見たところ、「1048576」となってしまい、「1」になりませんでした。 どこを直せばいいのでしょうか? Sub Macro4() ' ' Macro4 Macro ' 受付番号確認&入力 ' Worksheets("入力").Activate '入力シートをアクティブ MsgBox "次の受付番号→ " & Worksheets("データ").Range("A2").End(xlDown).Row Range("B2") = Worksheets("データ").Range("A2").End(xlDown).Row End Sub ご回答よろしくお願いします。

  • エクセル データ消去についてのマクロ

    セル内のデータをクリアする以下のマクロを設定しました。 Sub データ消去() Sheets("1").Range("B5:AF9").ClearContents Sheets("1").Range("B5:AF9").ClearConmments Sheets("1").Range("B11:AF15").ClearContents Sheets("1").Range("B11:AF15").ClearConmments Sheets("2").Range("B5:AF9").ClearContents Sheets("2").Range("B5:AF9").ClearConmments Sheets("2").Range("B11:AF15").ClearContents Sheets("2").Range("B11:AF15").ClearConmments Sheets("3").Range("B5:AF9").ClearContents Sheets("3").Range("B5:AF9").ClearConmments Sheets("3").Range("B11:AF15").ClearContents Sheets("3").Range("B11:AF15").ClearConmments End Sub 今後、シート及び選択セルが増える予定ですが、 各々のシートのクリアする選択セルは同一です。 もっと簡単な方法はないのでしょうか? よろしくお願いします。

  • エクセルの特定のセルの値が変化したらマクロを自動実行させたい。

    エクセルの特定のセルの値が変化したらマクロを自動実行させたい。 エクセルにてシート1のB5に英数字を入力すると シート2のA列を検索し同じ値があるとその行のB列にある値をH6に表示をします。  【例】   シート1のB5に「A5684」と入力   シート2     A   B   1:A5682 パイン    2:A5683 リンゴ   3:A5684 バナナ   シート1のH6に「バナナ」と表示される シート2のA列にない場合はメッセージボックスで「データがありません」と表示します。 またシート3のA1に数字を入れておき、以下のマクロ、  'Sheet3から印刷すべき連番を獲得します。 Worksheets("Sheet3").Select Range("A1").Select 番号 = ActiveCell 連番 = "A" & Application.WorksheetFunction.Rept("0", 5 - Len(番号)) & 番号  'Sheet3の番号セル「B1」を更新します 番号 = 番号 + 1 ActiveCell.FormulaR1C1 = 番号  'Sheet1のセル「H7」欄に連番を表示します。 Worksheets("シート3").Select Range("B1").Select ActiveCell.FormulaR1C1 = 連番 Worksheets("シート1").Select Range("H6").Select '調べたいセルを記入 If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! エラー" Case CVErr(xlErrNA) If vbOK = MsgBox(" データがありません") Then Exit Sub End Select End If Sheets("シート1").PrintOut Copies:=1 Range("B5").Select Selection.ClearContents '消去 Range("B5").Select End Sub でシート1のH7に(=シート3!B1)として 印刷ごとに1、2、3、と連番を入れています。 フォームで作成したボタンを押すとH6とH7の値が印刷されます。 そしてB5の値がDeleteされ(よってH6は#N/Aとなる) B5にカーソルが行って入力待ち状態になるようにしてあります。 これで、シート1のB5の値が変化又はH6が変化したら 印刷ボタンを押して印刷ではなく自動印刷されるように出来ますか? Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = B And Target.Row = 5 Then を使いましたが 「コンパイルエラー」とか Targetの所が色つきになって「End Sub」が必要です。 となってうまく出来ません。 お願いします。

専門家に質問してみよう