输入框VBA,输入列名而不是名称
我创建了一个程序,它要求输入一列,然后创建60个值的平均值,然后再创建60个值,依此类推。我想输入(A,B)列的输入,我将输入该列被命名的变量,就像L列被命名为幂一样。所以我输入功率而不是L输入框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
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
- 如果未找到上述值,则会引发异常
。您需要使用错误处理程序来管理这一点(我让您根据需要选择最佳的)变量未设置
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”)更改为活动工作表呢?没问题。如果现在有答案,你能把它标为答案吗?