2016-11-23 6 views
1

3列の平均値を設定する必要があります。Excelの列の平均化を自動化

例:

Blood_Patient1_0_R1Blood_Patient1_0_R2Blood_Patient1_0_R3

平均新しい列同様Blood_Patient1_0

Blood_Patient1_3_5_R1Blood_Patient1_3_5_R2Blood_Patient1_3_5_R3

平均が新しい列Blood_Patient1_3_5であるです

このプロセスは、このような8組の列に対して繰り返されています。

現在、私は平均式:IF(ISERROR(AVERAGE(B7:D7)),"",AVERAGE(B7:D7))と自動充填21,000プラスの行を使用しています。

列見出しにパターンがあるので、私は全体のプロセスを自動化することを考えていました。

これは私がアルゴリズムの観点から、これまで考えられてきたものである:

  • 0、3_5、6_25は、列ヘッダの時間値です。各時点における
  • 、3列ヘッダーtimeアレイ[3.5時間、6.25h、9.5h、11.5h、16.5h、25H用

の一部として、R1、R2、R3を複製が存在します、49H、156H及び ]

は2からて化学式の上方用いR3にR1からreplicates上21458

平均と行の新しい列

を作成しますa

私はこれをExcelで書く方法がわかりません。どんな助けもありがとう。

+0

自動化しようとしているのは何ですか?新しいデータをスプレッドシートに定期的にインポートして平均列を追加する必要がありますか?そうであれば、範囲を1行のテーブルとしてフォーマットすることをお勧めします。最後の列には平均式が含まれています。データを貼り付けると、自動的にデータセット全体に式が適用されます。 – MJV

+0

@MJV ....私はBlood_Patient1_T_RX列を探すスクリプトを書こうと思っています。 T = [3_5,6_25,9_5,11_5,16_5,25,49,156]の各時間ごとに、各行(合計行= 21456)に対してRX = [R1、R2、R3]列を平均化する。 – urwaCFC

答えて

0

これを実行します。

このソリューションでは、連続したデータセットがあることを前提としています。つまり、検索する列の間に空白がないことを前提としています。

まず、この機能を組み込む必要があります。サブルーチンと同じモジュールに貼り付けます。この関数の目的は、InStr関数で許可されている単一の部分文字列ではなく、各見出しの文字列を部分文字列の配列と比較できるようにすることです。

次に、このサブルーチンに貼り付けます。私は、データセットがセルA1から始まると仮定しています。また、列や行の数が変わると、ダイナミックレンジが許されています。

Sub Insert_Average_Columns() 

Dim HeaderRange As Range 
Dim LastRow As Long 
Dim c As Range 

Set HeaderRange = Range(Range("A1"), Range("A1").End(xlToRight)) 
LastRow = Range("A" & Rows.Count).End(xlUp).Row 

For Each c In HeaderRange.Cells 

If Right(c.Value, 2) = "R3" Then 

    If Time_Search(c.Value, "3_5", "6_25", "9_5", "11_5", "16_5", "25", "49", "156") Then 

     c.Offset(0, 1).EntireColumn.Insert 
     c.Offset(0, 1) = "Average of " & Left(c.Value, Len(c.Value) - 3) 
     c.Offset(1, 1).FormulaR1C1 = "=IFERROR(AVERAGE(RC[-3]:RC[-1]),"""")" 
     c.Offset(1, 1).AutoFill Range(c.Offset(1, 1).Address, Cells(LastRow, c.Offset(1, 1).Column)) 

    End If 

End If 

Next c 

End Sub 

データには1つの問題があります。プロシージャでT = 25の平均列を挿入する場合は、Tに文字列 "25"が含まれているすべての列に対して同様の処理を行います。 T = 8の場合。25、10.25、15.25など、これらはすべて平均が適用されます。その周りの唯一の方法は、より多くの見出し文字列をパラメータ配列に含めることですが、変数Blood_Patient IDを扱うことになるので、おそらくオプションではありません。

関連する問題