Массивы в листе Excel

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

Массивы в листе Excel

Сообщение Vitaly1 » 24.04.2003 (Чт) 14:14

Как справедливо тут подсказал Calvin для задания новой точки отсчета двумерного массива:
sheets(1).range("AA1").offset(i,j).Value
т.е. от точки "AA1" мы будем перебирать индекс столбцов и строк (i,j) начиная с 1.

а существуетли подобный объект для перебора одномерного массива от указанной точки:
sheets(1).range("AA1").offset(1,j).Value - так не годится, хорошо бы, что бы указывать только одну координату ячейки.

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

Сообщение Calvin » 24.04.2003 (Чт) 14:32

может я не понял вопрос, но sheets(1).range("AA1").offset(1,j).Value это оно и есть (offset(о,j) допустим) или ты не то имел ввиду?

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

Сообщение Vitaly1 » 24.04.2003 (Чт) 17:00

нет не то.
можно ли в круглых скобках объекта указывать только одну координату, как в одномерном массиве a(1), a(2) и т.п.
Когда через объект
sheets(1).range("AA1").offset(i,j).Value
то можно один двумерный массив начать, допустим в ячейке "AA1",
другой в "A1", при этом в offset(i,j) координаты массивов будут начинаться с 1,1, как и положенно. Но указывать offset(1,j), конечно можно, размещать один массив в первой строке, другой во второй и т.д. но хочется вводить только одну координату в скобках, допустим, еслиб можно было бы:
sheets(1).range("A1").offset1(j).Value
sheets(1).range("A10").offset1(j).Value

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

Сообщение Vitaly1 » 24.04.2003 (Чт) 18:02

Сам догадался в Range пишем точку отсчета, а за тем через объект Rows если массив горизонтальный , или объект Columns, если вертикльный координату ячейки.
Range("b1").Rows(1).Value = 5

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

Сообщение Vitaly1 » 24.04.2003 (Чт) 18:53

Добавляю к теме
Объекты:
sheets(1).range("AA1").offset(i,j).Value
координаты начинаются с 0

sheets(1).range("AA1").cells(i,j).Value
координаты начинаются с 1

sheets(1).range("AA1").rows(j).Value
sheets(1).range("AA1").columns(i).Value
координата начинается с 1

а есть объект в котором для одномерного массива координата начаналась с 0?
Последний раз редактировалось Vitaly1 25.04.2003 (Пт) 13:03, всего редактировалось 1 раз.

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

Сообщение Calvin » 25.04.2003 (Пт) 10:10

На мой взгляд ты провел неплохие исследования. Но еще хочу отметить (в дополнении к теме) для тех, кто интересуется этим вопросом, что в объекте Range можно указывать не только одну "точку отчета", а воспользоваться так называемыми несвязанными диапазонами (допустим в случае, если мы имеем несколько одинаковых по размеру и "предназначению" таблиц и нам нужно произвести над ними однотипные операции), к примеру
Код: Выделить всё
sheets(1).range("A1, W1").offset(i,j)...

то это удобно.... :)

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

Сообщение Vitaly1 » 25.04.2003 (Пт) 13:05

Calvin - спасибо, полезная информация, там и адрес листа можно указать?

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

Сообщение Vitaly1 » 25.04.2003 (Пт) 13:58

Имеется ввиду если массивы лежат на разных листах, но с ними осуществлять однотипные операции.

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

Сообщение Calvin » 25.04.2003 (Пт) 14:15

На мой взгляд нельзя (может я и не прав). Вот допустим если бы и была возможность так сделать, то при выборе (Select) ячеек на разных листах явно возникала бы ошибка. А вот по изменению пропертей, то это другое дело, но........... :roll:

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 25.04.2003 (Пт) 14:30

select и range можно делать только на активном листе
Ничто так не ограничивает полёт мысли программиста, как компилятор

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

Сообщение Calvin » 25.04.2003 (Пт) 14:48

2 Corgi
я понимаю, тем более, по-моему эта тема (про что ты говоришь) уже подымалась на форуме. Тут немного другая проблема.....


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 61

    TopList