各個体に対する平均値の自動計算(VBA-マクロ)
VBAマクロのほぼ初心者です。
言葉だけではうまく説明できないので、画像を添付しました(データ例.jpg)。
ある列に入力されている各個体(A列)に対応する数値(B列)の平均値を自動計算したいです。
各個体のB列1行目は空白になっていて、それぞれの計算結果をそこに入力されるようにしたいです。
*各個体はすでに昇順で並んでいる状態です。
Do~Loopなど利用して色々試したのですが、なかなかうまくいきません。。
よい方法がありましたら、教えていただきたいです。
どうぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
データの最終行から始めると考えやすいかも知れませんね。
●Average関数を使わない方法
'--------------------------------
Sub Test222()
Dim R As Long
Dim 件数 As Long
Dim 数値計 As Double
For R = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
If Cells(R, "B").Value = "" Then
Cells(R, "B").Value = 数値計 / 件数
件数 = 0
数値計 = 0
Else
件数 = 件数 + 1
数値計 = 数値計 + Cells(R, "B").Value
End If
Next R
End Sub
'--------------------------------------------------------
●Average関数を使う方法
'--------------------------------------------------------
Sub Test222()
Dim R As Long
Dim EndRow As Long '●各固体の最終行
Dim myRange As Range '●各固体の数値のセル範囲
For R = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
If EndRow = 0 Then EndRow = R
If Cells(R, "B").Value = "" Then
Set myRange = Range(Cells(R + 1, "B"), Cells(EndRow, "B"))
Cells(R, "B").Value = WorksheetFunction.Average(myRange)
EndRow = 0
End If
Next R
End Sub
'---------------------------------------------------------------
以上です。
No.5
- 回答日時:
A 関数を使う(エクセルならVBAでなく関数を使うべきです)
(1)2007ならAVERADEIF
(2)2003ならSUMIFとCOUNTIF(両者割り算)を使う
またはSUMPRODUCTとCOUNTIF(両者割り算)を使う
(3)またはDAVERAGEを使う
B 関数的なVBA
http://detail.chiebukuro.yahoo.co.jp/qa/question …
に載っている方法(ここには疑問があるようだがこれもよい1方法と思う)
C VBA (1)行ごと条件該当分判定し集計し繰りかえし加算法
(2)ソートして、固体分類が切れる行まで足して(件数も数え)、件数で割る
(3)Findなどで該当分を集計する
とりあえずコードは省略。
D エクセルのアクセス的機能でSQLの機能を利用
D 配列数式でAVERAGE関数やSUM関数を使う
例データ A2:B10
a1
a2
a3
a6
b1
b2
c3
c4
c5
式は
=AVERAGE(IF(A2:A10="a",B2:B10,""))と入れて、SHIFT+CTRL+ENTERを同時押しする。
結果
3
ただし配列数式は、データ数が多いと時間がかかったりするかもしれない。
ーー
E列に
a
b
c
と作っておくと(データーフィルターフィルタオプションの設定ー重複するレコードは無視するの操作で(重複せず、もれの無いセットが)出せる。
F2に=AVERAGE(IF(A2:A10=E2,B2:B10,"")) SHIFT+CTRL+ENTERを同時押しする。
この式をF2で+ハンドルを出して下方向に引っ張り、F4まで式を、複写する。
結果
a3
b1.5
c4
No.3
- 回答日時:
私もこの内容ならワークシート関数でやりますが、あえてVBAでやるのならばこんな感じかなぁ。
Sub Sample()
Dim y As Long
For y = 1 To Range("B" & Rows.Count).End(xlUp).Row
'B列が空で、A列が空以外の行なら次の処理
If (Range("B" & y).Value = "") * (Range("A" & y).Value <> "") Then
'A列の値が平均表示用の行しかない場合は何もしない
If Evaluate("COUNTIF(A:A,A" & y & ")") > 1 Then
Range("B" & y) = Evaluate("SUMIF(A:A,A" & y & ",B:B)/(COUNTIF(A:A,A" & y & ")-1)")
End If
End If
Next y
End Sub
No.1
- 回答日時:
こんなもんにVBA使う必要はありません。
シートがこの形のままだと循環参照が発生するので少し小細工こそ要りますが、ワークシート関数だけで行けますよ。
2007ならAVERAGEIF、2003以前ならSUMIFとCOUNTIFの組み合わせで出来ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセル 自動計算 1 2023/01/30 13:28
- Visual Basic(VBA) 別シートに順番で貼り付け 2 2023/04/13 19:53
- 電気・ガス・水道業 複数の積算消費電力計での配線方法 1 2022/04/04 11:04
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 統計学 t値の計算方法 1 2022/11/29 18:37
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのデータがない行には...
-
マクロで最終行を取得してコピ...
-
エクセルで空白行を削除する ...
-
数値に見えるものはすべて数値...
-
VBAでの重複データに色付け
-
【VBA】条件に一致しない行を削...
-
【VBA】条件に一致しない行を削...
-
EXCEL VBAでA列にある空白行よ...
-
EXCEL2007マクロ/オートフィル...
-
Excel97 指定した行だけマク...
-
エクセル住所録でフラッグの個...
-
テキストファイル読み込みにお...
-
エクセルVBAで3つ以上の複...
-
Excel VBA オートフィルタの結...
-
エクセルで階層図を作る方法
-
各個体に対する平均値の自動計...
-
空白を複数行一気に挿入するには?
-
列から特定の文字列検索→該当以...
-
Excel2003 VBA 一番下の行を...
-
VBAで保存しないで閉じると空の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
数値に見えるものはすべて数値...
-
【VBA】条件に一致しない行を削...
-
エクセルのデータがない行には...
-
VB.net
-
Excel VBAでオートフィルタで抽...
-
マクロにて指定の文字間の文字...
-
VBAでの重複データに色付け
-
EXCEL VBAでA列にある空白行よ...
-
【至急】Excel 同一人物の情報...
-
Excel マクロ 検索結果を別シ...
-
Excel VBA オートフィルタの結...
-
Excel97 指定した行だけマク...
-
列から特定の文字列検索→該当以...
-
VBAで入力の結果を他のセルに反...
-
excel2021で実行できないマクロ...
-
エクセルのVBAで指定した行数の...
-
Access2003レポート:最終ペー...
おすすめ情報