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

Вход

Регистрация

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

 

= Мир MS Excel/Как изменить разбиение слоев по толщинам? - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как изменить разбиение слоев по толщинам? (Макросы/Sub)
Как изменить разбиение слоев по толщинам?
Юрий_Нд Дата: Пятница, 07.09.2018, 12:59 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброго дня Всем.

Есть следующая задача.
Некоторый плоский материал состоит из множества слоев.
В табличном виде задается порядковый номер очередного слоя и его толщина.
Пример этого в таблице 1.
Задача:
В случае, если толщина очередного слоя превышает dt, необходимо разбить слой на толщины с шагом dt. Ну и конечно же должна быть обозначена конечная толщина очередного слоя.
Пример такого, изменённого разбиения показан в таблице 2, для dt=0,02.
Как это делать в ВБА с помощью цикла в цикле и понячейно я знаю.
Но хотелось бы всё это сделать на более профессиональном уровне. С помощью Range, если не ошибаюсь.

Спасибо ___________ Юрий.
К сообщению приложен файл: 2-.xlsm (42.5 Kb)
 
Ответить
СообщениеДоброго дня Всем.

Есть следующая задача.
Некоторый плоский материал состоит из множества слоев.
В табличном виде задается порядковый номер очередного слоя и его толщина.
Пример этого в таблице 1.
Задача:
В случае, если толщина очередного слоя превышает dt, необходимо разбить слой на толщины с шагом dt. Ну и конечно же должна быть обозначена конечная толщина очередного слоя.
Пример такого, изменённого разбиения показан в таблице 2, для dt=0,02.
Как это делать в ВБА с помощью цикла в цикле и понячейно я знаю.
Но хотелось бы всё это сделать на более профессиональном уровне. С помощью Range, если не ошибаюсь.

Спасибо ___________ Юрий.

Автор - Юрий_Нд
Дата добавления - 07.09.2018 в 12:59
StoTisteg Дата: Пятница, 07.09.2018, 13:41 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Ну и зачем для этого создавать новую тему? Отчего не попросить в старой?


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеНу и зачем для этого создавать новую тему? Отчего не попросить в старой?

Автор - StoTisteg
Дата добавления - 07.09.2018 в 13:41
Юрий_Нд Дата: Пятница, 07.09.2018, 13:59 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Я инженер, а следовательно должен соблюдать нормы, стандарты, правила и инструкции..
В данном случае Правила Форума.
Но я ничего не имею против, чтобы данная тема была удалена из этого раздела и чтобы мы продолжили разговор в Старой теме.
Главное, чтобы модератор Борода "дал добро".
 
Ответить
СообщениеЯ инженер, а следовательно должен соблюдать нормы, стандарты, правила и инструкции..
В данном случае Правила Форума.
Но я ничего не имею против, чтобы данная тема была удалена из этого раздела и чтобы мы продолжили разговор в Старой теме.
Главное, чтобы модератор Борода "дал добро".

Автор - Юрий_Нд
Дата добавления - 07.09.2018 в 13:59
_Boroda_ Дата: Пятница, 07.09.2018, 14:05 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Цитата Юрий_Нд, 07.09.2018 в 13:59, в сообщении № 3 ()
Главное, чтобы модератор Борода "дал добро".
А других модераторов и администраторов Вы слушать не станете? :D

Формально Вы правы, это разные темы - в одной формулы, в другой VBA. Но было бы очень неплохо дать ссылочку на прошлую тему. И показать Ваш код. И пояснить словами что-откуда-куда-почему. Я, например, посмотрел файл из первого поста и ничего не понял, а искать Вашу предыдущую тему лень (это еще с учетом того, что я вообще про нее знаю)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Цитата Юрий_Нд, 07.09.2018 в 13:59, в сообщении № 3 ()
Главное, чтобы модератор Борода "дал добро".
А других модераторов и администраторов Вы слушать не станете? :D

Формально Вы правы, это разные темы - в одной формулы, в другой VBA. Но было бы очень неплохо дать ссылочку на прошлую тему. И показать Ваш код. И пояснить словами что-откуда-куда-почему. Я, например, посмотрел файл из первого поста и ничего не понял, а искать Вашу предыдущую тему лень (это еще с учетом того, что я вообще про нее знаю)

Автор - _Boroda_
Дата добавления - 07.09.2018 в 14:05
Юрий_Нд Дата: Пятница, 07.09.2018, 14:32 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
А других модераторов и администраторов Вы слушать не станете?

Ну почему же, я инженер, а следовательно, как в армии должен подчиняться начальству. Иначе работы не будет и проект не выйдет.
а искать Вашу предыдущую тему лень

Аналогичная или тождественная тема находится в разделе простого Excel.
Однако я в эту тему перетащил ещё и исходный файл, который, как мне кажется, более прост для понимания моего вопроса.
Дополнительно словами поясняю, что слой номер 2 имеет толщину больше чем 0.2, то есть его толщина 0.51. Следовательно этот слой делится на толщины кратные 0.2. То есть, сначала толщина 0.2, затем толщина ещё раз 0.2, и наконец остаток толщины 0.11.
В итоге получаем что толщина слоя 0.51 разбивается на три слоя 0.2 + 0.2 + 0.11.
Да вот еще.
В теме, на которую дана ссылка увидел неточность. В исходном файле разбиение 2 слоя идёт как 0.2, 0.4 и 0.51. Это неверно. Должно быть всё как описано выше и как в приложенном здесь файле Excel. Ну и конечно же к разбитым слоям должны быть "паровозиком" прикреплены все сопутствующие данные из исходной таблицы.
К сообщению приложен файл: 1471469.xlsx (9.3 Kb)


Сообщение отредактировал Юрий_Нд - Пятница, 07.09.2018, 14:53
 
Ответить
Сообщение
А других модераторов и администраторов Вы слушать не станете?

Ну почему же, я инженер, а следовательно, как в армии должен подчиняться начальству. Иначе работы не будет и проект не выйдет.
а искать Вашу предыдущую тему лень

Аналогичная или тождественная тема находится в разделе простого Excel.
Однако я в эту тему перетащил ещё и исходный файл, который, как мне кажется, более прост для понимания моего вопроса.
Дополнительно словами поясняю, что слой номер 2 имеет толщину больше чем 0.2, то есть его толщина 0.51. Следовательно этот слой делится на толщины кратные 0.2. То есть, сначала толщина 0.2, затем толщина ещё раз 0.2, и наконец остаток толщины 0.11.
В итоге получаем что толщина слоя 0.51 разбивается на три слоя 0.2 + 0.2 + 0.11.
Да вот еще.
В теме, на которую дана ссылка увидел неточность. В исходном файле разбиение 2 слоя идёт как 0.2, 0.4 и 0.51. Это неверно. Должно быть всё как описано выше и как в приложенном здесь файле Excel. Ну и конечно же к разбитым слоям должны быть "паровозиком" прикреплены все сопутствующие данные из исходной таблицы.

Автор - Юрий_Нд
Дата добавления - 07.09.2018 в 14:32
Kuzmich Дата: Суббота, 08.09.2018, 11:25 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Sub Tablica()
Dim i As Long
Dim n As Integer
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
  For i = iLastRow To 6 Step -1
    If Cells(i, "E") > 0.2 Then
      n = Int(Cells(i, "E") / 0.2)
      Rows(i + 1).Resize(n).Insert
      Cells(i + n, "E") = Cells(i, "E") - 0.2 * (Int(Cells(i, "E") / 0.2))
      Cells(i, "E").Resize(n) = 0.2
      Cells(i + 1, "D").Resize(n) = Cells(i, "D")
      Cells(i + 1, "F").Resize(n) = Cells(i, "F")
    End If
  Next
    Range("C6").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=Cells(Rows.Count, "C").End(xlUp).Row - 5, Trend:=False
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub Tablica()
Dim i As Long
Dim n As Integer
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
  For i = iLastRow To 6 Step -1
    If Cells(i, "E") > 0.2 Then
      n = Int(Cells(i, "E") / 0.2)
      Rows(i + 1).Resize(n).Insert
      Cells(i + n, "E") = Cells(i, "E") - 0.2 * (Int(Cells(i, "E") / 0.2))
      Cells(i, "E").Resize(n) = 0.2
      Cells(i + 1, "D").Resize(n) = Cells(i, "D")
      Cells(i + 1, "F").Resize(n) = Cells(i, "F")
    End If
  Next
    Range("C6").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=Cells(Rows.Count, "C").End(xlUp).Row - 5, Trend:=False
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 08.09.2018 в 11:25
Юрий_Нд Дата: Суббота, 08.09.2018, 12:51 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброго дня Всем.
Кузьмич, Ваш код отлично работает.
Если возможно, подскажите, как можно вставлять дополнительно не целую строчку, а группу ячеек, ограниченную размерами таблицы. Потому что Ваш код "режет весь лист", а там много другой информации, которую необходимо поправлять после запуска Вашей процедуры.
С благодарностью __________ Юрий.


Сообщение отредактировал Юрий_Нд - Суббота, 08.09.2018, 12:51
 
Ответить
СообщениеДоброго дня Всем.
Кузьмич, Ваш код отлично работает.
Если возможно, подскажите, как можно вставлять дополнительно не целую строчку, а группу ячеек, ограниченную размерами таблицы. Потому что Ваш код "режет весь лист", а там много другой информации, которую необходимо поправлять после запуска Вашей процедуры.
С благодарностью __________ Юрий.

Автор - Юрий_Нд
Дата добавления - 08.09.2018 в 12:51
Kuzmich Дата: Суббота, 08.09.2018, 14:47 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
как можно вставлять дополнительно не целую строчку, а группу ячеек

Измените строку
[vba]
Код
     'Rows(i + 1).Resize(n).Insert
      Range("C" & i + 1 & ":F" & i + 1).Resize(n).Insert
[/vba]
 
Ответить
Сообщение
Цитата
как можно вставлять дополнительно не целую строчку, а группу ячеек

Измените строку
[vba]
Код
     'Rows(i + 1).Resize(n).Insert
      Range("C" & i + 1 & ":F" & i + 1).Resize(n).Insert
[/vba]

Автор - Kuzmich
Дата добавления - 08.09.2018 в 14:47
Юрий_Нд Дата: Суббота, 08.09.2018, 15:55 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Спасибо Кузьмич.
С частью строки вроде бы разобрались всё работает нормально, однако появились "лишние дополнительные сопли". Будет время, посмотрите.
Ещё если возможно пару пожеланий:
- как сделать так, чтобы процедура брала исходную таблицу на четко заданном листе, а изменённую таблицу прорисовала бы в любом заданном месте на другом, но заданном листе?
- как сделать "полный реверс" слоев в таблице? То есть, чтобы первый слой оказался последним, и так далее по порядку.
С благодарностью ___________ Юрий.
 
Ответить
СообщениеСпасибо Кузьмич.
С частью строки вроде бы разобрались всё работает нормально, однако появились "лишние дополнительные сопли". Будет время, посмотрите.
Ещё если возможно пару пожеланий:
- как сделать так, чтобы процедура брала исходную таблицу на четко заданном листе, а изменённую таблицу прорисовала бы в любом заданном месте на другом, но заданном листе?
- как сделать "полный реверс" слоев в таблице? То есть, чтобы первый слой оказался последним, и так далее по порядку.
С благодарностью ___________ Юрий.

Автор - Юрий_Нд
Дата добавления - 08.09.2018 в 15:55
Kuzmich Дата: Суббота, 08.09.2018, 17:41 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
Ещё если возможно пару пожеланий:

Создайте в книге еще один лист и назовите его Результат
При активном Листе1 запустите макрос (можно сделать кнопку и к ней привязать макрос)
[vba]
Код
Sub Tablica()
Dim i As Long
Dim n As Integer
Dim iLastRow As Long
With Worksheets("Результат")
  iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
  .Cells.Clear
  Range("C5:F" & iLastRow).Copy .Range("A1")
    iLastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
  For i = iLastRow To 2 Step -1
    If .Cells(i, "C") > 0.2 Then
      n = Int(.Cells(i, "C") / 0.2)
      .Range("A" & i + 1 & ":D" & i + 1).Resize(n).Insert
      .Cells(i + n, "C") = .Cells(i, "C") - 0.2 * (Int(.Cells(i, "C") / 0.2))
      .Cells(i, "C").Resize(n) = 0.2
      .Cells(i + 1, "B").Resize(n) = .Cells(i, "B")
      .Cells(i + 1, "D").Resize(n) = .Cells(i, "D")
    End If
  Next
    .Range("A2").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=.Cells(.Rows.Count, "A").End(xlUp).Row - 1, Trend:=False
    iLastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
    .Range("B1:D" & iLastRow).Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlYes
End With
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
Ещё если возможно пару пожеланий:

Создайте в книге еще один лист и назовите его Результат
При активном Листе1 запустите макрос (можно сделать кнопку и к ней привязать макрос)
[vba]
Код
Sub Tablica()
Dim i As Long
Dim n As Integer
Dim iLastRow As Long
With Worksheets("Результат")
  iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
  .Cells.Clear
  Range("C5:F" & iLastRow).Copy .Range("A1")
    iLastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
  For i = iLastRow To 2 Step -1
    If .Cells(i, "C") > 0.2 Then
      n = Int(.Cells(i, "C") / 0.2)
      .Range("A" & i + 1 & ":D" & i + 1).Resize(n).Insert
      .Cells(i + n, "C") = .Cells(i, "C") - 0.2 * (Int(.Cells(i, "C") / 0.2))
      .Cells(i, "C").Resize(n) = 0.2
      .Cells(i + 1, "B").Resize(n) = .Cells(i, "B")
      .Cells(i + 1, "D").Resize(n) = .Cells(i, "D")
    End If
  Next
    .Range("A2").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=.Cells(.Rows.Count, "A").End(xlUp).Row - 1, Trend:=False
    iLastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
    .Range("B1:D" & iLastRow).Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlYes
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 08.09.2018 в 17:41
Юрий_Нд Дата: Воскресенье, 09.09.2018, 00:36 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброй ночи Кузьмич.
При активном Листе1 запустите макрос

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

Как всегда, с благодарностью _____________ Юрий.


Сообщение отредактировал Юрий_Нд - Воскресенье, 09.09.2018, 00:46
 
Ответить
СообщениеДоброй ночи Кузьмич.
При активном Листе1 запустите макрос

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

Как всегда, с благодарностью _____________ Юрий.

Автор - Юрий_Нд
Дата добавления - 09.09.2018 в 00:36
Kuzmich Дата: Воскресенье, 09.09.2018, 10:38 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
в коде мне обязательно нужно четкое указание на лист, где расположена исходная таблица.

Если у вас на листе с таблицей будет кнопка, запускающая макрос, то этот лист и будет активным при запуске
 
Ответить
Сообщение
Цитата
в коде мне обязательно нужно четкое указание на лист, где расположена исходная таблица.

Если у вас на листе с таблицей будет кнопка, запускающая макрос, то этот лист и будет активным при запуске

Автор - Kuzmich
Дата добавления - 09.09.2018 в 10:38
Юрий_Нд Дата: Воскресенье, 09.09.2018, 12:29 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Если у вас на листе с таблицей будет кнопка, запускающая макрос

Я прекрасно понял Ваше предложение по 10-му и 12-му сообщению, однако, конечную цель я понимаю несколько иначе.
Во-первых, на листе "таблицы" будет размещено множество таблиц, подобных тем которые Вы видели, размещенных в шахматном порядке.
На листе "результат" будут выводиться и видоизменяться только часть исходных таблиц, по-моему усмотрению.
Сигналом или командой на запуск определенной таблицы будет ячейка на листе "результат", которая даёт ссылку или как-то идентифицирует исходную таблицу на листе "таблицы". Например левый верхний угол исходной таблицы.
А рядом с этой ячейкой или по-вашему кнопкой запускающей макрос, будет находиться ячейка с пользовательской функцией, которую в настоящий момент Вы помогаете мне разработать и которая сейчас называется процедурой.
А уже начиная со следующей ячейки будет располагаться уже видоизмененная исходная таблица.
В общем как-то так.
Сейчас попробую подготовить макет 2-х листов Excel.
 
Ответить
Сообщение
Если у вас на листе с таблицей будет кнопка, запускающая макрос

Я прекрасно понял Ваше предложение по 10-му и 12-му сообщению, однако, конечную цель я понимаю несколько иначе.
Во-первых, на листе "таблицы" будет размещено множество таблиц, подобных тем которые Вы видели, размещенных в шахматном порядке.
На листе "результат" будут выводиться и видоизменяться только часть исходных таблиц, по-моему усмотрению.
Сигналом или командой на запуск определенной таблицы будет ячейка на листе "результат", которая даёт ссылку или как-то идентифицирует исходную таблицу на листе "таблицы". Например левый верхний угол исходной таблицы.
А рядом с этой ячейкой или по-вашему кнопкой запускающей макрос, будет находиться ячейка с пользовательской функцией, которую в настоящий момент Вы помогаете мне разработать и которая сейчас называется процедурой.
А уже начиная со следующей ячейки будет располагаться уже видоизмененная исходная таблица.
В общем как-то так.
Сейчас попробую подготовить макет 2-х листов Excel.

Автор - Юрий_Нд
Дата добавления - 09.09.2018 в 12:29
Юрий_Нд Дата: Воскресенье, 09.09.2018, 14:09 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Ну вот, где-то так...
К сообщению приложен файл: -4.xlsm (16.6 Kb)
 
Ответить
СообщениеНу вот, где-то так...

Автор - Юрий_Нд
Дата добавления - 09.09.2018 в 14:09
Kuzmich Дата: Воскресенье, 09.09.2018, 16:20 | Сообщение № 15
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Что-то как-то сложно это.
Предлагаю другой вариант. На листе Таблицы в ячейке О1 сделать выпадающий список,
при выборе нужной таблицы она переносится на лист Результат и видоизменяется.
Макрос срабатывает при изменении содержимого ячейки О1
К сообщению приложен файл: ______10-39246-.xls (55.0 Kb)
 
Ответить
СообщениеЧто-то как-то сложно это.
Предлагаю другой вариант. На листе Таблицы в ячейке О1 сделать выпадающий список,
при выборе нужной таблицы она переносится на лист Результат и видоизменяется.
Макрос срабатывает при изменении содержимого ячейки О1

Автор - Kuzmich
Дата добавления - 09.09.2018 в 16:20
Юрий_Нд Дата: Воскресенье, 09.09.2018, 18:20 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Что-то как-то сложно это.
Предлагаю другой вариант. На листе Таблицы в ячейке О1 сделать выпадающий список,

"Так-то оно так..."
Однако, если бы я делал какой-то онлайн калькулятор, когда нужно было бы посчитать сегодня одно значение, завтра другое. А ещё через неделю третье или четвёртое значение, тогда бы Ваш способ выигрывал по всем позициям.
Однако я делаю инженерный расчёт, и вычисления по этим таблицам является только маленькой составной частью большого и сложного проекта.
В конце этого проекта должен быть анализ принятых технических решений. И на этом этапе я должен посмотреть увидеть и сравнить различные варианты выполнения конструкции.
Так вот на этом этапе я должен увидеть не только и даже не столько эти таблицы а графики, которые выполняются на основе этих таблиц. И сравнить и проанализировать их. И на этом этапе я не могу и не хочу щёлкать по меню, какое бы хорошее оно не было. Я должен увидеть сразу все варианты, чтобы сравнить их.
И в итоге я должен выбрать оптимальный вариант конструктивного решения инженерной задачи.
Вот как-то так.

В любом случае,
я Вам очень благодарен _______________ Юрий.


Сообщение отредактировал Юрий_Нд - Воскресенье, 09.09.2018, 18:24
 
Ответить
Сообщение
Что-то как-то сложно это.
Предлагаю другой вариант. На листе Таблицы в ячейке О1 сделать выпадающий список,

"Так-то оно так..."
Однако, если бы я делал какой-то онлайн калькулятор, когда нужно было бы посчитать сегодня одно значение, завтра другое. А ещё через неделю третье или четвёртое значение, тогда бы Ваш способ выигрывал по всем позициям.
Однако я делаю инженерный расчёт, и вычисления по этим таблицам является только маленькой составной частью большого и сложного проекта.
В конце этого проекта должен быть анализ принятых технических решений. И на этом этапе я должен посмотреть увидеть и сравнить различные варианты выполнения конструкции.
Так вот на этом этапе я должен увидеть не только и даже не столько эти таблицы а графики, которые выполняются на основе этих таблиц. И сравнить и проанализировать их. И на этом этапе я не могу и не хочу щёлкать по меню, какое бы хорошее оно не было. Я должен увидеть сразу все варианты, чтобы сравнить их.
И в итоге я должен выбрать оптимальный вариант конструктивного решения инженерной задачи.
Вот как-то так.

В любом случае,
я Вам очень благодарен _______________ Юрий.

Автор - Юрий_Нд
Дата добавления - 09.09.2018 в 18:20
Kuzmich Дата: Воскресенье, 09.09.2018, 18:38 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
Я должен увидеть сразу все варианты, чтобы сравнить их.

Сколько реально таблиц сравниваете?
Можно сделать цикл по всем таблицам и вывести видоизмененный вариант на лист Результат.
Покажите пример графиков, которые выполняются на основе этих таблиц.
 
Ответить
Сообщение
Цитата
Я должен увидеть сразу все варианты, чтобы сравнить их.

Сколько реально таблиц сравниваете?
Можно сделать цикл по всем таблицам и вывести видоизмененный вариант на лист Результат.
Покажите пример графиков, которые выполняются на основе этих таблиц.

Автор - Kuzmich
Дата добавления - 09.09.2018 в 18:38
Юрий_Нд Дата: Воскресенье, 09.09.2018, 19:24 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
1.Сколько реально таблиц сравниваете?
- только что посчитал общее количество исходных. Получилось ровно 20.
Думаю, что на выхлопе будет порядка 10.

2. Можно сделать цикл по всем таблицам и вывести видоизмененный вариант на лист Результат.
- как я неоднократно повторил в предыдущем посте: "...Я должен увидеть сразу все варианты, чтобы сравнить их...."

3. Покажите пример графиков, которые выполняются на основе этих таблиц.
- смотреть Screen-картинку. Но пока это очень "сырой" вариант.
К сообщению приложен файл: 3628896.png (12.5 Kb)
 
Ответить
Сообщение1.Сколько реально таблиц сравниваете?
- только что посчитал общее количество исходных. Получилось ровно 20.
Думаю, что на выхлопе будет порядка 10.

2. Можно сделать цикл по всем таблицам и вывести видоизмененный вариант на лист Результат.
- как я неоднократно повторил в предыдущем посте: "...Я должен увидеть сразу все варианты, чтобы сравнить их...."

3. Покажите пример графиков, которые выполняются на основе этих таблиц.
- смотреть Screen-картинку. Но пока это очень "сырой" вариант.

Автор - Юрий_Нд
Дата добавления - 09.09.2018 в 19:24
Kuzmich Дата: Воскресенье, 09.09.2018, 20:40 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
Я должен увидеть сразу все варианты, чтобы сравнить их....

На листе Таблицы в столбце R (R1,R2,R3 и R4) создайте список ваших таблиц (Табл.1,Табл.2 и т.д.)
Находясь на листе Таблицы запустите макрос
[vba]
Код
Sub iTable()
Dim i As Long
Dim n As Integer
Dim j As Integer
Dim iLastRow As Long
Dim FoundTable As Range
With Worksheets("Результат")
   .Cells.Clear                    'очищаем лист Результат
  For j = 1 To Cells(Rows.Count, "R").End(xlUp).Row
    Set FoundTable = Columns("A:N").Find(Cells(j, "R"), , xlValues, xlWhole)
      iLastRow = FoundTable.End(xlDown).Row
    Range(Cells(FoundTable.Row, FoundTable.Column), _
          Cells(iLastRow, FoundTable.Column + 3)).Copy .Cells(1, 5 * (j - 1) + 2)
      iLastRow = .Cells(.Rows.Count, 5 * (j - 1) + 4).End(xlUp).Row
   For i = iLastRow To 3 Step -1
     If .Cells(i, 5 * (j - 1) + 4) > 0.2 Then
      n = Int(.Cells(i, 5 * (j - 1) + 4) / 0.2)
      .Range(.Cells(i + 1, 5 * (j - 1) + 2), .Cells(i + 1, 5 * (j - 1) + 5)).Resize(n).Insert
      .Cells(i + n, 5 * (j - 1) + 4) = .Cells(i, 5 * (j - 1) + 4) - 0.2 * (Int(.Cells(i, 5 * (j - 1) + 4) / 0.2))
      .Cells(i, 5 * (j - 1) + 4).Resize(n) = 0.2
      .Cells(i + 1, 5 * (j - 1) + 3).Resize(n) = .Cells(i, 5 * (j - 1) + 3)
      .Cells(i + 1, 5 * (j - 1) + 5).Resize(n) = .Cells(i, 5 * (j - 1) + 5)
     End If
   Next
    .Cells(3, 5 * (j - 1) + 2).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
    Step:=1, Stop:=.Cells(.Rows.Count, 5 * (j - 1) + 2).End(xlUp).Row - 2, Trend:=False
    iLastRow = .Cells(.Rows.Count, 5 * (j - 1) + 4).End(xlUp).Row
    .Range(.Cells(2, 5 * (j - 1) + 3), .Cells(iLastRow, 5 * (j - 1) + 5)).Sort Key1:=.Cells(2, 5 * (j - 1) + 3), _
                   Order1:=xlDescending, Header:=xlYes
  Next
    .Activate
End With
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
Я должен увидеть сразу все варианты, чтобы сравнить их....

На листе Таблицы в столбце R (R1,R2,R3 и R4) создайте список ваших таблиц (Табл.1,Табл.2 и т.д.)
Находясь на листе Таблицы запустите макрос
[vba]
Код
Sub iTable()
Dim i As Long
Dim n As Integer
Dim j As Integer
Dim iLastRow As Long
Dim FoundTable As Range
With Worksheets("Результат")
   .Cells.Clear                    'очищаем лист Результат
  For j = 1 To Cells(Rows.Count, "R").End(xlUp).Row
    Set FoundTable = Columns("A:N").Find(Cells(j, "R"), , xlValues, xlWhole)
      iLastRow = FoundTable.End(xlDown).Row
    Range(Cells(FoundTable.Row, FoundTable.Column), _
          Cells(iLastRow, FoundTable.Column + 3)).Copy .Cells(1, 5 * (j - 1) + 2)
      iLastRow = .Cells(.Rows.Count, 5 * (j - 1) + 4).End(xlUp).Row
   For i = iLastRow To 3 Step -1
     If .Cells(i, 5 * (j - 1) + 4) > 0.2 Then
      n = Int(.Cells(i, 5 * (j - 1) + 4) / 0.2)
      .Range(.Cells(i + 1, 5 * (j - 1) + 2), .Cells(i + 1, 5 * (j - 1) + 5)).Resize(n).Insert
      .Cells(i + n, 5 * (j - 1) + 4) = .Cells(i, 5 * (j - 1) + 4) - 0.2 * (Int(.Cells(i, 5 * (j - 1) + 4) / 0.2))
      .Cells(i, 5 * (j - 1) + 4).Resize(n) = 0.2
      .Cells(i + 1, 5 * (j - 1) + 3).Resize(n) = .Cells(i, 5 * (j - 1) + 3)
      .Cells(i + 1, 5 * (j - 1) + 5).Resize(n) = .Cells(i, 5 * (j - 1) + 5)
     End If
   Next
    .Cells(3, 5 * (j - 1) + 2).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
    Step:=1, Stop:=.Cells(.Rows.Count, 5 * (j - 1) + 2).End(xlUp).Row - 2, Trend:=False
    iLastRow = .Cells(.Rows.Count, 5 * (j - 1) + 4).End(xlUp).Row
    .Range(.Cells(2, 5 * (j - 1) + 3), .Cells(iLastRow, 5 * (j - 1) + 5)).Sort Key1:=.Cells(2, 5 * (j - 1) + 3), _
                   Order1:=xlDescending, Header:=xlYes
  Next
    .Activate
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 09.09.2018 в 20:40
Юрий_Нд Дата: Понедельник, 10.09.2018, 00:49 | Сообщение № 20
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброй ночи Кузьмич.
Я Вам очень благодарен за всё то что Вы сделали для меня.
Есть ещё одна просьба.
Если это возможно, сделайте пожалуйста как можно больше подробных комментариев в Вашей последней версии программы.
Конечно же объявления переменных, циклы и условия пояснять не нужно. А вот то, что касается объектов, методов, свойств и классов, здесь уже пожалуйста.
Спасибо __________ Юрий.


Сообщение отредактировал Юрий_Нд - Понедельник, 10.09.2018, 01:04
 
Ответить
СообщениеДоброй ночи Кузьмич.
Я Вам очень благодарен за всё то что Вы сделали для меня.
Есть ещё одна просьба.
Если это возможно, сделайте пожалуйста как можно больше подробных комментариев в Вашей последней версии программы.
Конечно же объявления переменных, циклы и условия пояснять не нужно. А вот то, что касается объектов, методов, свойств и классов, здесь уже пожалуйста.
Спасибо __________ Юрий.

Автор - Юрий_Нд
Дата добавления - 10.09.2018 в 00:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как изменить разбиение слоев по толщинам? (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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