2016-11-23 48 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個重複R1,R2,R3作爲列標題

time對於陣列[3.5H,6.25h,9.5H,11.5h,16.5h,25H的部分,49H,156H和 ]

從R1創建用於從2行的新列

到21458

平均值replicates至R3使用上述FORMUL a

我不知道如何在excel中編寫它。任何幫助,將不勝感激。

+0

什麼是你想要自動化?您是否需要定期將新數據導入到電子表格中,然後添加平均列?如果是這樣,我只是建議將一個範圍格式化爲一行的表格,最後一列包含平均公式。粘貼數據時,它會自動將公式應用於整個數據集。 – 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函數允許的單個子字符串。

Function Time_Search(strCheck As String, ParamArray anyOf()) As Boolean 

Dim item As Long 

For item = 0 To UBound(anyOf) 

    If InStr(1, strCheck, anyOf(item)) <> 0 Then 

     Time_Search = True 

     Exit Function 

    End If 

Next 

End Function 

接下來,粘貼在這個子程序中。我已經假定數據集從單元格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 

您的數據有一個問題。如果您希望過程爲T = 25插入一個平均列,那麼它將爲T中包含字符串「25」的所有列執行此操作。如果有T = 8。25,10.25,15.25等,這些都會有平均值。唯一的解決方法是在參數數組中包含更多的標題字符串,但我認爲你將會處理一個變量Blood_Patient ID,因此可能不是一個選項。