2015-04-27 47 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