powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Написать функцию с OFFSET
25 сообщений из 31, страница 1 из 2
Написать функцию с OFFSET
    #37194536
Фотография Myst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую Всех! Нужна помощь!!
Не могу написать функцию, которая бы выводила последнею заполненную ячейку в каком-либо диапазоне

Код: plaintext
1.
2.
Function LastCell(a As Range, b As Range)
LastCell = OFFSET(a,COUNTIF(a:b,"">0"")-1,0,1,1)"
End Function
Где ошибка ?
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37194982
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Range.SpecialCells(xlCellTypeLastCell)
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195065
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Код: plaintext
Range.SpecialCells(xlCellTypeLastCell)

Извините, не пойму как эту строку использовать?
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195134
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195149
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad, сделал тынц, и что там споров на три страницы, я так понял, что Вы разобрались, скажите скрипт
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195223
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю, Ваше умение задавать STFW-вопросы - просто потрясающее!

http://search.microsoft.com/results.aspx?mkt=ru-RU&setlang=ru-RU&q=xlCellTypeLastCell
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195271
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, спасибо за ссылку, говорите пжл по русски, что такое STFW возьму это на NB
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195278
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй раз в одно и тоже место посылают , усвоил ещё для себя только NR ) о, можно в медицинский поступать
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195297
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что так не катит:
Код: plaintext
1.
Столбец = "W"
Последняя_заполненная_строка_в_столбце = Cells(Rows.Count, Столбец).End(xlUp).Row
может когда то не сработать???
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195331
так как же?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непонятно ... если нужно знать не последнюю в листе заполненную строку а в конкретном диапазоне последнее значение > 0
Например, в диапазоне F10:F20 заполнены ячейки от F10 до F15 ...
вот как создать функцию LastCell(F10:F20) чтобы ввести в ячейку F21 и там вывелось значение из ячейки F15 ?
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195510
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюDeggasad, сделал тынц, и что там споров на три страницы, я так понял, что Вы разобрались, скажите скрипт

там не только споры, но и варианты, например последний мой пример
Номер последней строки или столбца
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195535
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad, Вы об этом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function RealLastRowHide(WB As Worksheet) As Long
Dim UsR As Range, K As Long, I As Long, FreeC As Long
  RealLastRowHide =  1 
  Set UsR = WB.UsedRange
  FreeC = UsR.Column + UsR.Columns.Count
  If FreeC >  256  Then FreeC =  256 
On Error Resume Next
  For I = UsR.Row + UsR.Rows.Count -  1  To  1  Step - 1 
    K = WB.Rows(I).RowDifferences(comparison:=WB.Cells(I, FreeC)).Row
    If Err.Number =  0  Then
      RealLastRowHide = I: Exit Function
    Else
      Err.Clear
    End If
  Next I
End Function

??? как её использовать, писать WB = 1 или WB = "Лист1" ????

повторюсь:
а что так не катит:

Код: plaintext
1.
Столбец = "W"
Последняя_заполненная_строка_в_столбце = Cells(Rows.Count, Столбец).End(xlUp).Row
может когда то не сработать???
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195558
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, я об этом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function RealLastRow(WB As Worksheet) As Long
Dim UsR As Range, K As Long, I As Long, FreeC As Long
  RealLastRow =  1 
  Set UsR = WB.UsedRange
  
  For I = UsR.Row + UsR.Rows.Count -  1  To  1  Step - 1 
    K = WorksheetFunction.CountIf(UsR.Rows(I), "*?") + _
        WorksheetFunction.CountIf(UsR.Rows(I), ">0")
    If K >  0  Then RealLastRow = I: Exit Function
  Next I
End Function
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195588
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad, осталось только чуть-чуть, для просветления:
??? как её использовать, писать WB = 1 или WB = "Лист1" ????

повторюсь:
а что так не катит:
Код: plaintext
1.
Столбец = "W"
Последняя_заполненная_строка_в_столбце = Cells(Rows.Count, Столбец).End(xlUp).Row
может когда то не сработать???
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195598
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю??? как её использовать, писать WB = 1 или WB = "Лист1" ????
Код: plaintext
1.
2.
Set WB = Worksheets( 1 )
Set WB = Worksheets("Лист1")
Set WB = Лист1
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195607
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

просветления не наступило:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'один из трёх объектов
'Set WB = Worksheets(1)
'Set WB = Worksheets("Лист1")
Set WB = Лист1

  Dim UsR As Range, K As Long, I As Long, FreeC As Long
  RealLastRow =  1 
  Set UsR = WB.UsedRange
  
  For I = UsR.Row + UsR.Rows.Count -  1  To  1  Step - 1 
    K = WorksheetFunction.CountIf(UsR.Rows(I), "*?") + _
        WorksheetFunction.CountIf(UsR.Rows(I), ">0")
    If K >  0  Then RealLastRow = I: Exit Sub
  Next I

Всё время RealLastRow = 1 ?????
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195621
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
лист Лист1 - пустой, или на нем есть данные только в первой строке.
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195636
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, есть Экселевский файл, в нём 3 листа, но только в одной ячейке Е18 есть данные, а RealLastRow = 1, почему, что присвается в RealLastRow??
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195696
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
это одни из граблей, когда начало UsedRange не совпадает с началом листа. ИМХО, два полностью эквивалентных варианта обхода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
' 1) 
    For I = UsR.Row + UsR.Rows.Count -  1  To UsR.Row Step - 1 
      K = WorksheetFunction.CountIf(WB.Rows(I), "*?") + _
          WorksheetFunction.CountIf(WB.Rows(I), ">0")
      If K >  0  Then RealLastRow = I: Exit Function
    Next I
' ***************************************
' 2)
    For I = UsR.Rows.Count To  1  Step - 1 
      K = WorksheetFunction.CountIf(UsR.Rows(I), "*?") + _
          WorksheetFunction.CountIf(UsR.Rows(I), ">0")
      If K >  0  Then RealLastRow = I + UsR.Row -  1 : Exit Function
    Next I

' Выбери себе. (c)
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195704
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, 2 варианта, звука не происходит, всё прёт

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sub ХЗ()

'один из трёх объектов
'Set WB = Worksheets(1)
'Set WB = Worksheets("Лист1")
Set WB = Лист1

  Dim UsR As Range, K As Long, I As Long, FreeC As Long
  RealLastRow =  1 
  Set UsR = WB.UsedRange
  
  ' 1)
    For I = UsR.Row + UsR.Rows.Count -  1  To UsR.Row Step - 1 
      K = WorksheetFunction.CountIf(WB.Rows(I), "*?") + _
          WorksheetFunction.CountIf(WB.Rows(I), ">0")
      If K >  0  Then RealLastRow1 = I: Exit For
    Next I
' *************************************************************
' 2)
    For I = UsR.Rows.Count To  1  Step - 1 
      K = WorksheetFunction.CountIf(UsR.Rows(I), "*?") + _
          WorksheetFunction.CountIf(UsR.Rows(I), ">0")
      If K >  0  Then RealLastRow2 = I + UsR.Row -  1 : Exit For
    Next I

If RealLastRow1 <> RealLastRow2 Then Beep

End Sub
считает верно, это последняя заполненнная ячейка на листе?
а как узнать в каком она столбце??
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195716
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрюэто последняя заполненнная ячейка на листе?Кто здесь?!
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37195731
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

да уж глянул, самая нижняя заполненная ячейка на листе
можно узнать
1 самую верхнюю заполненную ячейку на листе
2 самый первый и самый последний столбец в котором данные хоть одной ячейки <> 0
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37197251
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Последняя ячейка - это пересечение последнего столбца и последней строки, которое содержит какую-либо информацию.Эксель также включает ячейки, которые содержали какую-либо информацию во время работы с листом, даже если ты удалил эту информацию. Последняя ячейка не сбрасывается пока ты не сохранишь книгу.
Эксель принимает форматированные и разлоченные ячейки как содержащие информацию. Таким образом, ты обнаружишь последнюю ячейку за диапазоном, содержащим твои данные.
Если хочешь узнать последнюю ячейку всех твоих НАСТОЯЩИХ данных, то вот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub GetRealLastCell()

    Dim lRealLastRow As Long
    Dim lRealLastColumn As Long

    ' Ведём поиск с самой крайней правой нижней ячейки.
    Range("A1").Select
    On Error Resume Next
    lRealLastRow = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
    lRealLastColumn = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column
    
    ' Последняя ячейка настоящих данных. 
    Cells(lRealLastRow, lRealLastColumn).Select

End Sub

Чтобы удалить ненужный диапазон (от последней ячейки очень страдает полоса прокрутки), то вот процедурка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub ResetLastCell(ByVal sheet As Worksheet)

    Dim wksPrev As Worksheet
    Dim lLastRow As Long, lLastColumn As Long
    Dim lRealLastRow As Long, lRealLastColumn As Long
    
    With sheet

        ' Delete from used range rows & columns that have no data.
        ' Detect end of used range including empty formatted cells.
        With .Range("A1").SpecialCells(xlCellTypeLastCell)
            lLastRow = .Row
            lLastColumn = .Column
        End With
        
        ' Find end of cells with data.
        lRealLastRow = _
            .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
        lRealLastColumn = _
            .Cells.Find(" * ", .Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column
        
        ' If used range exceeds data, delete unused rows & columns.
        If lRealLastRow < lLastRow Then
            .Range(.Cells(lRealLastRow +  1 ,  1 ), .Cells(lLastRow,  1 )).EntireRow.Delete
        End If
        
        If lRealLastColumn < lLastColumn Then
            .Range(.Cells( 1 , lRealLastColumn +  1 ), .Cells( 1 , lLastColumn)).EntireColumn.Delete
        End If
        
        ' Reset last cell.
        Set wksPrev = ActiveSheet
        .Activate: ActiveSheet.UsedRange
        wksPrev.Activate

    End With
    
End Sub
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37197269
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

И если ты подумаешь, что Эксель будет реально искать с миллионной строки до первой и с 16-ты тысячного столбца до первого, то ты сильно ошибёшься, потому что Эксель следит за последней ячейкой. :)
...
Рейтинг: 0 / 0
Написать функцию с OFFSET
    #37198075
Фотография Myst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы и развели тут "дискуссию" :)
а по теме кто-нибудь может ответить как изменить функцию чтобы вывести последнее значение которое >0 в указанном диапазоне ?
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Написать функцию с OFFSET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]