• ベストアンサー

エクセル2000 平均値を記録したい

Sheet1のA1セルからA40セルまである値が入力されています Sheet2のA1セルにはそれらの平均値が計算されています。 Sheet1の元の値が変更され平均値が変化したときにSheet2の新しい平均値はB1,B2,B3と下のセルに記録していくコード、または考え方を教えていただければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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のサインがいるかも。

kuoka
質問者

お礼

本当にありがとうございました。 初心者にとっては敷居が高いようでしたが無事に動きました。 おっしゃるとおりの問題はありますが支障はありませんでした。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

これは思いつきやすい問題だが、易しくはない。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 でそれらしく、できるようですが、ボロがあるかもしれない。

kuoka
質問者

補足

本当にありがとうございます やはり初級の私には少々難しいです。 イベントブロシジュアーという単語も今回はじめて目にしました。 とにかく一度試させていただきます。