Перенос значения ячеек от двойственного условия??

Программирование на Visual Basic for Applications
chempion
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 26.04.2006 (Ср) 9:21

Перенос значения ячеек от двойственного условия??

Сообщение chempion » 17.08.2006 (Чт) 10:40

Полазил по конфам и ничего не нашел подходящего.
Может кто сталкивался?

Существует "основной лист" - на нем отражается информация о человеке (работнике). В столбце "В" - отражается один параметр (всего их 19)- это числа от 1 до 19. В столбце "С" отражается другой параметр (всего их 2) - это буквы либо "о" либо "в". В столбце "d" - отражается минимальное значение этого параметра, а в столбце "e" максимальное, т.е. на отдельном листе "Параметры о" существует библиотека этих самых параметров "о" - это 19 параметров мин и макс значений, а на листе "Параметры в" отражаютя также 19 праметров "в".

Знаю.... на слух тяжело воспринимается, поэтому вот прикрепил
Вложения
Расчет параметров.xls
ХЕЛП
(18.5 Кб) Скачиваний: 65
Перед пропастью каждый шаг-решающий...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.08.2006 (Чт) 10:56

Кхм... А вопрос-то в чем? :D
Быть... или не быть. Вот. В чём вопрос?

chempion
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 26.04.2006 (Ср) 9:21

Сообщение chempion » 17.08.2006 (Чт) 12:36

Вопрос в коде макроса.Как это реализовать?
Перед пропастью каждый шаг-решающий...

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 18.08.2006 (Пт) 9:37

Расшифруй плиз что тебе надо) а то даже в "наглядном" виде не воспринимается, только мозг кипит)
'Til the blood on your hans is the blood of the King!

chempion
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 26.04.2006 (Ср) 9:21

Сообщение chempion » 18.08.2006 (Пт) 10:03

Написать макрос позволяющий проставить минимальные и максимальные значения параметров в лист "Основной" в соответствии со "ступенью" и "принадлежностью", т.е. если ячейка "В" = 1 а ячейка "С" = о, то с листа "Параметры о" нужно взять минимальное значение параметра соответствующего ступени 1 (т.к. "В" = 1) и поставить это на "Основной" лист в данной строке колонка "мин", а в колонку "макс", соотв-но максимальный параметр удовлетворяющий тому же условию.
Вариации соотв-но всякие: 1-о, 1-в, 14-в, 13-о и т.д. надеюсь понятно.

Другими словами если в столбце "С" - "о" то идем на лист "Параметры о" и осуществляем поиск по колонкам "ступень" и присваиваем соответствущий ступени "мин" и "макс" параметр на "Основной лист", а если столбец "С" - "в" то тоже самое только с листа "Параметры в"
Перед пропастью каждый шаг-решающий...

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 18.08.2006 (Пт) 10:49

Код: Выделить всё
Private Sub Кнопка1_Click()
Row = Application.CountA(Sheets("Основной лист").Columns(1)) 'находит последнюю незаполненную строку таблицы
For i=2 to Row
If ActiveWorkbook.Sheets ("Основной лист").Cells (i, 3).Value = "o" then 'Вариант для вида "о"
Select Case ActiveWorkbook.Sheets ("Основной лист").Cells (i, 2).Value 'Перебирает все значения стобца Б
Case 1 'Значение ступени - 1
ActiveWorkbook.Sheets ("Основной лист").Cells (i, 4).Value = ActiveWorkbook.Sheets ("Параметры о").Cells (2, 2).Value  'Случай "о", "1", минимальный параметр
ActiveWorkbook.Sheets ("Основной лист").Cells (i, 4).Value = ActiveWorkbook.Sheets ("Параметры о").Cells (2, 3).Value  'Случай "о", "1", максимальный параметр
Case 2
(...)
Сase 19
Ens select
Else
(тот же самый Selectf, можешь выделить в отдельную процедуру
If ActiveWorkbook.Sheets ("Основной лист").Cells (i, 3).Value = "в" then
Select Case ActiveWorkbook.Sheets ("Основной лист").Cells (i, 2).Value
Case 1 'Значение ступени - 1
ActiveWorkbook.Sheets ("Основной лист").Cells (i, 4).Value = ActiveWorkbook.Sheets ("Параметры в").Cells (2, 2).Value  'Случай "в", "1", минимальный параметр
Case 2
(...)
Сase 19
End Select
End if
End Sub


Это в том случае если ты хочешь чтобы можно было изменять 19 значения минимального и максимального параметров. Если же они остаются неизменными - вместо ссылок на соответствующие листы запросто можно поставить цифровое значение соответствующего параметра.
Громоздко, но работает. Хотя если сделать с 2мя массивами количество строк будет меньше, хотя быстродействие не увеличится.
Можно сделать с переменным имени листа, тоже по строкам меньше получится.
'Til the blood on your hans is the blood of the King!

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 18.08.2006 (Пт) 11:33

Хотя гораздо проще всё сделать без макросов и кнопок, используя стандартные формулы Excell - в частности, посмотри справку по логическим функциям типа "ЕСЛИ"
Получится такая же логическая конструкция, как и в коде - типа

=ЕСЛИ(C2="о";ЕСЛИ(B2=1;'Параметры о'!B2);ЕСЛИ('Основной лист'!B2="1";'Параметры в'!B2))

только для 19 значений. Единственная проблема - не всякий Excell сможет съесть длинную формулу. Но если цифры, записанные на листах параметров неизменны, то без ссылок на эти листы будет проще.
'Til the blood on your hans is the blood of the King!

chempion
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 26.04.2006 (Ср) 9:21

Сообщение chempion » 22.08.2006 (Вт) 7:33

C формулой я пробовал, как раз мой Excel не проглатывает. Говорит слишком длинная формула (на описании 8 ступени), поэтому путь тупиковый.
Спасибо за макрос, но он не работает. ругается на Next. (в чем дело??? сам никак понять не могу)
Перед пропастью каждый шаг-решающий...

chempion
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 26.04.2006 (Ср) 9:21

Сообщение chempion » 22.08.2006 (Вт) 8:18

Или вот ещё чего подумал, может это реализовать с помощью формы, т.е туда мин. и макс. вбивать, а не заморачиваться с другими листами?
Перед пропастью каждый шаг-решающий...

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 22.08.2006 (Вт) 10:36

Скорее всего, дело в том, что в приведённом мной коде есть For, и нету его вечного напарника Next :)
Поставь перед строчкой с End Sub, а лучше почитай что написано про циклы на http://www.mini-soft.ru/soft/vba/r_7.php

Забитые же в форме мин и макс значения тебе придётся где-то хранить чтобы потом их брать. Можно использовать переобъявление констант, но всё равно проще писать руками на листы (та же твоя форма) и делать их невидимыми.

Можно сделать цикл проще, поместив минимальные и максимальные значения для "о" и "в" на один лист и меняя переменную колонки для извлекания значений в соответствии с ними.
'Til the blood on your hans is the blood of the King!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 26.08.2006 (Сб) 4:46

Почему-то у меня ощущение, что это должно делаться так. И хотя функция ДВССЫЛ и делает формулы летучими, если файл не изобилует тяжелыми матричными формулами, то решение вполне сносное.
Вложения
Расчет параметров.xls
(19.5 Кб) Скачиваний: 64
Привет,
KL

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 26.08.2006 (Сб) 4:55

вот уже не летучий вариант
Вложения
Расчет параметров2.xls
(18.5 Кб) Скачиваний: 81
Привет,
KL


Вернуться в VBA

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

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

    TopList