Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3998 / 13644 ツリー ←次へ | 前へ→

【58924】マクロの実行について教えてください ねも 08/11/18(火) 15:29 質問[未読]
【58925】Re:マクロの実行について教えてください Jaka 08/11/18(火) 16:41 発言[未読]
【58928】Re:マクロの実行について教えてください ねも 08/11/18(火) 17:06 質問[未読]
【58931】Re:マクロの実行について教えてください ponpon 08/11/18(火) 19:11 発言[未読]
【58937】Re:マクロの実行について教えてください ねも 08/11/19(水) 9:53 質問[未読]
【58940】Re:マクロの実行について教えてください ponpon 08/11/19(水) 10:24 発言[未読]
【58942】Re:マクロの実行について教えてください ねも 08/11/19(水) 11:56 質問[未読]
【58943】Re:マクロの実行について教えてください ponpon 08/11/19(水) 12:34 発言[未読]
【58948】Re:マクロの実行について教えてください ねも 08/11/19(水) 14:29 お礼[未読]
【58952】Re:マクロの実行について教えてください ponpon 08/11/19(水) 17:11 発言[未読]
【58944】Re:マクロの実行について教えてください Jaka 08/11/19(水) 13:04 発言[未読]
【58950】Re:マクロの実行について教えてください ねも 08/11/19(水) 14:47 お礼[未読]

【58924】マクロの実行について教えてください
質問  ねも  - 08/11/18(火) 15:29 -

引用なし
パスワード
   現在セルに数字を入力しその後ボタンをクリックするとマクロが実行されますが、
セルに数字を入力したあとにすぐマクロが実行される方法はあるのでしょうか?
よろしく御願いします。

【58925】Re:マクロの実行について教えてください
発言  Jaka  - 08/11/18(火) 16:41 -

引用なし
パスワード
   ないです。
確定してからじゃないと動きません。
(セルが編集状態だとマクロは動かないので)

意味を勘違いしているかもしれないので、シートイベントのこれならあります。
Private Sub Worksheet_Change(ByVal Target As Range)

【58928】Re:マクロの実行について教えてください
質問  ねも  - 08/11/18(火) 17:06 -

引用なし
パスワード
   ▼Jaka さん:
>ないです。
>確定してからじゃないと動きません。
>(セルが編集状態だとマクロは動かないので)

すみません。
うまく伝えられなくて
セルを確定します。
セルA1に1を入力しEnterキーを押すことによってマクロが実行することは
できないのでしょうか?

【58931】Re:マクロの実行について教えてください
発言  ponpon  - 08/11/18(火) 19:11 -

引用なし
パスワード
   ▼ねも さん:
>セルA1に1を入力しEnterキーを押すことによってマクロが実行することは
>できないのでしょうか?

シートモジュールに

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If IsEmpty(.Value) Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
  End With
  If Application.Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  '処理
  MsgBox "なんかの処理"
  Application.EnableEvents = True
End Sub

【58937】Re:マクロの実行について教えてください
質問  ねも  - 08/11/19(水) 9:53 -

引用なし
パスワード
   ▼ponpon さん:

ありがとうございます。

シートモジュールはどのようにすれば記述できるのでしょうか?
初心者で申し訳ないです。よろしくお願いします。

【58940】Re:マクロの実行について教えてください
発言  ponpon  - 08/11/19(水) 10:24 -

引用なし
パスワード
   ▼ねも さん:
>シートモジュールはどのようにすれば記述できるのでしょうか?
>初心者で申し訳ないです。よろしくお願いします。

マクロを起動させたいシートのシートタブ
\__/\__/を右クリック→コードの表示で
出てきた白い画面(VBEの画面)にコードをコピペしてみてください。

【58942】Re:マクロの実行について教えてください
質問  ねも  - 08/11/19(水) 11:56 -

引用なし
パスワード
   ▼ponpon さん:
ありがとうございます。画面出てきました。

セル"F10"に値を入力した値をA列から選んでその場所にセルを移動するのですが"F10"に値を入力しても動作しません。マクロからだと動作するのですが、
よろしく御願いします

Private Sub Workcheet_Change(ByVal Target As Range)
With Target
 If IsEmpty(.Value) Then Exit Sub
 If Not IsNumeric(.Value) Then Exit Sub
End With
If Application.Intersect(Target, Range("F10")) Is Nothing Then Exit Sub
  Application.EnableEvents = False

  Dim アドレス As Variant
  アドレス = Application.Match(Range("F10").Value2, Columns(1), 0)
  If Not IsError(アドレス) Then
  Cells(アドレス, 1).Select
  End If
  Range("F10").Select
  Selection.ClearContents

Application.EnableEvents = True

End Sub

【58943】Re:マクロの実行について教えてください
発言  ponpon  - 08/11/19(水) 12:34 -

引用なし
パスワード
   ▼ねも さん:
>▼ponpon さん:
>ありがとうございます。画面出てきました。
>
>セル"F10"に値を入力した値をA列から選んでその場所にセルを移動するのですが"F10"に値を入力しても動作しません。マクロからだと動作するのですが、
>よろしく御願いします
>
>Private Sub Workcheet_Change(ByVal Target As Range)
       ↑Worksheetでは?
>End Sub

F10は日付(シリアル)のですか?
なら、これならどうですか?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim アドレス As Variant
With Target
 If IsEmpty(.Value) Then Exit Sub
 If Not IsDate(.Value) Then Exit Sub
End With
If Application.Intersect(Target, Range("F10")) Is Nothing Then Exit Sub
  Application.EnableEvents = False

  アドレス = Application.Match(Range("F10").Value2, Columns(1), 0)
  If Not IsError(アドレス) Then
  Cells(アドレス, 1).Select
  End If
  Range("F10").ClearContents

  Application.EnableEvents = True

End Sub

【58944】Re:マクロの実行について教えてください
発言  Jaka  - 08/11/19(水) 13:04 -

引用なし
パスワード
   ▼ねも さん:
>セル"F10"に値を入力した値をA列から選んでその場所にセルを移動するのですが"F10"に値を入力しても動作しません。マクロからだと動作するのですが、
>よろしく御願いします
>
>Private Sub Workcheet_Change(ByVal Target As Range)
> With Target
> If IsEmpty(.Value) Then Exit Sub
> If Not IsNumeric(.Value) Then Exit Sub
> End With
> If Application.Intersect(Target, Range("F10")) Is Nothing Then Exit Sub
>  Application.EnableEvents = False
>
>  Dim アドレス As Variant
>  アドレス = Application.Match(Range("F10").Value2, Columns(1), 0)
>  If Not IsError(アドレス) Then
>  Cells(アドレス, 1).Select
>  End If

   上記でCells(アドレス, 1)を選択しても
   ここ↓でF10を選択しなおすので、動作しているのに
   見た目は、F10が選択されて内容が消されているだけです。
>  Range("F10").Select
>  Selection.ClearContents
>
> Application.EnableEvents = True
>
>End Sub

おまけ、
> With Target
> If IsEmpty(.Value) Then Exit Sub
> If Not IsNumeric(.Value) Then Exit Sub
> End With
> If Application.Intersect(Target, Range("F10")) Is Nothing Then Exit Sub
えっと、これだと対象セルが複数だとエラーになるけど、この辺は?
If Target.address = "F10" Then
にすれば、そういうのはあまり気にならないと思います。
複数セルの入力に対応してなくてもいいのであれば....。

おまけ2
シートイベントが動作しないというのであれば、テスト中にエラーになったりすると
Application.EnableEvents = False
のままだったりするので、(下記コードまで行かない)
標準モジュールにて、下記コードを実行してイベントを復活させてください。
Application.EnableEvents = True

【58948】Re:マクロの実行について教えてください
お礼  ねも  - 08/11/19(水) 14:29 -

引用なし
パスワード
   ▼ponpon さん:
>>Private Sub Workcheet_Change(ByVal Target As Range)
>       ↑Worksheetでは?

単純なミスでした。恥ずかしいです。
うまく処理できました。
また何かありましたらよろしく御願いします。

【58950】Re:マクロの実行について教えてください
お礼  ねも  - 08/11/19(水) 14:47 -

引用なし
パスワード
   ▼Jaka さん:
いつもアドバイスありがとうございます。
うまく処理することができました。
また何かありましたらよろしく御願いします。

【58952】Re:マクロの実行について教えてください
発言  ponpon  - 08/11/19(水) 17:11 -

引用なし
パスワード
   もう見てないかな・・
>>Private Sub Workcheet_Change(ByVal Target As Range)
>       ↑Worksheetでは?
ここだけならいいのですが・・・

>F10は日付(シリアルの)ですか?
にも回答がないので

Jakaさんからも注意がありますが、
一応コードのコメントを入れておきます。
もう一度、意味を理解して、そちらにあうように書き直してください。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim アドレス As Variant
 ’入力されたセルが
With Target 
  ’値がなければ、何もしないで抜ける
 If IsEmpty(.Value) Then Exit Sub
  ’入力されたデータが日付型と判断できなければ 何もしないで抜ける
 If Not IsDate(.Value) Then Exit Sub
End With
  ’入力されたセルがF10と重なっていなければ、何もしないで抜ける
If Application.Intersect(Target, Range("F10")) Is Nothing Then Exit Sub
  ’上記以外の時、シートイベントの中止
  Application.EnableEvents = False
  
  アドレス = Application.Match(Range("F10").Value2, Columns(1), 0)
  If Not IsError(アドレス) Then
  Cells(アドレス, 1).Select
  End If
  ’ここはセレクトしないでF10の値をクリアする。
  Range("F10").ClearContents
  ’シートイベントを再開  
  Application.EnableEvents = True

End Sub

3998 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free