Формирование новых таблиц для каждой строки из одной таблицы по критерию - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Задача в следующем: в Excel имеется одна таблица, в которой есть столбцы двух уровней - это различные варианты и подварианты. В первом столбце номер элемента (ID), значения каждого элемента указываются в строках таблицы. Необходимо из этой таблицы для каждого элемента сформировать новую таблицу с одной строкой - элементом и столбцами вариантами и подвариантами, в которых значения отобраны по критерию (>220 например). Пример в приложенном файле. Может эту задачу можно решить и не используя VBA, буду рад любой помощи

Решение задачи: «Формирование новых таблиц для каждой строки из одной таблицы по критерию»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Sub Copy_Table_if()
  4. Dim RSy%, REy%, RSx%, REx% 'Read
  5. Dim WSy%, WCy%, WSx%, WCx% 'Write
  6. Dim X%, Y% 'cycle
  7. Dim Request$, FirstTime As Boolean
  8. 'определение границ таблицы (привязка к начальной ячейке B2)
  9. With [B2]
  10.   RSy = .Row + 1
  11.   REy = .End(xlDown).Row 'Last Row
  12.  RSx = .Column + 1 'Column "C"
  13.  REx = .End(xlToRight).Column 'Last Column
  14. End With
  15. Request = Range("Criteria") 'Условие в именованной ячейке (Ctrl+F3)
  16. With Range("Result") 'Результат записывать, начиная с именованной ячейки "Result"
  17.  WSy = .Row + 1 'Start
  18.  WCy = WSy 'Current
  19.  WSx = .Column + 1 'Start
  20.  WCx = WSx 'Current
  21. End With
  22. For Y = RSy To REy
  23.   For X = RSx To REx
  24.     If Evaluate(Cells(Y, X).Value & Request) Then
  25.       If Not FirstTime Then 'первое значение нашли - создаем таблицу
  26.        FirstTime = True
  27.         Cells(WCy, WCx).Offset(-1, -1).Value = "ID"
  28.         Cells(WCy, WCx).Offset(0, -1).Value = Cells(Y, RSx - 1).Value
  29.       End If
  30.       Cells(WCy, WCx).Offset(-2, 0).Value = Cells(RSy, X).Offset(-2, 0).Value
  31.       Cells(WCy, WCx).Offset(-1, 0).Value = Cells(RSy, X).Offset(-1, 0).Value
  32.       Cells(WCy, WCx).Value = Cells(Y, X).Value
  33.       WCx = WCx + 1
  34.     End If
  35.   Next X
  36.   'Если были совпадения, делаем промежуток между таблицами результатов
  37.  If FirstTime Then FirstTime = False: WCx = WSx: WCy = WCy + 4
  38. Next Y
  39. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы