[[20120412143431]] 『指定した複数のセルに入力された時にマクロを動作』(もも) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定した複数のセルに入力された時にマクロを動作させたい』(もも)

いつもお世話になってます。

A1とA2に文字列が入力されたらマクロが作動するようにしたいのですが、
出来ますか??

よろしくお願いします。

もも


 Worksheet_Changeイベントを調べてみて下さい。
(Jera)

調べてみました。
出来るんですね^^

ですが、すみません;;;;;
調べたのですがどうすればいいかはわかりませんでした。

If Target.range("A1:A2") Then
じゃだめですよね。
…何でダメなのかも調べたのですがよくわかりましせんでした。

A1とA2に文字列が入力されている、とどうすれば指定できるのかもわからないです…
初心者でほんとにすみません><

もも。


 If Range("A1").Value <> "" And Range("A2").Value <> "" Then'←空白じゃなかったら
    MsgBox "何か入力されています。"
 End If
 
 でどうでしょう?
 Jeraさんの回答と併せて試してみてください。

 (毛虫通過中)

ありがとうございます。

せっかく教えていただいたのに
なんか動作がとまらなくなってかたまりました!

ごめんなさい…

もも


 Worksheet_Changeを使っているので、A1とA2のセルを「何か空白じゃないもの(文字・数字・数式)に書き換えるたびにMsgBoxが表示されますよ。

 (毛虫通過中)

もう少しやりたい事を詳しく書いては動でしょうか。

A1 にデータが入力されているときに、A2を入力すると ある処理(できればここも詳しく)が
実行される。というように。

A1、A2 を両方変更したいときに、それぞれ動くのは期待通りなのか、気になっています。
(Mook)


A1を入力し、A2を入力します。
どちらにも入力された時に処理されるようにしたいです。

処理は、
A1のデータをもとに日付を求めるもの、
A1のデータをもとに年月日を求めるもの、
B2のデータをもとに色を算出するもの、
の3つの数式です。
この処理をA1,A2の両方に入力されたときにしたいです。
ちなみに、処理のマクロは出来ています。

説明不足で申し訳ございませんでした。
よろしくお願いします。

もも


 そのシートのシートタブを右クリックしてコードの表示を選んででてくるところに

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
        If WorksheetFunction.CountA(Range("A1:A2")) = 2 Then
            'ここで処理
            'あるいは、その処理プロシジャが別途かかれているなら
            'Call そのプロシジャ名
        End If
    End If
 End Sub

 (ぶらっと)

 (ぶらっと)さん
既にA1,A2とも入力されていて
A1,A2をクリアせずにA1を変更後A2を入力しようとする前に
Worksheet_Changeイベントが発生するけどどの様に対応すれば
よいのかな?
(ROM人)


みなさまありがとうございます。

今までのマクロだと、
シートがアクティブになったときに起こるようになっており、
入力したら別のシートをクリックし、もう一度シートをアクティブにしていました。
このシートの結果は他のシートで参照しています。

もも


ぶらっとさん
ありがとうございます。

やってみたのですが…
処理が終わらずかたまってしまいました…

自分でも調べて試行錯誤したのですが、かたまるばかりです…
せっかく教えてくださったのにすみません;;;;

もも


 上のほうでもいわれていたと思うけど、
'ここで処理 のところでA1あるいはA2を変更するロジックがあれば「永久ループ」するよ。
この部分のコードをアップしてもらうか、あるいは

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
        Application.EnableEvents = False   '★追加
        If WorksheetFunction.CountA(Range("A1:A2")) = 2 Then
            'ここで処理
            'あるいは、その処理プロシジャが別途かかれているなら
            'Call そのプロシジャ名
        End If
        Application.EnableEvents = True   '★追加
    End If
 End Sub

 さらに、(ROM人)さんからの指摘、重要だよね。
 A1をいれる、次にA2をいれる。実行される。ここまではいいけど、
 それぞれ、違う値をいれてから実行したいのに、アップしたコードでは、どちら一方をいれただけで
 もう一方は古い値のまま動いてしまう。その場合は、A1:A2 を選んでクリアしてから入れなおすことになるんだけど面倒かな?

 であれば、この「入力したら実行」ということは「あきらめて」、シートにボタンを配置して、そちらで
 すでに作ってあるマクロを登録。操作者が、2つのセルに入力した上で、さぁ実行ということでボタンをおす。
 そういう運用にしたほうがいいかもよ。

 (ぶらっと)


そうなんですね。
たしかに処理の中で変更するところがあります。
…とゆーとこはボタンを設置するのが綺麗ですね。

なんども何度もありがとうございます。

もも


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.