Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2020, 13:31   #1
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию определить последнюю ЯЧЕЙКУ в определенном столбце

Ребята здравствуйте! пример приложил, кликните кнопку на листе р3а, формируется лист "отчет", как поместить итог в 5 или 6 строку, в макросе листинга выделил строку
Код:
iLastRow = Cells(1, 6).End(xlDown).Row
которая должна определять последнюю ячейку заполненную в столбце "F"
Вложения
Тип файла: rar пример (2).rar (113.9 Кб, 14 просмотров)
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 15.01.2020, 17:44   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

ничего не понятно, но очень интересно.
У меня вот такой код определяет последнюю ячейку в столбце
Код:
iLastRow = raw_data_list.Cells(Rows.Count, 1).End(xlUp).Row
где 1 это номер столбца в котором нужно определять
unbanned вне форума Ответить с цитированием
Старый 15.01.2020, 18:01   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Там в ячейках не Empty, а пустая строка - думаю это влияет.
Как побороть так сразу не придумал, но точно можно вычислить например циклом по массиву.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.01.2020, 19:22   #4
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

unbanned, да вы правы если вы заметили то в коде присутствует два варианта которые можно использовать
Код:
iLastRow = Cells(1, 6).End(xlDown).Row
iLastRow = Cells(Rows.Count, 6).End(xlUp).Row
но все равно не срабатывает так как хотелось бы, и я могу только предположить, что может это зависит от того что предыдущий код , вот этот макрос записан автоматически
Код:
Columns("F:F").Select
        Application.CutCopyMode = False
            Selection.Copy
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                    
         Range("F1").Select
копирует и вставляет как "значение и после уже идет определение последней строки в ячейке столбца 6
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 15.01.2020, 19:59   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вы меня не поняли - я говорю про те "пустые"
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.01.2020, 20:09   #6
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

Hugo121, вас то я понял), это я писал для unbanned
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 15.01.2020, 21:04   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от DMITRIY_78 Посмотреть сообщение
это зависит от того что предыдущий код , вот этот макрос записан автоматически
имхо из-за того что в ячейках строк 5-6 есть формулы, а значит они не пустые. Может, как было предположено, в цикле считать от последней строки до первой непустой?

Код:
Option Explicit

Dim myRow As Long
Dim iLastRow As Long
Sub отчет()
    
    Application.ScreenUpdating = False
    Worksheets.Add(After:=Sheets(Sheets.Count)).Name = "Отчет" 'создаем новый лист-переименовваем-переносим в конец всех листов
    Sheets("Отчет").Activate
    Range("A1").Select
    Range("A1").FormulaLocal = "=""ФИО "" & СЧЁТЗ($A$2:$A$2000) &"" поз."""
    Range("B1").FormulaLocal = "Место Лист"
    Range("C1").FormulaLocal = "Выдано Кол-во"
    Range("D1").FormulaLocal = "Дата выдачи"
    Range("E1").FormulaR1C1 = "=""Сроки на: ""&CHAR(10)&TEXT(TODAY(),""ДД.ММ.ГГ"")"
    Range("F1").FormulaLocal = "Отчетный Период"
    Range("G1").FormulaLocal = "ИТОГО"
    
    
    '================ сборка
    Dim ws As Worksheet, i As Long, x As Range, y As Range
    Dim a
    Application.ScreenUpdating = False
    Rows("2:" & Rows.Count).ClearContents
    For Each ws In Sheets
        If ws.Name <> "отчет" And ws.Visible < 0 Then
            Set x = ws.Range("D5:D" & ws.Cells(Rows.Count, 1).End(xlUp).Row)
            On Error Resume Next
            Set x = x.SpecialCells(xlCellTypeBlanks)
            If Err = 0 Then
                For Each y In x
                    i = Cells(Rows.Count, 1).End(xlUp).Row + 1
                    Cells(i, 1) = y.Offset(, -3)
                    Cells(i, 2) = ws.Name
                    Cells(i, 3) = y.Offset(, -1)
                    Cells(i, 4) = y.Offset(, -2)
                Next
                Else: On Error GoTo 0
            End If
        End If
    Next
    '==============
    Columns("A:A").ColumnWidth = 25
    Columns("B:F").ColumnWidth = 10
    Columns("D:D").NumberFormat = "dd/mm/yy;@" 'УСТАНАВЛИВАЕМ ФОРМАТ ДЛЯ ОТОБРАЖЕНИЕ ДАТЫ
    Rows("1:1").RowHeight = 34
    Rows("1:1").Font.Bold = True
    With Range("1:1,B:G")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .VerticalAlignment = xlCenter 'атрибут перенос текста на новую строку
        .WrapText = True
    End With
    Application.ScreenUpdating = False
    iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    '===========
    'расчет формулой по дате
    Range("E2").FormulaArray = _
    "=IFERROR(DATEDIF(TEXT(RC[-1],""ДД.ММ.ГГГГ""),TODAY(),""d""),"""")"
    Range("E2").AutoFill Destination:=Range("$E$2:$E$" & iLastRow), Type:=xlFillDefault 'протаскивание формулы до конца диапазона
    '==============
    'расчет формулой по периодам по листам
    Range("F2").FormulaArray = _
    "=IFERROR(INDEX(R2C2:R100C2,MATCH(0,COUNTIF(R[-1]C:R1C6,R2C2:R100C2)+IF(COUNTIF(R2C2:R100C2,R2C2:R100C2)>1,0,1),0)),"""")"
    Range("F2").AutoFill Destination:=Range("$F$2:$F$" & iLastRow), Type:=xlFillDefault 'протаскивание формулы до конца диапазона
    '================
    'итог формулой общую сумму
    Range("G2").FormulaArray = "=IF(SUMIFS(R2C3:R100C3,R2C2:R100C2,RC[-1])=0,"""",SUMIFS(R2C3:R100C3,R2C2:R100C2,RC[-1]))"
    Range("G2").AutoFill Destination:=Range("$G$2:$G$" & iLastRow), Type:=xlFillDefault 'протаскивание формулы до конца диапазона
    '=============
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row 'поиск последней заполненую ячейку в первом столбце
    Range(Cells(iLastRow + 1, 1), ActiveCell.SpecialCells(xlLastCell)).Offset(1, 0).Delete 'выделение диапазона строки
    '=============
    iLastRow = Cells(Rows.Count, "G").End(xlUp).Row
    Do While CStr(Cells(iLastRow, "G").Value) = "" And iLastRow >= 1
        iLastRow = iLastRow - 1
    Loop
    With Range("G1:F" & iLastRow)
        .Copy
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
    End With
    Cells(iLastRow + 2, "F").Formula = "Итого:" 'заполнение ячейки с учетом отступа двух последних пустых ячеек
    Cells(iLastRow + 2, "G").Formula = "=Sum(G2:G" & iLastRow & ") &"" шт.""" 'формула расчета суммы с учетом отступа двух последних пустых ячеек

    With Columns("F:G")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .VerticalAlignment = xlCenter
    End With
    Range("G1").Select
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.01.2020, 09:30   #8
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

Aleksandr H., спасибо, работает
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel. Скрыть строки если в определенном столбце год 2020ый Евгений.Al Помощь студентам 1 28.09.2019 17:04
Найти последнюю не пустую ячейку в столбце, начиная с определенной строки ольгаг Microsoft Office Excel 3 28.08.2016 19:53
Макрос_выбрать последнюю ячейку в прерывающемся списке в столбце Alexsandrr Microsoft Office Excel 2 12.02.2014 16:22
Как сделать ссылку на последнюю непустую ячейку в обновляемом столбце SVGuss Microsoft Office Excel 34 19.02.2013 16:12
Запрос на последнюю запись в столбце ins813 БД в Delphi 20 12.10.2012 15:05