Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 16:01   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Чтения данных, только с одного диапазона

Как это сделать, красным, так ошибка?
Код:
For Each x In Target
   Cells(x.Row, 12) = Cells(x.Row, 4) * Sheets(11).[$Q$3:$Q$33]
Next
Сейчас у меня, так.
Код:
For dat = 0 To 30
   With [A3:J33].Offset(dat * 44)
      If Not Intersect(Target, .Cells) Is Nothing Then
For Each x In Target
   Cells(x.Row, 12) = Cells(x.Row, 4) * Sheets(11).Cells(x.Row - dat * 44, 17)

Последний раз редактировалось valerij; 26.07.2011 в 16:10.
valerij вне форума Ответить с цитированием
Старый 26.07.2011, 16:09   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Sheets(11).[$Q$3:$Q$33] - это массив значений, причем двумерный. А Вам нужно одно значение. Может быть, Sheets(11).[$Q$3] ?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 26.07.2011, 16:13   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Sheets(11).[$Q$3:$Q$33] - это массив значений, причем двумерный. А Вам нужно одно значение. Может быть, Sheets(11).[$Q$3] ?
А если данные нужны из Q33, то как?
Я подправил, как у меня сейчас.
Хочу избавится от цикла For dat = 0 To 30

Последний раз редактировалось valerij; 26.07.2011 в 16:15.
valerij вне форума Ответить с цитированием
Старый 26.07.2011, 16:19   #4
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
А если данные нужны из Q33, то как?
Я подправил, как у меня сейчас.
Хочу избавится от цикла For dat = 0 To 30
тогда я думаю так

For Each x In Target
Cells(x.Row, 12) = Cells(x.Row, 4) * Sheets(11).range("Q33")
Next
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 26.07.2011, 16:27   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вариант1: Макросом в первую ячейку 12-го столбца вставляешь формулу, и макросом же (метод AutoFill) протягиваешь формулу по диапазону ячеек
Вариант2: (намного быстрее и лучше) - макросом пишешь формулу сразу во весь диапазон ячеек

Тогда не будет циклов - ни For Each x In Target, ни For dat = 0 To 30

Примеров кода приводить не буду - ты сам их всё равно не адаптируешь под свои макросы.
EducatedFool вне форума Ответить с цитированием
Старый 26.07.2011, 16:40   #6
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вариант1
Вариант2:.
Понял, что не понял, но пробую.
Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
тогда я думаю так
Не катит, x.Row должен = тому же № ячейки в Листе11, но в диап. 3 - 33
valerij вне форума Ответить с цитированием
Старый 26.07.2011, 16:50   #7
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
Понял, что не понял, но пробую.

Не катит, x.Row должен = тому же № ячейки в Листе11, но в диап. 3 - 33
Может лучше опишите нам четко что из чего должно браться и куды вставляться
Дайте ТЗ, тогда я думаю вам решат вашу задачу!
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 26.07.2011, 17:49   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Может лучше опишите нам четко что из чего должно браться и куды вставляться
Ок! Мой код:
Код:
For dat = 0 To 30
   With [A3:J33].Offset(dat * 44)
      If Not Intersect(Target, .Cells) Is Nothing Then
For Each x In Target
   Cells(x.Row, 12) = Cells(x.Row, 4) * Sheets(11).Cells(x.Row - dat * 44, 17)
1. dat = 0, x.Row = от 3 до 33, лист11.x.Row = от 3(3 - 0) до 33(33 - 0)
2. dat = 1, x.Row = от 47 до 77, лист11.x.Row = от 3(47 - 44) до 33(77- 44)
3. dat = 2, x.Row = от 91 до 121, лист11.x.Row = от 3(91 - 88) до 33(121 - 88)
4. dat = 3, x.Row = от 135 до 165, лист11.x.Row = от 3(135 - 132) до 33(165 - 132)
и т. д.
Так, ясней? Или сделать, пример?

Последний раз редактировалось valerij; 26.07.2011 в 18:09.
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элемент доступен только для чтения skafiend Microsoft Office Access 2 15.05.2011 17:01
Запуск только одного экземпляра приложения Namolem Общие вопросы .NET 3 06.11.2010 00:53
Файл доступен только для чтения A_L_E_X Microsoft Office Excel 6 28.10.2010 14:09
Qt. Как перевести QSqlTableModel в режим "только для чтения"? HIC Qt и кроссплатформенное программирование С/С++ 1 14.10.2009 06:28
Связанная таб. Excel видна только для чтения, что сделать? ig237 Microsoft Office Access 0 04.07.2009 00:14