Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
25.04.2024, 11:34:33

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 243 Сообщений в 5 458 Тем от 6 763 Пользователей
Последний пользователь: tetrapack
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Ссылка на использование экселевского оператора MIN
Страниц: [1]   Вниз
Печать
Автор Тема: Ссылка на использование экселевского оператора MIN  (Прочитано 9964 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikola
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« : 10.08.2011, 13:20:52 »

Здравствуйте!
Пытаюсь освоить VBA в Excel 2003 первый день, так что заранее прошу прощения за возможно дурацкий вопрос.
Для распределения еды в походе сделал таблицу с весом рюкзака каждого участника по дням, решил распределять еду, начиная с ужина последнего дня, и назначать едки тем людям, у которых на тот момент самый лёгкий рюкзак.

Числа 43, 17 потому что так вышло в таблице. R15 Это ячейка с ослабляющим коэффициентом веса для девушек. Сначала сравниваю у кого минимальный вес с учётом коэффициента, а потом хочу записать вес из ячейки с ужином в ячейку с минимальным весом. Ошибка всегда в строке с Excel.WorksheetFunction.Min. Не смог найти в интернете ответа почему. Помогите пожалуйста.

Public Sub рацион()
Dim A As Integer, B As Integer, i As Byte, j As Byte, С As Integer, D As String
i = 43
Do While i >= 19
j = 20
Do While j >= 17
A = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(2, i), Cells(6, i)))
B = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i)))
If A * Range("R15") < B Then
Sheets("Расчёты").Cells(j, i).Сору Destination:=Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(2, i), Cells(6, i)))
Else
C = Sheets("Расчёты").Cells(j, i)
D = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i))).adress
C.Copy Destination:=D
End If
j = j - 1
Loop
i = i - 2
Loop
End Sub

Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #1 : 10.08.2011, 15:40:24 »

D = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i))).adress
Здесь ошибка .Функция возвращает минимальное значение,а не объект Range
Вам по этому значению надо найти ячейку с этим значением
Код:
 Dim D as double
D = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i)))

Записан
nikola
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #2 : 11.08.2011, 09:54:28 »

Спасибо за ответ.
Пытаюсь сделать так или иначе, но при копировании сослаться на ячейку по адресу D не получается.
C = Sheets("Расчёты").Cells(j, i)
D = Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i)))
Worksheets("Расчёты").Cells(j, i).Copy Destination = Range(D)
то же самое если просто D, или с двоеточием и без.
Ошибка "Метод Copy из класса Range завершён неверно"

Посоветуйте пожалуйста электронный справочник по VBA для Excel, не нашёл такого чтобы были расписаны примеры по каждой команде.
Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #3 : 11.08.2011, 10:23:41 »

А если так
Код:
d = Excel.WorksheetFunction.Match(Excel.WorksheetFunction.Min(Sheets("Расчёты").Range(Cells(7, i), Cells(13, i))), Sheets("расчёты").Range(Cells(7, i), Cells(13, i)), 0)
 
PS:В книгах найдёте не все
Записан
nikola
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #4 : 11.08.2011, 11:02:45 »

К сожалению, та же самая ошибка
Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #5 : 11.08.2011, 11:42:36 »

А слабо файл приложить,а то злые админы  Билла мне установили лимит на создание файлов в месяц
Записан
nikola
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #6 : 11.08.2011, 12:24:06 »

Надо же, не знал что такое ограничение возможно.
Записан
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #7 : 11.08.2011, 14:09:38 »

Этот код ,как пример.
Есть диапазоны полностью пустые,там будет ошибка.
Цитировать
«Трудно найти черную кошку в темной комнате, особенно если ее там нет»
Кун Фу-Цзы
Это относится к пустым диапазонам
например столбцы 37,39.
Заполните их нулями
Код:
Public Sub Рацион()
Dim A As Integer, B As Integer, i As Byte, j As Byte, Ñ As Integer, D As Double
i = 43
With Sheets("Расчёты")
Do While i >= 19
j = 20
Do While j >= 17
A = Excel.WorksheetFunction.Min(.Range(Cells(2, i), Cells(6, i)))
B = Excel.WorksheetFunction.Min(.Range(Cells(7, i), Cells(13, i)))
If A * .Range("R15") < B Then
F = Excel.WorksheetFunction.Match(Excel.WorksheetFunction.Min(.Range(Cells(2, i), Cells(6, i))), .Range(Cells(2, i), Cells(6, i)), 0)
.Cells(j, i) = .Cells(j, F).Value
Else
C = .Cells(j, i)
D = Excel.WorksheetFunction.Match(Excel.WorksheetFunction.Min(.Range(Cells(7, i), Cells(13, i))), .Range(Cells(7, i), Cells(13, i)), 0)
.Cells(j, i) = .Cells(j, D).Value
End If
j = j - 1
Loop
i = i - 2
Loop
End With

End Sub
Записан
nikola
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля E-mail
« Ответ #8 : 11.08.2011, 14:27:07 »

Спасибо, вечером попробую код!
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru