Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Раскрой заготовки с использованием VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Раскрой заготовки с использованием VBA
vodomut Дата: Пятница, 29.03.2013, 15:33 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, уважаемые форумчане!
Возможно ли с использованием VBA решить такую задачу:

Имеем прямоугольную заготовку "A" размерами 14152 х 9435 и прямоугольную деталь "B" размерами 3774 х 1769.
1) Сколько деталей "B" можно получить из заготовки "A". (детали "B" можно располагать на заготовке "A" в разных направлениях)
2) Сколько деталей "B" будет расположено вдоль заготовки?

Возможно более понятно изложено в прикрепленном файле.

Заранее спасибо.
К сообщению приложен файл: 3754355.xls (42.5 Kb)


Сообщение отредактировал vodomut - Пятница, 29.03.2013, 15:33
 
Ответить
СообщениеЗдравствуйте, уважаемые форумчане!
Возможно ли с использованием VBA решить такую задачу:

Имеем прямоугольную заготовку "A" размерами 14152 х 9435 и прямоугольную деталь "B" размерами 3774 х 1769.
1) Сколько деталей "B" можно получить из заготовки "A". (детали "B" можно располагать на заготовке "A" в разных направлениях)
2) Сколько деталей "B" будет расположено вдоль заготовки?

Возможно более понятно изложено в прикрепленном файле.

Заранее спасибо.

Автор - vodomut
Дата добавления - 29.03.2013 в 15:33
ikki Дата: Пятница, 29.03.2013, 15:35 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (vodomut)
Возможно ли с использованием VBA

при наличии алгоритма.

у вас есть алгоритм?
давайте его сюда.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Цитата (vodomut)
Возможно ли с использованием VBA

при наличии алгоритма.

у вас есть алгоритм?
давайте его сюда.

Автор - ikki
Дата добавления - 29.03.2013 в 15:35
vodomut Дата: Пятница, 29.03.2013, 15:57 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

К сожалению на такой вариант алгоритма нет. В случае расположения деталей в одном направлении обходился формулой, считал сколько деталей вдоль - сколько поперек и выбирал максимальное значение.
А по такому варианту даже не знаю с какой стороны подходить. sad
При использовании такого расчета результат получается не правильный, т.к. при расположении деталей как на рис.1 получим 19 а не 16.

[vba]
Код
Sub Cutting()
'
'Извлекаем размер заготовки
A = Range("B4")
B = Range("C4")
'Извлекаем размер детали
x = Range("E4")
y = Range("F4")
'
'Кол-во деталей
L = 0
'
'Определяем максимальное количество деталей
N1 = Int(A / x) * Int(B / y)
If L < N1 Then L = N1
'
N2 = Int(A / y) * Int(B / x)
If L < N2 Then L = N2
'
'Возвращаем максимальное кол-во деталей
Range("F7") = L
If N1 = L Then
Range("F8") = L
Else
Range("F8") = 0
End If
'
Range("F9") = L - Range("F8")
'
End Sub
[/vba]

[admin]Оформляйте коды тегами![/admin]
К сообщению приложен файл: 6956840.xls (57.0 Kb)


Сообщение отредактировал vodomut - Пятница, 29.03.2013, 18:35
 
Ответить
СообщениеК сожалению на такой вариант алгоритма нет. В случае расположения деталей в одном направлении обходился формулой, считал сколько деталей вдоль - сколько поперек и выбирал максимальное значение.
А по такому варианту даже не знаю с какой стороны подходить. sad
При использовании такого расчета результат получается не правильный, т.к. при расположении деталей как на рис.1 получим 19 а не 16.

[vba]
Код
Sub Cutting()
'
'Извлекаем размер заготовки
A = Range("B4")
B = Range("C4")
'Извлекаем размер детали
x = Range("E4")
y = Range("F4")
'
'Кол-во деталей
L = 0
'
'Определяем максимальное количество деталей
N1 = Int(A / x) * Int(B / y)
If L < N1 Then L = N1
'
N2 = Int(A / y) * Int(B / x)
If L < N2 Then L = N2
'
'Возвращаем максимальное кол-во деталей
Range("F7") = L
If N1 = L Then
Range("F8") = L
Else
Range("F8") = 0
End If
'
Range("F9") = L - Range("F8")
'
End Sub
[/vba]

[admin]Оформляйте коды тегами![/admin]

Автор - vodomut
Дата добавления - 29.03.2013 в 15:57
GWolf Дата: Понедельник, 02.12.2019, 11:10 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 3 ±
Замечаний: 0% ±

Доброго всем дня!

При использовании такого расчета результат получается не правильный


могу предложить такой вариант:
[vba]
Код
Sub Cutting()
    '
    
    Range("F7").Clear
    Range("F8").Clear
    Range("F9").Clear
    
    'размер заготовки в переменные
    A = Range("B4")
    B = Range("C4")
    'размер детали в переменные
    x = Range("E4")
    y = Range("F4")
    '
    N1 = Int(A / x)
    N2 = Int(A / y)

    F1 = Int(B / x)
    F2 = Int(B / y)

    L1 = N1 * F2
    L2 = N2 * F1

    If L1 > L2 Then
        L = L1
    
        S1 = A - (N1 * x)
        T2 = B - (F2 * y)
    Else ' L1 < L2
        L = L2
    
        S2 = A - (N2 * y)
        T1 = B - (F1 * x)
    End If

    U = T1 + T2
'Stop
    If U > x Or U > y Then
        B = A
        A = U
    End If

'
    N1b = Int(A / x)
    N2b = Int(A / y)

    F1b = Int(B / x)
    F2b = Int(B / y)

    L1b = N1b * F2b
    L2b = N2b * F1b

    If L1b > L2b Then
        Lb = L1b
    
        S1b = A - (N1b * x)
    Else ' L1 < L2
        Lb = L2b
    
        S2b = A - (N2b * y)
    End If
    
    'Возвращаем максимальное кол-во деталей
    Range("F7") = L + Lb
    Range("F8") = Lb
    Range("F9") = L
End Sub
[/vba]
К сообщению приложен файл: Rasklad.xlsm (26.2 Kb)


Путей к вершине множество. Этот один из многих...

Сообщение отредактировал GWolf - Понедельник, 02.12.2019, 11:11
 
Ответить
СообщениеДоброго всем дня!

При использовании такого расчета результат получается не правильный


могу предложить такой вариант:
[vba]
Код
Sub Cutting()
    '
    
    Range("F7").Clear
    Range("F8").Clear
    Range("F9").Clear
    
    'размер заготовки в переменные
    A = Range("B4")
    B = Range("C4")
    'размер детали в переменные
    x = Range("E4")
    y = Range("F4")
    '
    N1 = Int(A / x)
    N2 = Int(A / y)

    F1 = Int(B / x)
    F2 = Int(B / y)

    L1 = N1 * F2
    L2 = N2 * F1

    If L1 > L2 Then
        L = L1
    
        S1 = A - (N1 * x)
        T2 = B - (F2 * y)
    Else ' L1 < L2
        L = L2
    
        S2 = A - (N2 * y)
        T1 = B - (F1 * x)
    End If

    U = T1 + T2
'Stop
    If U > x Or U > y Then
        B = A
        A = U
    End If

'
    N1b = Int(A / x)
    N2b = Int(A / y)

    F1b = Int(B / x)
    F2b = Int(B / y)

    L1b = N1b * F2b
    L2b = N2b * F1b

    If L1b > L2b Then
        Lb = L1b
    
        S1b = A - (N1b * x)
    Else ' L1 < L2
        Lb = L2b
    
        S2b = A - (N2b * y)
    End If
    
    'Возвращаем максимальное кол-во деталей
    Range("F7") = L + Lb
    Range("F8") = Lb
    Range("F9") = L
End Sub
[/vba]

Автор - GWolf
Дата добавления - 02.12.2019 в 11:10
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!