グッドデザイン賞を受賞したウォーターサーバー >>

エクセルでボタンオブジェクトを作りクリックすると実行するようなマクロのを登録方法はわかるのですが、特定のセルB2に数値を入力してEnterKeyを押した際に実行するようにマクロを登録するにはどうするのでしょう。マクロの編集画面で 最初の行が Sub となっていますが、あそこに何かをいれたらいいのでしょうか?教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#1です。

補足に関して
全セル対象なら
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("sheet2").Cells.Font.Size = 12
End Sub
範囲指定するなら
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("sheet2").Range("a1:c10").Font.Size = 12
End Sub
上記の真中の行を#1と組み合わせて使うこと。
Sheet1のどこを変化させてもフォント設定が行われる。それで宜しいか。変化を反映させるセルを限定するなら、また別の知識が必要です。マクロの初めはイベントに手を出すのは難しいと言うことです。
    • good
    • 0
この回答へのお礼

ありがとうございました。無事目的通りのものができました。

お礼日時:2004/10/31 15:00

関数をつくればどうでしょう?


ツール->マクロ->Visual Basic Editor を選び
挿入->標準モジュール を選びます
そこに 

Function hoge(dum As Range)
'↓↓↓ここに好きな命令を書いてください。

MsgBox "aaa" ' 例です

'↑↑↑ここまで
End Function

等を書きます。
一旦保存して

EXCELのシートに戻りましょう

特定のセルB2が変わったらでしたね
B2以外のセル(範囲外のセル)に =hoge(B2)
って入れてください 複数でしたら B2:C5など出来ます

Worksheet_Changeは他のセルが変わった時もイベント(処理)が
されますので 非常に時間がかかりますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。関数ではどうやら プロパティは変更できないようです。関数は引数から数値を返すのみのようです。

お礼日時:2004/11/02 12:32

シート(Sheet1と仮定)のメニューで、ツール-マクロ-VBEをクリックする。


VBE画面になりますが、そのVBAProjectの中のシート名等のツリー表示の中に、Sheet1があると
思いますので、そこをダブルクリックします。
すると画面が出てきます。その上部の(General)の▼をクリックして、「Worksheet]をクリック
、右の(Declarations)の▼をクリックして
「Change」をクリックします。
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
下のSelectionChange部分が出てしまったら、範囲指定して、Delキーで抹消してください。
間の行にプログラムコードを打ち込んでください。
シート(Sheet1)に戻り、どこかのセルにデータを入れて、予想通りなるかチェックします。
Changeイベントは色々欠点もあるイベントですが
自分が使う程度なら使い物になるでしょう。
もう一つ、変化を捉え変化させると、このイベントに該当し、処理がぐるぐる回りになることです。
それで一旦その働きを止めて、処理が終わると、元へ戻してます。なかなか初めての場合は難しいです。
下記は右隣のセルに+10した数をセットしてます。
漢字をいれたら?->他人に使ってもらうには、チェックがどんどん必要になり、コードが増えます(略)。さらに知識が必要になります。実用に耐えるマクロを作るのは難しいですよ。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Offset(0, 1) = Target + 10
Application.EnableEvents = True
End Sub

この回答への補足

ありがとうございました。sheet1に数値入力したらsheet2のフォントサイズを12に変更したいのです。回答のtarget部分をsheet2select range指定 font指定にしてみましたがフォントサイズは変化しませんでした。すみません 重ねて教えて頂けたら幸せます。

補足日時:2004/10/31 13:14
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qセルが移動した時に値の代入を行いたい

「A1」にセルがあり、これがほかのセル(例えばA2とかB1とか)に移動したときに「A10」に値を代入すると云うことはできるでしょうか。
「A10」に代入式を書けば出来ますが、VBAで出来るのであれば教えて頂きたく、舌足らずの説明で申し訳ありませんがよろしくお願いいたします。

Aベストアンサー

NO1です。
VBAならば、Worksheet_SelectionChangeイベントでしょうか。
シート上で選択範囲を変更された場合にイベントが発生します。

一例です。
仮にA1以外のセルを選択した場合にA10に+1しています。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$A$1" Then
Range("A10") = Range("A10") + 1
End If
End Sub

QEnterキーでマクロを起動さす。

Excelの(例)A1のセルに検索値を入力しEnterキーを押すと事前に組まれたマクロが起動する方法を教えて下さい。

又はEnterキーにマクロは設定できませんか?

Aベストアンサー

#4のnojioさんの補足ということでお読みください。(書いているうちにかぶってしまいました。)

Worksheet_Changeがsumi-hamaさんの意図かもしれませんが・・・下記はEnterに対して機能します。


下記コードを標準モジュールに貼り付け、
 Onkey_Set を実行することでEnterキーにマクロが割り当てられます。
 マクロ側で(MacroTest)Sheet1のA1を特定しています。

 Onkey_Off を実行することでEnterキーは元の機能に戻ります。


'Enterキーにマクロを割り当て
Sub Onkey_Set()
  Application.OnKey "{Enter}", "MacroTest"
End Sub

'デモ(Sheet1のセルA1のみで機能させる)
Sub MacroTest()
  If ActiveSheet.Name = "Sheet1" Then
    If ActiveCell.Address(0, 0) = "A1" Then
      MsgBox "Sheet1のセルA1でEnterキーを押しました"
    End If
  End If
End Sub

'Enterキーを元の機能に戻す
Sub Onkey_Off()
  Application.OnKey "{Enter}"
End Sub

#4のnojioさんの補足ということでお読みください。(書いているうちにかぶってしまいました。)

Worksheet_Changeがsumi-hamaさんの意図かもしれませんが・・・下記はEnterに対して機能します。


下記コードを標準モジュールに貼り付け、
 Onkey_Set を実行することでEnterキーにマクロが割り当てられます。
 マクロ側で(MacroTest)Sheet1のA1を特定しています。

 Onkey_Off を実行することでEnterキーは元の機能に戻ります。


'Enterキーにマクロを割り当て
Sub Onkey_Set()
  Applic...続きを読む

QEXCEL あるセルに数字が入力されれば既存マクロ実行させたい

ボタン等のグラフィックオブジェクトのマクロ実行は簡単なのですが、
ある位置のセルにデーターが入力されれば、
既存のマクロを自動実行させることできますか?

Aベストアンサー

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range(ある位置) <>"" then call 既存のマクロ名
End Sub

ある位置と既存のマクロ名を変更して使ってみてください。
あと このVBAは 操作するワークシートのほうに記述します。

Q【Excel VBA】セルの値が変更されたらマクロを実行

こんにちは

B4の値を変更する度に、
標準モジュールにあるMacro1が実行されるようにするには、
どうしたら良いでしょうか。

Excel2013です。

Aベストアンサー

WorksheetのChangeイベントを書けばいいです。
【Worksheet Change】
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Row = 4 Then
Call Module1.Macro1
End If
End Sub

【Module1】
Public Sub Macro1()
MsgBox "B4の値変更(元の値と変更がなくても走行する)"
End Sub

QExcel VBA あるセルでENTERを押すと特定のセルへ移動したい

Excel VBAで例えばセル"A2"をセレクトしている状態で
「ENTER」を押すとB5に自動的にセレクトすることはできないでしょうか?

Worksheet_Change関数を使おうと思ったのですが
"A2"の中身が変化しないと発動しません。

Worksheet_SelectionChange関数を使って"A2"を選択している状態で「ENTER」を押すと"A3"が選択されることを利用し、
「"A3"が選択されたら"B5"に飛ぶ」
も考えたのですが、マウスやキーボード操作で"A3"を
選択すると"B5"に飛んでしまうので、これも使えません。

何か対策案はないでしょうか。ご教授よろしくお願いします。

Aベストアンサー

こんばんは。

これは、定番のコードですが、私は、それに、もう少し工夫を凝らしてみました。
本来は、クラスによるインスタンスが良いとは思いますが、それを一般的にお勧めするには、ちょっと荷が重いような気がしました。

'<標準モジュール>

Private Sub ReturnDirectrion2SelectCell()
 If ActiveCell.Address(0, 0) Like "A2" Then
  Range("B5").Select
 Else
  'Original ReturnDirection の再現
  On Error Resume Next
  Select Case Application.MoveAfterReturnDirection
  Case xlDown
    ActiveCell.Offset(1).Select
  Case xlToRight
    ActiveCell.Offset(, 1).Select
  Case xlToLeft
    ActiveCell.Offset(, -1).Select
  Case xlUp
    ActiveCell.Offset(-1).Select
  End Select
 End If
End Sub

Sub SetKeys()
  '設定用
  Application.OnKey "~", "ReturnDirectrion2SelectCell"
  Application.OnKey "{Enter}", "ReturnDirectrion2SelectCell"
End Sub
Sub SetOffKeys()
 '解除用
 Application.OnKey "~"
 Application.OnKey "{Enter}"
End Sub

'-----------------------------------------

自動設定が必要な場合は、以下のコードを加えてください。

'-----------------------------------------
'<標準モジュール>
Sub Auto_Open()
 Call SetKeys
End If
Sub Auto_Close()
 Call SetOffKeys
End If
'-----------------------------------------

なお、現在の設定では、全てのブックの全てのシートに同じように適用されます。Auto_Open等の代わりに、例えば、Worksheet_Activate や Workbook_SheetActivateなどに、SetKeysをCall し、Worksheet_DeactivateやWorkbook_SheetDeactivateに、SetOffKeysをCallするようにすると良いと思います。

こんばんは。

これは、定番のコードですが、私は、それに、もう少し工夫を凝らしてみました。
本来は、クラスによるインスタンスが良いとは思いますが、それを一般的にお勧めするには、ちょっと荷が重いような気がしました。

'<標準モジュール>

Private Sub ReturnDirectrion2SelectCell()
 If ActiveCell.Address(0, 0) Like "A2" Then
  Range("B5").Select
 Else
  'Original ReturnDirection の再現
  On Error Resume Next
  Select Case Application.MoveAfterReturnDirection
  ...続きを読む

QEXCEL VBA  セル選択時にプログラム実行

ご存じの方がいらっしゃたら、是非お知恵をかして下さい。

(1)特定のセルを選択
(2)そのタイミングでプログラムを実行したい

例)A2のセル選択時にA3:Q100を選択するプログラムを実行
問題点)セル選択時にプログラムを実行するという条件文の記述方法がわからない

どうぞお力添えください。
よろしくお願いします。

Aベストアンサー

シートモジュールのSelection_Changeイベントを使った例です。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Range("A3:Q100").Select
Application.EnableEvents = True
End Sub

Q値を入力後、自動的にアクティブセルが移動するマクロ

(1)エクセルファイルを開けたときのアクティブセルを設定。

(2)そのセルに値を入力後、ENTERで違うセルに移動。
 (違うセルは、隣接していない)

(3)入力後、ENTERでまた違うセルに移動。

(4)数個のセルに入力後は、任意のセルに値を入力できるようにする。

マクロでできることなのかわかりませんが、
よろしくお願いします。

Aベストアンサー

規則性がわかりませんが、マクロを使わなくても、同様なことは可能ですよ。

CTRLキーを押しながら、入力したい順に該当セルをクリックする。

Tabキーを1回押すと、最初に選択したセルに入力できます。入力完了後Enterキーを押すと、2番目に選択したセルに入力できます。入力完了後Enterキーを押すと、3番目に選択したセルに入力できます。・・・

Q特定のセルがアクティブになったときのイベント?

エクセルのVBAで、「あるセルの内容が変更されたらメッセージボックスを表示する」ということはなんとかできたのですが、

「あるセルを(クリックして)アクティブにしたらメッセージボックスを表示する」

この方法がわかりません。

教えてください。よろしくお願いします。

Aベストアンサー

SelectionChangeイベントがあります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox "なんか用?"
End If
End Sub

QEXCEL(VBA) セルをクリックしたときの処理

何度もお世話になります。

A5:A20のどれかをクリックしたときに
クリックしたセルが値が入力済みか確認してから
ファイルを名前を付けて保存したいのですが
クリックしたという情報(イベント?)の取得方法が
わかりません。

(1)どのようにチェックすればよいのでしょうか?
(2)また、皆さんはどのようにしてこのような問題を解決してるのでしょうか?

よろしくお願いします。

Aベストアンサー

Sheet1だとして、
Sheet1のマクロで

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Target.Column = 1 And Target.Row >= 5 And Target.Row <= 20 Then
If Target.Value <> "" Then MsgBox "入力済み"
End If
'
End Sub

と入れると、クリックしたセルがA5からA20のどれかで
かつセルに値が入っているときのみ”入力済み”とメッセージが表示されます。
このメッセージ表示の部分を、「名前を付けて保存」の処理に置き換えてはいかがでしょうか。

Qセルの値が変ると自動でマクロが実行される。

セルの値が変ると自動でマクロが実行されるVBAを教えて下さいm(_ _ )m
例えば、シート1のA1の値が変ると、マクロAが実行される。
シート1のA2の値が変ると、マクロBが実行される。
と一つのシート内に複数のイベントを設置したのですが、イマイチわかりません。
知恵をお貸し下さい。

Aベストアンサー

こんにちは
お邪魔します。

(1)まずはオーダー通りの基本型

Private Sub Worksheet_Change(ByVal Target As Range)
' ' 複数セルが変更された場合(単セルでない場合)は処理を抜ける
If Target.Count > 1 Then Exit Sub
' ' 変更されたセルが1列めでない場合は処理を抜ける
If Target.Column <> 1 Then Exit Sub
' ' 変更されたセルの行位置によって処理を分岐する
Select Case Target.Row
Case 1
' A1 の場合の処理
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case 2
' A2 の場合の処理
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
End Select
End Sub

(2)セルの位置によってもっと細かく分岐したい場合

Private Sub Worksheet_Change(ByVal Target As Range)
' ' 複数セルが変更された場合(単セルでない場合)は処理を抜ける
If Target.Count > 1 Then Exit Sub
' ' 変更されたセルの 列位置 によって処理を分岐する
Select Case Target.Column
Case 1 ' 1列めなら
' ' 変更されたセルの 行位置 によって処理を分岐する
Select Case Target.Row
Case 1 ' 1列め の 1行め なら
' A1 の場合の処理
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case 2 ' 1列め の 2行め なら
' A2 の場合の処理
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
End Select
Case 2 ' 2列めなら
' ' 変更されたセルの 行位置 によって処理を分岐する
Select Case Target.Row
Case 1 ' 2列め の 1行め なら
' B1 の場合の処理
MsgBox "B1" ' 確認用(確認が済んだら当行削除)
Case 2 ' 2列め の 2行め なら
' B2 の場合の処理
MsgBox "B2" ' 確認用(確認が済んだら当行削除)
End Select
End Select
End Sub

(3)セルのアドレスを採り文字列で分岐したい場合
   (個人的にはあまりお奨めしていませんが、知っておいた方が好いもの)

Private Sub Worksheet_Change(ByVal Target As Range)
'' ' 変更されたセルの 参照文字列(A1型) によって処理を分岐する
Select Case Target.Address(False, False)
Case "A1"
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case "A2"
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
Case "B1"
MsgBox "B1" ' 確認用(確認が済んだら当行削除)
Case "B2"
MsgBox "B2" ' 確認用(確認が済んだら当行削除)
End Select
End Sub

とりあえず、単セルの場合だけ、理解を深めてみましょう。
複数セルに値変更があった場合については、その後でいいと思います。
(1)にある
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
のような記述はイベントプロシージャでは多用される基本中の基本ですから
よーく咀嚼して呑み込んじゃってください。

一応、いわずもがなですが、
上に挙げたようなイベントプロシージャを複数併記することはできませんので
使わないものはコメントブロックして下さい。
VBE(Visual Basic Editor)のツールバーに[編集]というのを追加してあれば
[コメントブロック]、[非コメントブロック]というボタンがありますので適宜。

また、イベントプロシージャで注意するべき点として
例えば今回のChangeイベントの処理中にセルの値を変更すれば
再度Changeイベントが呼び出される(再帰)ということを知っておいてください。
その場合、
  Application.EnableEvents = False
  ' 処理
  Application.EnableEvents = True
のような形で、再帰を回避します。

私自身VBAを覚え初めの頃は、イベントプロシージャとばかり格闘して
日に何百回もエラーを出しながら納得がいくまで色んなことを試していた覚えがあります。
・オブジェクトやプロパティの基本的な扱い方
・条件分岐
などの基本事項を覚えるのには最適の課題ですから、頑張って挑戦し続けてください。

以上です。

///
Re:#2 ちょっと違うかも。
それは、「A1 と 同じ値 に変更された セル があった場合」の処理になっています。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
MsgBox Target.Address
End If
End Sub
として、例えば、C3セルにA1と同じ値を設定すると違うのがわかると思います。
あしからず、、、

こんにちは
お邪魔します。

(1)まずはオーダー通りの基本型

Private Sub Worksheet_Change(ByVal Target As Range)
' ' 複数セルが変更された場合(単セルでない場合)は処理を抜ける
If Target.Count > 1 Then Exit Sub
' ' 変更されたセルが1列めでない場合は処理を抜ける
If Target.Column <> 1 Then Exit Sub
' ' 変更されたセルの行位置によって処理を分岐する
Select Case Target.Row
Case 1
' A1 の場合の処理
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング