Координаты не пустых ячеек

Программирование на Visual Basic for Applications
Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Координаты не пустых ячеек

Сообщение Vitaly1 » 30.04.2003 (Ср) 15:03

Это было в прошлом форуме, но думаю будет полезна информация для всех.

Имеется лист Екселя с непустыми ячейками, ответьте кто знает:
1)Как определить координату самой нижней и самой правой ячейке.
2) Как определить индекс столбца самой нижней и самой правой ячейке.
3) Как определить индекс строки самой нижней и самой правой ячейке.
4) Как определить координату самой верхне и самой левой ячейке.
5) Как определить индекс столбца самой верхне и самой левой ячейке.
6) Как определить индекс строки самой верхне и самой левой ячейке.
7)Как определить индекс строки В УКАЗАННОМ СТОЛБЦЕ самой НИЖНЕЙ ячейке.
8)Как определить индекс строки В УКАЗАННОМ СТОЛБЦЕ самой ВЕРХНЕЙ ячейке.
9)Как определить индекс столбца В УКАЗАННОй строке самой крайней левой ячейке.
10)Как определить индекс столбца В УКАЗАННОй строке самой крайней правой ячейке.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 30.04.2003 (Ср) 15:58

ну если диапазон значений не имеет пустых ячеек, то наверное так
Код: Выделить всё
1. Range("A1").End(xlDown).End(xlToRight).Address
2. Range("A1").End(xlDown).End(xlToRight).Column
3. Range("A1").End(xlDown).End(xlToRight).row

ну а дальше по аналогии.....

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 17:02

1. Range("A1").End(xlDown).End(xlToRight).Rows.Address
- не хрена не получается!
Это не ответ на мой вопрос!
Дает адрес первой заполненной ячейки в столбце B
Изменения адреса Range("A1:IV65536") на полную матрицу дает чушь полную
xlUp - дает тоже самое что xldown
2. Range("A1").End(xlDown).End(xlToRight).Rows.Column
- полная чушь дает не понятно какой столбец, последни правый столбец заполненный 3 а дает 256
3. Range("A1").End(xlDown).End(xlToRight).Rows.row
- полная чушь, не ответ на мой вопрос, дает первую строку не пустой ячейки в столбце A
c xlUp -получается полная чушь
Ответьти пожалусто кто может, понятно на пронумерованные вопросы первого сообщения моего топика

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 30.04.2003 (Ср) 17:36

Извини :oops: , я там поначалу случайно затисал
Range("A1").End(xlDown).End(xlToRight).Rows..Address
но успел все сразу же исправить. Попробуй протестить еще разок...
ЗЫ а что означает?
Изменения адреса Range("A1:IV65536") на полную матрицу дает чушь полную

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 18:39

Увы пока сам нашел ответы только на два вопроса для столбца A

7)Range("A65536").End(xlUp).Row
- координата последней заполненной ячейки в столбце А
8)MsgBox Range("A1").End(xlDown).Row
- координата первой заполненной ячейки в столбце А

Увы, пока ничего другого путного не получается!! :cry:
Сalvin
A1 - начальная координата листа
IV65536 -последний столбец IV и строка 65536 (конечная координата листа)
тут я понял это не к месту.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 30.04.2003 (Ср) 18:51

A1 - начальная координата листа
IV65536 -последний столбец IV и строка 65536 (конечная координата листа)
тут я понял это не к месту.

да это я понял, я вообще про фразу спрашивал :wink:
Я просто не совсем представляю, какова конкретно задача, может скажешь, тогда вместе че-нить и придумаем...

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 19:06

На листе Ексель есть заполненные ячейки (o- не заполненные, ^ заполненные , где не знаем)
Допустим:
. a b c d e f ....
1 0 ^ 0 ^0 ^
2 0 0 0 0 0 0
3 0 0 0 0 0 ^

что бы не перебирать всю матрицу а хочу узнать адресс заполненной верхней левой и нижней правой ячейки т.е. b1 f3

А хочу перебирать строки, но не все, а те в которых есть заполненные ячейки, т.е. хочу узнать адресс 1 и 3ей строки

В строке 1, допустим, я хочу перебирать столбцы в заполненных ячейках, т.е. я должеy определить координату 2 столбца b и 6 столбца f

и т.п.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 30.04.2003 (Ср) 20:44

Я тут немного поразмыслил и ....вот, допустим, можно определить адресс самой нижней непустой ячейки на всем листе (на мой взгляд это довольно быстрый способ :wink: ), то же самое можно по аналогии сделать относительно и самых правых непустых ячеек и т.д.
Код: Выделить всё
For i = 1 To Columns.Count
    If Range("a65536").Offset(0, i - 1).End(xlUp).Row > Range ("a65536").Offset(0, j).End(xlUp).Row Then
    j = i
    j1 = Range("a65536").Offset(0, i - 1).End(xlUp).Row
    End If
Next

MsgBox "Столбец - " & j & " Строка -  " & j1

End Sub


Тем более определив самую нижнюю непустую ячейку, можно ограничить поиск непустой ячейки (дойдя вниз до известной нам строки, где находится непустая ячейка) относительно права и лева
........а вот дальше, это уже другая история :wink:
.
.
.
........замечательно :)
Последний раз редактировалось Calvin 30.04.2003 (Ср) 21:24, всего редактировалось 1 раз.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 20:56

Да, это достаточно быстро

Но мне кажется, что Ексель позволяет это делать и без перебора

и я бы сделал так
j=1
j1=1
For each r in range("a65536:iv65336")
If Range(r.adress).End(xlUp).Row > j Then
j =Range(r.adress).End(xlUp).Row
j1 = r.column
End If
Next

MsgBox "Столбец - " & j1 & " Строка - " & j

это будет быстрее потому, что компьютер не будет производить операцию сложения.

Но наверно есть другие способы без перебора.Да, это достаточно быстро :)

Но мне кажется, что Ексель позволяет это делать и без перебора

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 04.05.2003 (Вс) 10:13

Ну вот, что я могу сделать без перебора:

7)Range("A65536").End(xlUp).Row
- координата последней заполненной ячейки в столбце А
8)Range("A1").End(xlDown).Row
- координата первой заполненной ячейки в столбце А
9)Range("A1").End(xltoleft).Row
- координата первой заполненной ячейки в строке 1
8)MsgBox Range("IV1").End(xlToright).Row
- координата последней заполненной ячейки строке 1

Могу притащить коды программы завтра для
а) Определение координаты последнего заполненного столбца и последней строки в листе
б) Определение координаты первого заполненного столбца и первой строки строки в листе

Но сдается мне, что это можно сделать и без перебора, ведь если заципится за ползунок линейки прокрутки и двигать его, он не уйдет ниже пустой ячейки больше, чем на одну координату!
Кто знает, как определить a,б


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 12

    TopList