Диапазон отсчетов до последней строки, но столбцы объединены; Не моргнув колонны не могут быть выбраны?

Решение внизу.

У меня есть кнопка, чтобы автоматически копировать шаблон с другого листа и заполнять эти строки с помощью рассчитанной информации из вышеперечисленных ячеек. Возникающая проблема заключается в том, что объединенные ячейки A #: E # в последней строке мешают мне выбирать / вводить данные в ячейку на C #, которая находится над ней.

введите описание изображения здесь

Красные клетки – это те, которые не вычисляются. Вот полный код.

Sub CalculateMonthEndIntake() Dim sh1 As Worksheet, sh2 As Worksheet Dim HSDcount As Integer, GEDcount As Integer, SSCcount As Integer, BCcount As Integer, IDcount As Integer, Fullcount As Integer, Partcount As Integer, Tempcount As Integer, helpedSSC As Integer, helpedBC As Integer, helpedID As Integer, a As Integer, b As Integer Dim rngLast As Range Dim k As Long Set sh1 = ThisWorkbook.Sheets("Monthly Report - Intakes") Set sh2 = ThisWorkbook.Sheets("Template") Fullcount = 0 Partcount = 0 Tempcount = 0 With sh1 Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(3, 0) k = .Range("A1048576").End(xlUp).Row a = 5 b = k sh2.Range("A1", "K25").Copy .Range(rngLast.Address).PasteSpecial Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-23, 0) 'Total Intakes .Range(rngLast.Address) = k - 4 Do While a < b + 1 If .Range("B" & a) = "HSD" Then HSDcount = HSDcount + 1 ElseIf .Range("B" & a) = "GED" Then GEDcount = GEDcount + 1 End If If .Range("C" & a) = "y" Then SSCcount = SSCcount + 1 End If If .Range("D" & a) = "y" Then BCcount = BCcount + 1 End If If .Range("E" & a) = "y" Then IDcount = IDcount + 1 End If If .Range("F" & a) = "Full Time" Then Fullcount = Fullcount + 1 ElseIf .Range("F" & a) = "Part Time" Then Partcount = Partcount + 1 ElseIf .Range("F" & a) = "Temporary" Then Tempcount = Tempcount + 1 End If If .Range("I" & a) = "y" Then helpedSSC = helpedSSC + 1 End If If .Range("J" & a) = "y" Then helpedBC = helpedBC + 1 End If If .Range("K" & a) = "y" Then helpedID = helpedID + 1 End If a = a + 1 Loop Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-20, 0) 'Avg Length of Stay .Range(rngLast.Address) = "" Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-17, 1) 'SSC .Range(rngLast.Address) = SSCcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-16, 1) 'BC .Range(rngLast.Address) = BCcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-15, 1) 'ID .Range(rngLast.Address) = IDcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-13, 1) 'HSD .Range(rngLast.Address) = HSDcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-12, 1) 'GED .Range(rngLast.Address) = GEDcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-10, 0) 'Full Time .Range(rngLast.Address) = Fullcount MsgBox rngLast.Address & " : " & Fullcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-8, 0) 'Part Time .Range(rngLast.Address) = Partcount MsgBox rngLast.Address & " : " & Partcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-6, 0) 'Temp .Range(rngLast.Address) = Tempcount MsgBox rngLast.Address & " : " & Tempcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-2, 1) 'Helped Obtain SSC .Range(rngLast.Address) = helpedSSC Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-1, 1) 'Helped Obtain BC .Range(rngLast.Address) = helpedBC Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 1) 'Helped Obtain ID .Range(rngLast.Address) = helpedID End With End Sub 

Когда я использую следующий блок кода,

 Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-10, 0) 'Full Time .Range(rngLast.Address) = Fullcount MsgBox rngLast.Address & " : " & Fullcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-8, 0) 'Part Time .Range(rngLast.Address) = Partcount MsgBox rngLast.Address & " : " & Partcount Set rngLast = .Cells(.Rows.Count, "A").End(xlUp).Offset(-6, 0) 'Temp .Range(rngLast.Address) = Tempcount MsgBox rngLast.Address & " : " & Tempcount 

rngLast заканчивается столбцом E вместо столбца C, потому что (-10, 0), (-8, 0) и (-6, 0) использует диапазон A85: E85 как последнюю строку, делая столбец E в смещение 0. Смещение (-10, -2) и т. д. приводит к ошибке; Ошибка «1004»: ошибка, определяемая приложением или объект . Как я могу исправить смещение или добавить / вычесть столбцы в результирующий адрес, чтобы вывести полученные результаты в столбец C?


Изменен блок кода ниже, на основе ответа от Dirk.

 Set rngLast = Intersect(.Cells(.Rows.Count, "A").End(xlUp).Offset(-10, 0).EntireRow, .Columns(3)) 'Full Time .Range(rngLast.Address) = Fullcount Set rngLast = Intersect(.Cells(.Rows.Count, "A").End(xlUp).Offset(-8, 0).EntireRow, .Columns(3)) 'Part Time .Range(rngLast.Address) = Partcount Set rngLast = Intersect(.Cells(.Rows.Count, "A").End(xlUp).Offset(-6, 0).EntireRow, .Columns(3)) 'Temp .Range(rngLast.Address) = Tempcount 

Interesting Posts

конкатенация данных excel с помощью python или Excel

Автоматизация Excel, как определить, запускает ли пользователь макрос в листе excel или клики «Запустить макрос» CommandBarControl?

Включение неактивной надстройки COM: Excel VBA

Excel – поиск дубликатов

Метод Apache poi для записи данных в существующую книгу

Мигающие ячейки в VBA

Найти количество уникальных значений для каждого элемента в столбце B

добавить диаграмму к существующему excel, используя perl

VBA – заменить символы в строке

VBA: динамическая адаптивная панель прокрутки

Вычисление медианы с использованием двух столбцов

Условное форматирование На основе текстовых и процентных критериев

Выполнение задачи на основе нескольких значений текстового поля

Ошибка в методе sheet.Copy () – «интерфейс не зарегистрирован» – библиотека объектов Excel 15.0 C #

Приложение VB6 печатает одну копию файла Excel в одном месте, но два экземпляра в другой

Давайте будем гением компьютера.