• 締切済み

マクロの自動実行

Private Sub Worksheet_Calculate() Range("b1").Value = Range("b1").Value + Range("a1").Value End Sub このマクロをA1セルの数値が変わるたびに自動で実行するには どうすればいいでしょうか?

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then Range("B1").Value = Range("B1").Value + Range("A1").Value End If End Sub でいかが?

jcomkita
質問者

お礼

ありがとうございます。試してみます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

こらこら、前の質問の関連の質問をする時は前の質問を閉じてから 最低限のルールは守ること http://okwave.jp/qa5326975.html >このマクロをA1セルの数値が変わるたびに自動で実行するには 前の質問にやり方は書き込んでおきました A1の値の変化させる方法がかかれていなかったので A1の値を変化させるには、主に2つの方法があり マクロや手入力で直接変化させる方法と 数式の結果等で間接的に変化させる方法がある >'マクロ等でA1を書き換えるなら の方が直接変化させた時のもの >'A1に数式を設定しているなら の方は間接的に変化させた時の方法です 参考まで

jcomkita
質問者

お礼

ありがとうございます。

関連するQ&A

  • 図形の移動をセンチの数値でマクロを実行したい

    エクセル初心者です。 以下のマクロを教えて頂きました。 セルに入力する数値は他の計算式から数値を割り出しています。 このマクロをセンチで入力して、実行する事は可能でしょうか。 その方法がありましたら、教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) With ActiveSheet.Shapes.Range(Array("Group 1")) .Top = 100 .Left = 100 .Height = ActiveSheet.Range("A2").Value .Width = ActiveSheet.Range("A3").Value End With End Sub よろしくお願いします。

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • Excelでセルの値を変化させた時にマクロを実行するには?

    "A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then      cells(1,2)=5      ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

  • このマクロの説明をお願いします

    Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

  • 計算によってセルの値に変化があった時にマクロを実行する

    計算によってセルの値に変化があった時にマクロを実行する "食品一覧"シートのV列の値が変わったら、データを“フィルタオプションの設定”でフィルタにかけ、特定の項目を同じブックの別のシートに抽出するマクロ文を以下の通り作成しました。 Private Sub Worksheet_Change(ByVal Target As Range) With Worksheets("食品一覧") If Intersect(Target, Range("V5:V10000")) Is Nothing Then Exit Sub Application.EnableEvents = False Worksheets("賞味期限切れ").Range("A7:Z10000").Clear Worksheets("その他").Range("A7:Z10000").Clear .Range("A4:Z1000").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("賞味期限切れ").Range("A1:A2"), _ CopyToRange:=Worksheets("賞味期限切れ").Range("A6:G6"), _ Unique:=False .Range("A4:Z1000").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("その他").Range("A1:A2"), _ CopyToRange:=Worksheets("その他").Range("A6:G6"), _ Unique:=False Application.EnableEvents = True End With End Sub 上記マクロ文は、V列の値を手入力で変更した場合のみ有効です。 やりたい事は、「V列に数式を入力し、計算によってV列の値に変化があった時にマクロを実行する」です。 ↓入力する数式は以下の数式です。 =IF(DATE(YEAR(A10),MONTH(A10),DAY(A10))<$A$1,"期限切れ","その他") 色々調べた結果、 手入力によりセルの値が変更される場合は“Change” Private Sub Worksheet_Change() 数式によりセルの値が変更になる場合は“Calculate” Private Sub Worksheet_Calculate() (※解釈を違えていたらすみません、間違えていたらそれぞれの用途を教えて下さい。) と言う事なので、今回はPrivate Sub Worksheet_Calculate()を使用してマクロ文を作成したいのですが、上手く作成する事ができません。 お解かりになる方、ぜひ教えて下さい。

  • セルクリックでマクロ実行の構成について

    office365 A.xlsmというファイルを開いたら sub auto_open() の中で MENUシートの B7,C7,D7… B8,C8,D8… に人の名前を抽出して貼り付けるマクロを動作させます←(B) 7行目、8行目共、基本1人の抽出ですが、 max3人くらいまで抽出される構成 B7セルからD8セルの範囲内で名前が表示される様になるので、 その中で自分の名前をクリックしたら、←(C) 自分に関係するファイルを開く様にしたい。 しかしながら (C)の内容をセルクリックでマクロ実行の構成 Private Sub Worksheet_SelectionChange(ByVal Target As Range) で指定していると (B)の実行中に(C)が動作してしまうので具合が悪いです。 (B)の処理には、セル内容削除や罫線追加などを実施するので7行目と8行目はクリックされまくる感じになります。 なので、 (B)の処理が全て終わったら、(C)のセルクリックでマクロ実行の内容を有効にしたいのですが、どの様な構成にしたらよいか教えていただきたく。 可能ならば、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) の中で、クリックしたセルに色をつけ、それ以外の人の名前が入っているセルは塗りつぶしなしにしたい こちらは、クリックしたアクティブセルの行と列は分かっているので、範囲内でアクティブ以外のセルを1つずつ塗りつぶしなしの処理をしたら良いかと思いますが、なんかスマートじゃないですね。 ホントは B7セルクリックしたら、7,8行を塗りつぶしなしにして クリックしたB7セルに色つけ としたいところです。 (B)のイメージマクロ sub auto_open() …略 Range("B7")="Aさん” Range("C7")="Bさん” Range("B8")="Cさん” end sub (C)のイメージマクロ Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'クリックしたセルに色付け Dim l as long Dim r as long Select Case Target.Interior.colorIndex Case Is = xlNone Target.Interior.colorIndex =8 End select 'ファイル開く処理 …略 End sub 上記(B)(C)のマクロに、可能な構成となる様に添削(コード追加)いただきたく。

  • エクセル マクロについて

    エクセルでネットの情報(為替の値動き)を自動更新で取得しています。自動更新前の情報を同一シート(同一シートが無理な場合は別シートでもいいのですが…)にコピペし一覧にするマクロはありますか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then         'A1のセルの値が変化したら・・・ n = Cells(Rows.Count, "B").End(xlUp).Row + 1  ’B列の最終行を探しその次の行に・・・ Range("B" & n).Value = Range("A1").Value    ’A1の値を貼り付けていく End If End Sub これだと手動セルを上書きした時しか動いてくれませんでした。検索もしたのですが見当たらなくて困っています。お力を貸してください。

  • エクセルでセルに文字が入力されたらマクロを実行

    前回どなたかが質問されて回答を見せてもらったら私のやりたいことと同じだったので実行してみましたが出来なかったのでもう一度質問をさせてください。 1.実行したのですが、なにも実行されません。 2.実行したらメッセジBOXだけは実行するのですが、後のコマンドが実行されずにエラーになります。 もう一度詳しく教えてください。 マクロ初心者ですよろしくお願いします。 1.【シートモジュールで条件判定し、マクロを起動する】 通常はこちらの方法が使われます。 Private Sub Worksheet_Change(ByVal Target As Range)   '変化のあったセルがA1セルか?   If Target.Address = "$A$1" Then      '条件判定:A1セルの値は 1 か?     If Target.Value = 1 Then       MsgBox "A1セルは条件を満たしました"     End If   End If End Sub 2.【ワークシート上で条件判定し、マクロを起動する】 処理内容にもよっては不向きな場合もありますが、こんな方法も あります。 マクロを Sub ではなく、Function 、、つまり関数にしてしまいます。 Function TestMacro() '<-- Sub を Function に替える   MsgBox "A1セルは条件を満たしました"   TestMacro = "" '戻り値はなし End Function そして、ワークシートの B1 セルに次の式を入力します。()は必須 です。  =IF(A1=1,TestMacro(),"")

  • EXCELでセルの値が変化したときだけにマクロ実行

    教えてください。 EXCELのA1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行したいと思い、以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打ちました。 そうしたところキーボードからA1セルに1や0を打ち込むとMacro1・Macro2を実行するのですが。A1セルに関数式を入れ自動で1→0・0→1に変化してもMacro1・Macro2が実行されません。この場合どう修正すればMacroが実行されるようになりますか? ※ちなみにA1セルの関数式はある条件を満たしたら1、そうでない時0という式です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target.Value = 0 Then Macro1 End If If Target.Address = "$A$1" And Target.Value = 1 Then Macro2 End If End Sub

  • マクロ 実行ボタンを押さずに常に実行

    マクロを常に実行することはできますか? 「常に実行」という表現が適切か分からないのですが、 例えば・・・・・・ A1~A10まで数値を入力する表があり、それをD1~D10にコピー・貼り付けを行う[貼り付け]マクロがあります。 Sub 貼り付け() ' 貼り付け Macro Range("A1:A10").Copy Range("D1") End Sub これを、[貼り付け]マクロの実行ボタンを押して実行するのではなく、 A1~A10に数値を入力する毎に[貼り付け]マクロ実行される(D列に数値が入る)事は可能でしょうか? よろしくお願いします。

専門家に質問してみよう