2015-04-27 2 views
1

Я создал программу, которая запрашивает входной столбец, а затем создает среднее значение из 60 значений, а затем следующие 60 значений и т. Д. Я хочу, чтобы инсталляции ввода столбца (A, B) я ввела переменную, с которой был назван столбец, например, столбец 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

Код, который они дали, показал, что они выбирают лист. Итак, почему бы не изменить листы («лист1») на актуализацию? – Sam

+0

@Sam не заметил, спасибо за замечание. –

+0

В любое время, рад улучшить любой код =] – Sam

Смежные вопросы