Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Range, из номеров ячеек в string 
V
    Опции темы
Edd
Дата 11.4.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2006

Репутация: нет
Всего: 1



Известны координаты ячеек, к примеру: (1,1) - первая, (10,10)-последняя
Как перевести это в формат "A1:J10".

В начале делалось так:
Код

rr="A1:J10"
x1 = Range(rr).Row
y1 = Range(rr).Column
x2 = Range(rr).Row + Range(rr).Rows.Count - 1
y2 = Range(rr).Column + Range(rr).Columns.Count - 1

Что-то считалось и добавилось ещё пара Rows и Columns.

Как теперь сделать обратный процесс выше преведённого кода?
PM MAIL   Вверх
mihanik
Дата 11.4.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Т.е. у тебя есть нотация "A1:J10", и тебе её надо перекинуть в нотацию (1,1)-(10,10) ?
Так?


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Edd
Дата 11.4.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2006

Репутация: нет
Всего: 1



Наоборот, есть (1,1) (10,10) надо в "A1:J10".
Точнее x1,x2,y1,y2 как первая и последняя ячейка.
PM MAIL   Вверх
mihanik
Дата 11.4.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Ну... Что-то типа

Код

    MyCol1 = 1
    MyRow1 = 1
    MyCol2 = 10
    MyRow2 = 10

    R = Chr(64 + MyCol1) & CStr(MyRow1) & ":" & Chr(64 + MyCol2) & CStr(MyRow2)




--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Edd
Дата 11.4.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2006

Репутация: нет
Всего: 1



У меня похожее, проблема когда мозет быть AA, AB, AC ...
Мозно конечно проверку влепить (if MyCol1>26 then ...)

Думал для таких случаев есть готовая функция
PM MAIL   Вверх
mihanik
Дата 11.4.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Цитата(Edd @  11.4.2007,  11:07 Найти цитируемый пост)
конечно проверку влепить (if MyCol1>26 then ...)


Не можно, а нужно.

А про стандартную функцию подумаю...

Добавлено через 5 минут и 50 секунд
НАШЁЛ!!!

Пляши от этого

Цитата

Range and Cells
Use Range(cell1, cell2), where cell1 and cell2 are Range objects that specify the start and end cells, to return a Range object. The following example sets the border line style for cells A1:J10.

With Worksheets(1)
    .Range(.Cells(1, 1), _
        .Cells(10, 10)).Borders.LineStyle = xlThick
End With
  
Notice the period in front of each occurrence of the Cells property. The period is required if the result of the preceding With statement is to be applied to the Cells property— in this case, to indicate that the cells are on worksheet one (without the period, the Cells property would return cells on the active sheet).




--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Aloha
Дата 11.4.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



Edd

Вариант
Код
Range(Cells(x1, y1), Cells(x2, y2))

mihanik уже привел, но есть еще такой:
Код
Cells(x1, y1).Resize(R, C)

Например, такой код:
Код
  Debug.Print Range(Cells(2, 5), Cells(121, 204)).Address

и такой:
Код
  Debug.Print Cells(2, 5).Resize(120, 200).Address

вернут одно и тоже
PM   Вверх
mihanik
Дата 11.4.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Всё очень просто!!!

Код

Sub MyRangeName()
    Dim mc As Object
    
    Set mc = Worksheets(1).Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(10, 10))
    MsgBox mc.Address()

End Sub


Добавлено через 1 минуту и 44 секунды
Помечу решённым?

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

Пример.
Код

MsgBox mc.Address()                              ' $A$1
MsgBox mc.Address(RowAbsolute:=False)            ' $A1
MsgBox mc.Address(ReferenceStyle:=xlR1C1)        ' R1C1




--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Edd
Дата 11.4.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2006

Репутация: нет
Всего: 1



Ура-а smile , спасибо, всё работает.

Код

        Dim mc As Object
        Set mc = Worksheets(2).Range(Worksheets(2).Cells(y1, x1), Worksheets(2).Cells(y2, x2))
        table4 = mc.Address(RowAbsolute:=False, ColumnAbsolute:=False) '    "A1:J10" без $

PM MAIL   Вверх
mihanik
Дата 11.4.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Рад за тебя.

Думаю, что строку
Код

table4 = mc.Address(RowAbsolute:=False, ColumnAbsolute:=False) '    "A1:J10" без $


можно заменить на 

Код

table4 = mc.Address(ReferenceStyle:=xlR1C1)



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1242 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.