- ベストアンサー
エクセル2000 平均値を記録したい
Sheet1のA1セルからA40セルまである値が入力されています Sheet2のA1セルにはそれらの平均値が計算されています。 Sheet1の元の値が変更され平均値が変化したときにSheet2の新しい平均値はB1,B2,B3と下のセルに記録していくコード、または考え方を教えていただければ助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 イベントブロシジュアを聞くのが初めてなら、やってみる方法も解説が必要かも。 平均を考えるデータを入力するシートを仮にSheet1とする。 メニューでツール-マクロ-VisualBasicEditorをクリック。 出てきた画面の、多分左側のフレームの上部に、VBAProject(Book1)が見えると思うが、その下のSheet1をダブルクリックする。白紙的な画面になって、上左の「General」をクリックして「WorkSheet」、右側の「Declaration」をクリックして Changeをクリックして選ぶ。 Private Sub Worksheet_Change(ByVal Target As Range) End Sub になるから、真ん中に回答の中身をコピペする。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub がでるかも知れないが、放っておいてよい。 実行はワークシートに戻ってA2:A10にデータを入れる。 Sheet2のA列に平均が順次出て行く。 しかし1-9個のデータを入れている間も出てしまう。これがこのような 問題の難しいところ。 とりあえずデータ入力完成後にこのイベントプロシージュアーを働かせるにはどうするか。もうひとつGO・STOPのサインがいるかも。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
これは思いつきやすい問題だが、易しくはない。VBAを使わないとできないだろうし、初級の問題ではないでしょう。 Chengeイベントに(イベントブロシジュアーの造り方わかりますか、とりあえず略) Private Sub Worksheet_Change(ByVal Target As Range) Static r Dim s As Range Set s = Intersect(Target, Worksheets("sheet1").Range("$a$2:$a$10")) If s Is Nothing Then Else If r = "" Then r = 1 Sheets("sheet2").Cells(r, "A") = WorksheetFunction.Average(Sheets("sheet1").Range("a2:a10")) r = r + 1 End If End Sub でそれらしく、できるようですが、ボロがあるかもしれない。
補足
本当にありがとうございます やはり初級の私には少々難しいです。 イベントブロシジュアーという単語も今回はじめて目にしました。 とにかく一度試させていただきます。
お礼
本当にありがとうございました。 初心者にとっては敷居が高いようでしたが無事に動きました。 おっしゃるとおりの問題はありますが支障はありませんでした。