- ベストアンサー
エクセル2000で教えて下さい。
セルに式を入れると、式の対象データが発生した時自動的に式が入っているセルに 値が入りますが、マクロ(モジュール)では、上記の方法(ボタン等を使用しない)はできないのでしょうか? セルの式では下記の条件式がわかりませんがマクロの記述ならわかるので・・・ もしセルの式で下記できれば、こちらも教えて下さい。 1、例)A1~A30の間に10という値があった場合のみ対象のB例の値を加算する。 2、例)C1~C7の間にD1~D7の中に値がある場合のみ、C1から順番にD列の値を 移す。 2番の例は、よくわからないのですが、セルの式ではできないと思いますので できれば、ボタン操作をつかわないでどこかに設定をすると自動的に行う方法 はありませんか? お願いします。 もし、セルでは自動できないがテキストボックス等で、できるのでしたら・・・ どんな方法でもいいのでお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
セルに式を入れると自動的に値を入れる方法については 下記の手順でお願します。 エクセルを開く VBEを開く プロジェクトから任意のシートをダブルクリック コードウィンドウの上にある2つのリストボックスの 左側でWorksheetを選択 右側でChangeを選択 すると下のものが作られるので Private Sub Worksheet_Change(ByVal Target As Excel.Range) End Sub これに以下のものを入れてください。 If Target.Address <> "$A$1" Then Exit Sub Range("B1") = Range("B1") + Val(Range("A1").Value) Range("A1").Activate A1セルが変更された時のみ対象にしています。 B1にA1を足します。 「イベント」というものです。他には下のものがあります。 1.値が変更された時 2.シートがアクティブになった時 3.ダブルクリック 4.右クリック 5.再計算時 6.非アクティブになった時 7.選択範囲を変えた時 詳しくは、解説書などの「イベント」の欄で。 他の質問についてはボタンを使わないことが 重要だとするとこの応用で A1のみを対象とせず、シート全体が対象であれば 何か変える、移動するだけでマクロが動くので ボタンを必要とせず、数式ではなくマクロの記述が 使えるのではないでしょうか。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
質問の意味がつかみづらいですね。 『ボタンを使用しないで』の意味と (1)対象のB列の値を加算する。 この『対象のB列』はどのセルで、『加算する』のは何に加算するのでしょうか。 解釈:A列の値が10なら右のB列の値をA列に加算する。 とすれば、循環を起こしますのでシートで関数等使ってはできないですね。 対象のB列の値を加算するの意味がはっきりすれば対応できるでしょう。 多分、Worksheet_SelectionChange か Worksheet_Change でセル番地を調べて 処理を書くことになるでしょう。しかし、処理内容によっては非常に困難だっ たり、誤処理を引き起こしかねません。例えば、計算した後、B列の値を修正 したり削除した時にどうするかも決めておくことが必要です。 (2)値を移す。 解釈:これがカット&ペーストの意味なら、これもシートで関数等使ってはできない ですね。D列を消すのが困難でしょう。 分からないのは、『移す』タイミングです。マクロを動かすには『きっかけ』 が必要ですが、質問からは、どの時点でマクロを動かすか読み取れないようです。 こちらは何かのきっかけで、D列をC列にコピーしてD列を消去するくらいでし ょうか。 質問1:A列に入力した時点で判断して10だったらB列の値を加算する。 質問2:セルF2をクリックしたらD列をC列に移す。 と私なりに解釈して作った例です。シートのコードウインドウに貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) '/// (質問1)A1からA30ならB列を加算 /// Dim rw As Long '行カウンタ On Error GoTo ErrorHandler '単一セルを操作 If Target.Count = 1 Then If Not Union(Target, Range("A1:A30")) Is Nothing Then '値が10だったら If Target.Value = 10 Then Application.EnableEvents = False 'イベントが発生しないようにする Target.Value = Target.Value + Range("B" & Target.Row) Application.EnableEvents = True End If End If End If Exit Sub ErrorHandler: Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) '/// (質問2)F2をクリックすればD列をC列に移す /// Dim rw As Long '行カウンタ On Error GoTo ErrorHandler '単一セルを操作 If Target.Count = 1 Then If Target.Address = "$F$2" Then '数値が入力されていたら If WorksheetFunction.Count(Range("D1:D7")) > 0 Then Application.EnableEvents = False 'D列の値をC列に書く For rw = 1 To 7 Cells(rw, 3) = Cells(rw, 4) Next 'D列をクリア Range("D1:D7").ClearContents Application.EnableEvents = True End If End If End If Exit Sub ErrorHandler: Application.EnableEvents = True End Sub
- hiromuy
- ベストアンサー率27% (103/370)
1.SUMIF関数でできます。 質問の場合、=SUMIF(A1:A10,10,B1:B10) 2.IF関数で出来るのでは? C1セルに、=IF(D1="","",D1) C2セルに、=IF(D2="","",D2) ・ ・ ・ 質問の意図をくみ取れていると良いのですが・・・