输入框VBA,输入列名而不是名称

输入框VBA,输入列名而不是名称,vba,excel,Vba,Excel,我创建了一个程序,它要求输入一列,然后创建60个值的平均值,然后再创建60个值,依此类推。我想输入(A,B)列的输入,我将输入该列被命名的变量,就像L列被命名为幂一样。所以我输入功率而不是L 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

我创建了一个程序,它要求输入一列,然后创建60个值的平均值,然后再创建60个值,依此类推。我想输入(A,B)列的输入,我将输入该列被命名的变量,就像L列被命名为幂一样。所以我输入功率而不是L

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 
Sub-Hourlyaverage()
我长,j长,k长
将myRange变暗为Range
Dim myValue作为变量
表格(“DUT1测试51\U excel”)。选择
i=3
j=3
k=63
myValue=InputBox(“给出列名以计算平均值,如A、B”)
Do While单元格(i,12)。值“”
设置myRange=Range(myValue&i&“:”&myValue&k)
单元格(j,20)。值=应用程序。平均值(myRange)
i=i+60
j=j+1
k=k+60
环
端接头

您可以添加一个自定义函数,给定一个值,该函数将返回列:

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
    中的值。你需要调整它以适应你的需要
  • 如果未找到上述值,则会引发异常
    变量未设置
    。您需要使用错误处理程序来管理这一点(我让您根据需要选择最佳的)

如果您使用第一行来命名列,请使用此选项。将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
Sub-Hourlyaverage()
我长,j长,k长
将myRange变暗为Range
Dim myValue作为变量
'列名称的变量
暗颜色和长一样长,x和长一样长
Dim colName作为字符串
表格(“DUT1测试51\U excel”)。选择
i=3
j=3
k=63
myValue=InputBox(“给出列名以计算平均值,如A、B”)
'设置使用的列
科尔德=5
对于x=1到colEnd
如果Ucase(单元格(1,x).Value)=Ucase(myValue),那么colName=Right(左侧(单元格(1,x).Address,2),1)
下一个
'如果未使用列名,则将使用myValue的值查看。如果用户未使用全名,请尝试将其用作列名。
“尝试第一个字母,以防拼写错误。
如果colName=”“,则colName=Left(UCase(myValue),1)
Do While单元格(i,12)。值“”
设置myRange=Range(colName&i&“:”&colName&k)
单元格(j,20)。值=应用程序。平均值(myRange)
i=i+60
j=j+1
k=k+60
环
端接头

列是否由第一行命名?那么标题就是列的名称?你有多少列他们给出的代码表明他们选择了一张表。那么,为什么不将工作表(“sheet1”)更改为活动工作表呢?没问题。如果现在有答案,你能把它标为答案吗?