Страницы: 1
RSS
Прошу помочь написать макрос, выделяющий диапазон заполненных ячеек
 
Доброго времени суток, уважаемые формучане.
Прошу помочь с написанием макроса, который бы выделял диапазон ячеек в графах от  D до M.

Условия, которые нужно выполнить:
Ячейка начала диапазона фиксированная - D4.
Ячейка конца диапазона: строка соответствует позиции последней заполненной ячейки в графе D; графа M.
Значения ячеек в графах D-M переносятся с помощью прямых ссылок с другого листа (из данного файла их убрал). Ячейки в графе D, в которых стоит формула, выдающая "", не должны учитываться при выделении диапазона.


Попытка загуглить такой макрос результатов не принесла. А запись макроса дает только фиксированный диапазон.
Файл, о котором речь - прикладываю.
Заранее благодарен
 
Если правильно понял то так.
 
Цитата
написал:
Если правильно понял то так.

Прикрепленные файлы
Выделение заполненного диапазона в колонках D-M.xlsm  (41.89 КБ)
Добрый день, Артем. В любом случае спасибо за потраченное время. Не совсем понимаю, как работает предложенный Вами макрос. Для чистоты эксперимента я "протянул" формулу "=ЕСЛИ(1=2;1;"")" до двухсотой строки, перекрыв ей свою абракадабру. Макрос выделяет какой-то смешанный диапазон - от D4 до M52, и от E53 до M200. Тем самым 1) в выбранном диапазоне невозможно выполнить сортировку, эксель с ума сходит, 2) В диапазон продолжают включаться "пустые исходя из формулы" ячейки столбца D.
Если Вам  будет удобнее, прошу мою часть кода удалить, возможно она мешает. Иначе получается шляпа. Это кусок кода из бескрайних просторов интернета. Вывод информационного окна (MsgBox "A1" ) непринципиален и даже лишний.

Я наваял такой файл (во вложении). Недостаток в том, что пришлось заполнять формулы в графу С и ячейку В4. Хотелось бы уметь обходиться без таких танцев с бубном.
Изменено: lyolyk_p - 21.05.2024 14:38:19
 
Код
Sub Выделение()
    Dim rng As Range
    Dim lastRow As Long
    
    lastRow = [COUNT(D:D)+3] 
    
    Range("D4", "M" & lastRow).Select
End Sub
 
Цитата
написал:
21.05.2024 15:52:24

Sub Выделение()
   Dim rng As Range
   Dim lastRow As Long
   
   lastRow = [COUNT(D:D)+3]
   
   Range("D4", "M" & lastRow).Select
End Sub
Спасибо, testuser. Потестил этот код. Он отлично работает при условии, что в ячейках графы D указаны только числовые значения. Но в моем случае там марка продукции (например "Литол-24", "АК-47"). Такие ячейки макрос игнорирует. Понимаю, что сам не уточнил этот момент. Можно ли сделать, чтобы содержимое с символами макрос учитывал, а игнорировал только ячейки, в которых формула выдает "" ?
Изменено: lyolyk_p - 23.05.2024 13:44:51
 
Код
Sub Выделение()
    Dim rng As Range
    Dim lastRow As Long
    
    lastRow = [COUNTA(D:D)+3] 
    
    Range("D4", "M" & lastRow).Select
End Sub
:D  
 
Цитата
написал:
МатросНаЗебре
 
23.05.2024 14:28:04

КодSub Выделение()
   Dim rng As Range
   Dim lastRow As Long
   
   lastRow = [COUNTA(D:D)+3]
   
   Range("D4", "M" & lastRow).Select
End Sub
Добрый день, МатросНаЗебре. Прошу прощения за долгую обратную связь. Спасибо за вариант. Протестировал только сейчас. Функция COUNTA считает и ячейки с формулами, даже если они выдают "". Такой вариант тоже не работает, к сожалению.
 
Код
Sub Выделение2()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 4).End(xlUp).Row
    If lastRow < 4 Then Exit Sub
    
    Dim arr As Variant
    arr = Cells(1, 4).Resize(lastRow).Value
    
    For lastRow = UBound(arr, 1) To 4 Step -1
        If Not IsError(arr(lastRow, 1)) Then
            If arr(lastRow, 1) <> "" Then Exit For
        End If
    Next
    
    Range("D4", "M" & lastRow).Select
End Sub
 
Цитата
МатросНаЗебре написал:

27.05.2024 09:36:57

КодSub Выделение2()
   Dim lastRow As Long
   lastRow = Cells(Rows.Count, 4).End(xlUp).Row
   If lastRow < 4 Then Exit Sub
   ...
Теперь все отлично работает. Огромное спасибо, МатросНаЗебре!
Изменено: lyolyk_p - 28.05.2024 09:27:35
Страницы: 1
Наверх