2015-04-27 53 views
1

我已經創建了一個程序,要求輸入列,然後創建60個值的平均值,然後是下一個60個值等。我想要列(A,B)的輸入insteas,我將輸入已命名列的變量,如列L已命名爲Power。所以我輸入的是權力而不是L。輸入框VBA,輸入列名代替

Sub Hourlyaverage() 
    Dim i As Long, j As Long, k As Long 
    Dim myRange As Range 
    Dim myValue As Variant 

    Sheets("DUT1_Test51_excel").Select 

    i = 3 
    j = 3 
    k = 63 

    myValue = InputBox("Give Column name to calculate Average eg. A,B") 

    Do While Cells(i, 12).Value <> "" 
     Set myRange = Range(myValue & i & ":" & myValue & k) 
     Cells(j, 20).Value = Application.Average(myRange) 
     i = i + 60 
     j = j + 1 
     k = k + 60 
    Loop 
End Sub 
+0

是由第一行命名的列嗎?所以標題是列的名稱?並且你有多少列 – Sam

回答

0

如果您使用第一行來命名列,然後使用它。將colEnd更改爲所用列的數量。或從vba中獲取使用的列。

Sub Hourlyaverage() 
    Dim i As Long, j As Long, k As Long 
    Dim myRange As Range 
    Dim myValue As Variant 

    'variables for Column Names 
    Dim colEnd As Long, x As Long 
    Dim colName As String 


    Sheets("DUT1_Test51_excel").Select 

    i = 3 
    j = 3 
    k = 63 

    myValue = InputBox("Give Column name to calculate Average eg. A,B") 

    'Set columns used 
    colEnd = 5 

    For x = 1 To colEnd 
     If Ucase(Cells(1, x).Value) = Ucase(myValue) Then colName = Right(Left(Cells(1, x).Address, 2), 1) 
    Next 
    'If column name is not used it will take the value of myValue to see try and use that as a column name incase the user does not use the full name. 
    'Tries the first letter incase it was spelt wrong. 
    If colName = "" Then colName = Left(UCase(myValue),1) 

    Do While Cells(i, 12).Value <> "" 
     Set myRange = Range(colName & i & ":" & colName & k) 
     Cells(j, 20).Value = Application.Average(myRange) 
     i = i + 60 
     j = j + 1 
     k = k + 60 
    Loop 
End Sub 
+0

非常感謝。其作品現在 –

+0

沒問題。如果現在可以回答,可以將其標記爲答案嗎? – Sam

1

您可以添加自定義功能,給定的值,將返回列:

Public Function valueToColumn(ByVal val As String) As String 

    valueToColumn = Split(ActiveSheet.Range("A:Z").Find(val).Address, "$")(1) 

End Function 

因此,所有你需要做一次輸出由用戶得到的是把myValue轉換成與myValue = valueToColumn(myValue)的列字母。

請注意:

  • 上面搜索在範圍A-Z值。您需要根據您的需求進行調整。
  • 以上,如果未找到該值,將引發異常Variable not set。你需要用一個錯誤處理程序來管理這個(我可以根據你的需要選擇最好的)。
+0

他們給出的代碼表明他們選擇了一張表。那麼爲什麼不將表格(「sheet1」)更改爲活頁? – Sam

+0

@Sam沒有注意到,謝謝你的評論。 –

+0

隨時樂意提高任何代碼=] – Sam