Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20

Помогите с макросом

26.08.2011, 09:46. Показов 1875. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Макрос нужен для заполнения труб проводами. Суть в следующем... есть перечень проводов с известным сечением(все в одном столбце), есть 2 вида разных труб (40ка и 25ка).. можно ли написать макрос, что бы по выделению цветом нескольких проводов макрос выдал необходимое количество труб, чтоб разместить в них все выделенные провода. Алгоритм макроса я вижу следующий: производим сложение площадей проводов(выделенных цветом) до тех пор пока отношение Sтрубы40/Sсумм.проводов>1, как только стало равно или больше единицы, записываем в ячейку значение 1 для трубы 40 и продолжаем суммировать провода заново с предыдущего значения(чтобы избежать деление провода на 2 части в разных трубах) и опять при достижении значения больше 1 или 1 прибавляем еще 1 в ячейке трубы 40, как только значение ячейки с проводами достигнет пустого значения, нужно проверить оставшиеся провода в последней трубе не влезут ли они в трубу с диаметром 25, если да то +1 в ячейке с трубой 25, если нет то в ячейке с трубой 40.
Я это вижу так, помогите пожалуйста, очень нужно... Алгоритм не конечный если есть какие то предложения с удовольствием выслушаю ..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2011, 09:46
Ответы с готовыми решениями:

Помогите с несложным макросом.
Добрый день. Я тут впервые.Помогите решить несложную задачку. Изучать VBA самому только для этого не вижу смысла. Опытному программисту...

Помогите решить проблему с макросом
Всем участникам доброго времени суток! Помогите пожалуйста разрешить проблему, возникшую на ровном месте. Итак в книге Excel есть три...

Помогите разобраться с макросом по упрощению телепрограммы
Задача: перенести время в телепрограмме из повторяющихся позиций (в абзацах) в первую абзац вхождения (Больше всего меня интересует –...

17
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.08.2011, 10:00
Такой алгоритм не пойдёт.
Во первых сечение провода идёт по меди, а надо по наружней оболочке.
Во вторых надо учитывать не сечение провода, а сечение описанного квадрата.
И потом не факт, что провода будут лежать строго ровно.
И при наличии в коробе толстых и тонких проводов, последние вполне могут разместиться в "неучтённом пространстве" между толстыми. Да и сами толстые провода можно разместить "елочкой"

Добавлено через 3 минуты
И ещё: сечение труб? Круг, квадрат, прямоугольник?
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
26.08.2011, 10:12  [ТС]
Сечение труб-круг, точность не нужна главное чтоб если что был с запасом (то есть округлялось в большую сторону). ну или если есть рассуждения в другую сторону то всегда рад выслушать.. главная цель- автоматизировать процесс раскладки проводов в трубах
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.08.2011, 11:57
Ну, наверное, надо знать сечения всех возможных проводников и сечение труб.
А потом думать алгоритм. Простым сложением сечения, думаю не получится.
Надо проверять на вместимость по диаметрам
Изображения
 
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 13:00
antiponf,
здесь проблема не в программировании, а в том, как это вообще решить.
Напишите математическое решение вашей задачи и вам помогут перевести язык математики на язык программирования.
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
26.08.2011, 14:28  [ТС]
так вроде в первом посте алгоритм... даже не знаю что еще написать........
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 14:46
Цитата Сообщение от antiponf Посмотреть сообщение
производим сложение площадей проводов(выделенных цветом) до тех пор пока отношение Sтрубы40/Sсумм.проводов>1, как только стало равно или больше единицы
может как только стало равно или меньше единицы?

Или я что-то не понимаю?
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
26.08.2011, 14:48  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
может как только стало равно или меньше единицы?

Или я что-то не понимаю?
да конечно меньше или ровно.. вы правы
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 14:56
antiponf,
чтобы меньше вопросов задавать, выложите образец файла. Оставьте в этом файле только те данные, которые нужны, чтобы написать код.

Вопросы:
  1. чем выделять будете: цветом или просто мышью?
  2. выделять будете названия проводов или их сечение?
  3. где располагается ячейка для труб?
  4. сороковка - это сколько?
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
26.08.2011, 15:40  [ТС]
выделять цветом несколько проводов, насчет выделения названия или сечения это не принципиально, ячейка для труб-прикрепляю файл, а 40ка это труб у которой площадь внутр. сечения 1256 кв.мм
Вложения
Тип файла: 7z 1111.7z (17.3 Кб, 14 просмотров)
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 16:18
antiponf,
а 25-ка - это какой размер?
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
26.08.2011, 20:56  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
antiponf,
а 25-ка - это какой размер?
491 кв.мм
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 21:13
Код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Sub Процедура1()
Dim Лист As Excel.Worksheet
Dim Низ As Long
Dim Найдено As Excel.Range, Адрес As String
Dim Подсчёт As Double
'Обращаться к листу с данными будем через переменную Лист
'(так удобнее и кода меньше писать).
'Активной должна быть наша книга, а лист с данными
'должен называться Кабельный журнал.
Set Лист = ActiveWorkbook.Worksheets("Кабельный журнал")
'Определение последней заполненной ячейки в столбце K
'(чтобы все ячейки не просматривать в столбце
'(чтобы код быстрее работал)).
Низ = Лист.Cells(Лист.Rows.Count, "K").End(xlUp).Row
'Поиск и подсчёт ячеек, имеющих цвет 255
'(цвет, который используется в файле, выложенном на форуме).
'Т.к. поиск зависит от диалогового окна Найти и заменить, то
'надо очистить это диалоговое окно от формата.
Application.FindFormat.Clear
'Устанавливаю в диалоговом окне Найти и заменить цвет,
'который буду искать.
Application.FindFormat.Interior.Color = 255
'Собственно поиск и подсчёт.
With Лист.Range(Cells(2, "K"), Cells(Низ, "K"))
    'After - это ячейка, после которой нужно вести поиск.
    'Поиск нужно вести с конца, т.к. поиск начинается после
    'первой ячейки заданного диапазона для поиска.
    Set Найдено = .Find(what:="", After:=Лист.Cells(Низ, "K"), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByColumns, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
    If Not Найдено Is Nothing Then
        Адрес = Найдено.Address
        Do
            Подсчёт = Подсчёт + Найдено.Value
            If Подсчёт = 1256 Or Подсчёт > 1256 Then
                Лист.Cells(2, "Q").Value = Лист.Cells(2, "Q").Value + 1
                Подсчёт = 0
            End If
            'Для цикла поиска в справке написано, что надо
            'использовать FindNext, но он не работает с форматированием,
            'поэтому буду использовать Find.
            'After - после найденной ячейки.
            Set Найдено = .Find(what:="", After:=Найдено, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByColumns, _
                SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
        Loop While Найдено.Address <> Адрес
        'Определение пригодности для 25-ки.
        If Подсчёт <= 491 And Лист.Cells(2, "Q").Value <> 0 Then
            Лист.Cells(2, "Q").Value = Лист.Cells(2, "Q").Value - 1
            Лист.Cells(3, "Q").Value = 1
        ElseIf Подсчёт <= 491 And Лист.Cells(2, "Q").Value = 0 Then
            Лист.Cells(3, "Q").Value = 1
        End If
    End If
End With
'Очищаем диалоговое окно Найти и заменить от цвета.
Application.FindFormat.Clear
'Просто сообщение, что всё готово.
MsgBox "Работа сделана", vbInformation
End Sub


Определение цвета:
  1. в VBA: View - Immediate Window. Откроется диалоговое окно Immediate;
  2. сделайте активной ячейку, имеющую заливку;
  3. вставьте в диалоговое окно Immediate вот этот код:
    Visual Basic
    1
    
    print activecell.Interior.Color
  4. поставьте в конце вставленной строки курсор;
  5. нажмите на клавиатуре клавишу Enter.
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.08.2011, 21:16
Не совсем понятно ТЗ
Во первых выделение цветом ИМХО не совсем удачный вариант - хлопотно это.
Во вторых не понятно: кабель какого -то сечения может быть только один? Не может их быть 8, например?
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
26.08.2011, 21:25
Alex77755,
он не просит, чтобы ему писали алгоритм, - он сам его разработал.

ТЗ сделано чётко и понятно.


antiponf,
для работы моего кода не должно быть объединённых ячеек на листе с данными, иначе Find может неправильно работать.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.08.2011, 21:51
кабель какого -то сечения может быть только один?
0
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 20
27.08.2011, 10:15  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
кабель какого -то сечения может быть только один?
нет.. напротив очень много кабелей похожего сечения..
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
28.08.2011, 18:44
есть перечень проводов с известным сечением
что бы по выделению цветом нескольких проводов
Как можно выделить
очень много кабелей похожего сечения..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2011, 18:44
Помогаю со студенческими работами здесь

Помогите с макросом для обработки файлов txt
Здравствуйте! Проблема такая: в папке на диске С лежат текстовые файлы, меняются раз в сутки. Есть файл Ексель. необходимо чтобы...

Помогите с макросом для создания диаграммы в Excel
Уважаемые форумчане, всем доброе утро! Прошу помочь в решении следующей задачи в Excel: нужно при помощи макроса создать диаграмму с...

Работа с макросом
процедура оформления такая.. запускается макрос - вводишь суммы для перечисления сотрудникам, отправляемым в командировки - указываешь...

Помощь с макросом
Здравствуйте, не могу написать программу, которая бы изменяла значение нижестоящих ячеек на разницу между старым значением и новым...

помощь с макросом
Если в Е13 число 5, то копируем строку 15 пять раз. Копии разместить с 16-ой по 20-ую строку. Точнее говоря нужно добавить 5 копий строк с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru