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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 16:33   #1
Alex Pancho
Новичок
Джуниор
 
Регистрация: 30.05.2009
Сообщений: 5
Вопрос Обработка массива ячеек в памяти

Как обработать массив ячеек в памяти следующим образом:
1. Выделяем массив, в котором есть объединенные ячейки.
2. Ищем числовые значения в столбцах.
3. Запрашиваем у пользователя коэффициенты для формулы
4. Берем числовые значения пересчитываем их по формуле с коэффициентами, которые указал пользователь
5. Спрашиваем куда вставить
6. Вставляем результат пересчета
==========
От себя добавлю: процедуру выделения ячеек и копирования диапазона в память я написал - код во вложении. А как дальше? Просто много литературы, везде разные подходы.... И нет ясного (для меня) ответа.
1. как запросить коефициенты?
2. как пересчитать значения?
3. как вставить вроде понятно - но в том коде, что я написал - не работает
Вложения
Тип файла: zip BlankCR.zip (18.5 Кб, 16 просмотров)
Alex Pancho вне форума Ответить с цитированием
Старый 30.05.2009, 17:09   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
как запросить коефициенты?
А для чего у Вас форма? Я думал, как раз для запроса коэффициентов...

Запросить-то можно как угодно. Как именно - решать только Вам.
А мы лишь сможем посоветовать, как реализовать конкретный способ запроса.

Цитата:
как пересчитать значения?
Ну уж, если формулы Вы успешно написали, пересчитать значения труда не составит.
Код:
Private Sub var1_Click()
    Application.ScreenUpdating = False    ' отключаем временно обновление экрана
    Dim cell As Range
    Коэффициент = Val(Replace(kB1, ",", "."))    ' заменяем в тексте коэффициента запятую на точку
    For Each cell In UserRange.Cells
        If IsNumeric(cell) Then    ' если в ячейке число
            cell = For07day(cell, Коэффициент)    ' вычисляем по формуле
        End If
    Next cell
End Sub
Цитата:
процедуру выделения ячеек и копирования диапазона в память я написал
Весь файл Excel уже в памяти компьютера.
Другое дело - если считать значения в массив (командой типа arr = UserRange.Value, в результате чего получаем двумерный массив arr), а потом перебирать значения массива, но в Вашем случае можно обойтись без этого (поскольку объём данных небольшой)

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

Цитата:
Выделяем массив, в котором есть объединенные ячейки
Вот и надо было прикрепить пример файла с объединёнными ячейками, ибо при работе с ними есть свои тонкости.
Если бы таких ячеек не было, код бы получился намного проще.
EducatedFool вне форума Ответить с цитированием
Старый 30.05.2009, 19:21   #3
Alex Pancho
Новичок
Джуниор
 
Регистрация: 30.05.2009
Сообщений: 5
Печаль Спасибо!

Вы немного помогли, спасибо, кое что прояснили. Вы простите если я что-то не так спрашиваю - я ж только начинающий .... у Вас знаний на 100 таких как я ....
1. Форма то есть, но толку с нее нет - я не знаю как ее вызывать в коде макроса
2. Процедуру "For07day" я написал, но в ней коэффициенты заданы жестко, а надо чтоб через форму их можно было менять - там три коэффициента -
k1 = 1,1 to 1,9, d1 = 1 to 21, s1 = 60 to 70 и формула выходит такая:
Cell = Cell * k1 * d1 + s1
3. Допустим пока обойдемся без объединеных ячеек - как написать процедуру так, чтобы пользователь:
а. указывал исходные значения
б. задавал коэффициенты через форму
в. мог вставить готовый результат куда ему угодно?
------------
Я понимаю, что много вопросов, помогите хоть по одному.... Спасибо!
Alex Pancho вне форума Ответить с цитированием
Старый 30.05.2009, 20:10   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот сделал для примера такой вариант:



Теперь кпопка выбора диапазона не нужна (хотя она присутствует, и работает) - выделять нужный диапазон можно как до, так и после запуска формы (не нажимая на кнопку Задать область)

Формулу подредактировал.
Заменил поля ввода на выпадающие списки.

Цитата:
мог вставить готовый результат куда ему угодно?
Этот пункт не совсем понял, поэтому в данном варианте вставка производится на место исходных данных.
Вложения
Тип файла: rar BlankCR.rar (19.1 Кб, 20 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 30.05.2009, 20:21   #5
Alex Pancho
Новичок
Джуниор
 
Регистрация: 30.05.2009
Сообщений: 5
Радость СПАСИБО!

Вау!!!! Круто!! Спасибо приогромное, буду изучать.
СПАСИБО!
Alex Pancho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение двух ячеек памяти Megapixar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 14.05.2009 11:20
Обработка массива макросом Иванов_ДМ Microsoft Office Excel 8 18.04.2009 23:04
Обработка содержимого ячеек - отчистка от мусора Bromista Microsoft Office Excel 10 17.04.2009 11:39
обработка массива, с++ lusuj Помощь студентам 2 11.11.2008 19:27
Обработка вещественного массива Painsector Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 10.12.2007 19:48