給這一去。
該解決方案假定您有一個連續的數據集,即您希望搜索的列之間沒有間隔。
首先,您需要包含此功能。將其粘貼到與子例程相同的模塊中。此功能的目的是允許將每個標題中的字符串與子字符串數組進行比較,而不是使用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,因此可能不是一個選項。
來源
2016-11-26 07:09:24
MJV
什麼是你想要自動化?您是否需要定期將新數據導入到電子表格中,然後添加平均列?如果是這樣,我只是建議將一個範圍格式化爲一行的表格,最後一列包含平均公式。粘貼數據時,它會自動將公式應用於整個數據集。 – MJV
@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