У меня есть повторяющийся процесс, который я должен сделать в Excel для сбора тестовых данных. Я должен сделать этот процесс для каждой точки данных, которую я собираю. Я собираю более 200 точек данных каждого теста.

Мои данные автоматически заполняются в столбцы A и B. Мне нужно иметь возможность выбрать все реальные данные в столбце A, умножить их на константу и поместить в отдельный столбец. Проблема заключается в том, что мои данные в столбце A различаются по количеству ячеек для каждой точки данных. Например, один набор тестовых данных будет иметь 800 строк, затем следующий будет иметь 3200. Он всегда независим, и мне нужно иметь возможность выбрать всю строку независимо от количества строк.

Мне нужно сделать этот макрос макросом, чтобы я мог выполнять все другие операции с данными, необходимые сразу. Проблема заключается в том, когда я создаю макрос ...Я использую ярлык, чтобы выбрать все данные, и макрос видит этот шаг как выделение указанных ячеек. Поэтому, когда я записываю макрос для точки данных длиной 3200 ячеек, а затем пытаюсь запустить его на точке данных 800 ячеек, он выбирает 3200 ячеек. Мне нужно, чтобы выбрать только реальные данные.

3 ответа3

0

Rudy:

Я бы использовал что-то вроде этого:

Range(Cells(1,ActiveCell.Column),Cells(WorksheetFunction.CountA(Columns(ActiveCell.Column)),ActiveCell.Column)).Select

Это выберет количество строк, содержащих данные, начиная со строки № 1 в активном столбце.

0

Похоже, вы пытаетесь суммировать переменное количество столбцов на основе поля. Попробуйте функцию промежуточного итога и посмотрите, подходит ли она вам. (см. пример)

Если нет, то вам может повезти, используя функции Lookup & Reference, чтобы получить ссылку на то, где поле A изменяется с 1 на 2, тогда я бы попытался сгенерировать sum() с массивом, используя ссылку в качестве входных данных. Извините, я не могу быть более подробным, но я никогда не пробовал это раньше.

   A    B
  --------
+ 1    1.5
| 1    1.6
| 1    1.7
| 1    1.8
+ 1    1.9
1 Total  7
+ 2    1.5
| 2    1.6
| 2    1.7
| 2    1.8
+ 2    1.9
2 Total 7
0

Вот макрос решение.

Я предположил, что ваши данные находятся в столбце A с заголовком в ячейке A1, а у вас есть заголовок столбца в столбце B, ячейка B1. Вставьте эти 2 блока кода в модуль и посмотрите, работает ли он для вас. Макрос для запуска - MultiplyAllData().

Этот первый блок является функцией для получения последней строки в столбце A

Function MyLastRow() As Long
    'This will give the last row in column A
    Dim theLastRow As Long

    Range("A1").Select
    Selection.End(xlDown).Select
    theLastRow = Selection.Row

     MyLastRow = theLastRow
End Function

Этот следующий блок - макрос для запуска. Он умножает каждое значение в столбце A на константу (которую вы можете редактировать) и помещает результат в столбец B:

Sub MultiplyAllData()

     Dim ourLastRow As Long
     Dim myConstant As Double

     myConstant = 3.14           'you can edit your constant here

     ourLastRow = MyLastRow      'this is a call to our function

Range("B2").Select
'   NOTE:  below is the code I got when I first recorded my macro.      
'          I had test data down to cell A40.
'    ActiveCell.FormulaR1C1 = "=RC[-1]*3.14"
'    Selection.AutoFill Destination:=Range("B2:B40")
'    Range("B2:B40").Select
'
'   Here is the modified code from the macro, with more flexibility now
'   because of the variables.
ActiveCell.FormulaR1C1 = "=RC[-1]*" & myConstant
Selection.AutoFill Destination:=Range("B2:B" & ourLastRow)
Range("B2:B" & ourLastRow).Select

Range("B1").Select  'park the cursor
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .