Я пишу макро функцию в Excel, чтобы организовать набор ежемесячных данных о продажах. Исходный формат использует 6 строк на запись, а организованная таблица использует только 1. Количество продаж меняется каждый месяц, поэтому мне нужно найти способ определить, сколько записей о продажах существует, чтобы я знал, как далеко продлить свои формулы.

В конце необработанных данных всегда появляется слово «SIGNED:» во втором столбце, поэтому я использовал косвенные функции и функции соответствия, чтобы определить, как далеко заполнить формулы. Код, который я использовал, выглядит так:

    Application.Goto Reference:= _
         "INDIRECT(""T"" & (MATCH(""SIGNED:"",RawData!C2:C2,0)-3)/6+1)"
    Range("T2", Selection).Select
    Selection.FillDown

И изначально он работал отлично, за исключением того, что иногда исходные данные не используют 6 строк, потому что иногда функция сопоставления с вышеуказанными входными данными не возвращает целое число. Поэтому я попытался использовать функцию потолка вокруг функции соответствия, чтобы убедиться, что я получил целое число, и подумал, что было бы хорошо, если бы он был выключен на один или два, как это легко сделать вручную. То, что я написал, выглядит так:

    Application.Goto Reference:= _
        "INDIRECT(""T"" & Ceiling((MATCH(""SIGNED:"",RawData!C[-20],0)-3)/6+1),1))"
    Range("A2", Selection).Select
    Selection.FillDown

Теперь я получаю ошибку и не могу понять, почему. Связано ли это с форматом числа, возвращаемого функцией потолка? Я был бы очень признателен за помощь в поиске решения или, возможно, даже за другой подход к определению количества записей о продажах.

Спасибо!

1 ответ1

0

Я бы подошел к этому несколько иначе. Фрагмент кода ниже использует.Найдите свойство диапазонов, чтобы определить последнюю ячейку данных на листе. ,Find возвращает ссылку на ячейку, и мы можем получить ее строку, используя.Рядная недвижимость.

Также обратите внимание, что нет необходимости выбирать диапазоны, чтобы воздействовать на них.

Dim lastcell As Range
Set lastcell = Cells.Find(What:="*", After:=[A1], _
    SearchDirection:=xlPrevious)
Range("A2:A" & lastcell.Row).FillDown

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