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

Код: 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
01.04.2011, 18:29
    #37194982
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Код: plaintext
Range.SpecialCells(xlCellTypeLastCell)
...
Рейтинг: 0 / 0
01.04.2011, 19:16
    #37195065
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Akina
Код: plaintext
Range.SpecialCells(xlCellTypeLastCell)

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

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

там не только споры, но и варианты, например последний мой пример
Номер последней строки или столбца
...
Рейтинг: 0 / 0
02.04.2011, 11:14
    #37195535
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
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
02.04.2011, 11:33
    #37195558
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Нет, я об этом
Код: 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
02.04.2011, 12:07
    #37195588
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Deggasad, осталось только чуть-чуть, для просветления:
??? как её использовать, писать WB = 1 или WB = "Лист1" ????

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

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

Код: 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
02.04.2011, 12:53
    #37195621
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Ципихович Эндрю,
лист Лист1 - пустой, или на нем есть данные только в первой строке.
...
Рейтинг: 0 / 0
02.04.2011, 13:19
    #37195636
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
скукотища, есть Экселевский файл, в нём 3 листа, но только в одной ячейке Е18 есть данные, а RealLastRow = 1, почему, что присвается в RealLastRow??
...
Рейтинг: 0 / 0
02.04.2011, 15:09
    #37195696
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Ципихович Эндрю,
это одни из граблей, когда начало 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
02.04.2011, 15:27
    #37195704
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
скукотища, 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
02.04.2011, 15:51
    #37195716
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Ципихович Эндрюэто последняя заполненнная ячейка на листе?Кто здесь?!
...
Рейтинг: 0 / 0
02.04.2011, 16:12
    #37195731
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
скукотища,

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

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

Код: 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
04.04.2011, 09:34
    #37197269
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию с OFFSET
Ципихович Эндрю,

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


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