Доброго времени, уважаемые форумчане! С данной темой обращался на дружественном форуме Планета Excel. Прошу вас оказать помощь в корректировке массивных формул в листах "Раскладка" и "Цвета" чтобы при выводе результатов в данных листах игнорировались пустые строки из листа "Данные". Проблема в том, что в последующем при построении сводных таблиц и отборе уникальных значений из листов "Раскладка" и "Цвета" очень мешают "нули" и "пустые" значения(((
Доброго времени, уважаемые форумчане! С данной темой обращался на дружественном форуме Планета Excel. Прошу вас оказать помощь в корректировке массивных формул в листах "Раскладка" и "Цвета" чтобы при выводе результатов в данных листах игнорировались пустые строки из листа "Данные". Проблема в том, что в последующем при построении сводных таблиц и отборе уникальных значений из листов "Раскладка" и "Цвета" очень мешают "нули" и "пустые" значения(((IvanBezdomny
Здравствуйте, Nic70y! Решение крутое, не думал, что это возможно без массивных! Однако, есть вопрос. Наверное недостаточно полный пример с разными вариантами. 1. Бывает так, что в списке строка может быть "особняком", то есть пусто и сверху и снизу, тогда результаты неверны (Пример 1 прилагаю). 2. Бывает так, что в столбце материал встречаются одинаковые значения, тогда результаты неверны (Пример 2 прилагаю).
Здравствуйте, Nic70y! Решение крутое, не думал, что это возможно без массивных! Однако, есть вопрос. Наверное недостаточно полный пример с разными вариантами. 1. Бывает так, что в списке строка может быть "особняком", то есть пусто и сверху и снизу, тогда результаты неверны (Пример 1 прилагаю). 2. Бывает так, что в столбце материал встречаются одинаковые значения, тогда результаты неверны (Пример 2 прилагаю).IvanBezdomny
В первом примере я просто добавил пустую строку в "Данные". Из-за этого формула сломалась? Во втором случае данные повторяться только в столбце А. То есть их просто обрабатывать (дублировать) с учетом данных в столбце В (в обычном порядке).
В первом примере я просто добавил пустую строку в "Данные". Из-за этого формула сломалась? Во втором случае данные повторяться только в столбце А. То есть их просто обрабатывать (дублировать) с учетом данных в столбце В (в обычном порядке).IvanBezdomny
да там была ссылка на нижнюю строку листа, это я не задумываясь сделал, это можно исправить. с повторами нужно менять подход, посмотрю позже - сейчас надо работать.
да там была ссылка на нижнюю строку листа, это я не задумываясь сделал, это можно исправить. с повторами нужно менять подход, посмотрю позже - сейчас надо работать.Nic70y
Sub u_701() 'лист Раскладка Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row If a > 1 Then Range("a2:f" & a).Clear b = Sheets("Данные").Cells(Rows.Count, "a").End(xlUp).Row If b > 1 Then For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then e = Sheets("Данные").Range("b" & c).Value ' & " " g = Len(e) - Len(Replace(e, " ", "")) + 1 For h = 1 To g i = InStr(e & " ", " ") j = Left(e, i - 1) ' k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = d Range("b" & k) = j Range("c" & k & ":f" & k) = Sheets("Данные").Range("c" & c & ":f" & c).Value e = Mid(e, i + 1, Len(e)) Next End If Next Range("c2:c" & k).NumberFormat = "m/d/yyyy" End If Application.ScreenUpdating = True End Sub Sub u_702() 'лист Цвета Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row If a > 1 Then Range("a2:e" & a).Clear b = Sheets("Данные").Cells(Rows.Count, "a").End(xlUp).Row If b > 1 Then For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = Sheets("Данные").Range("a" & c).Value Range("b" & k & ":c" & k) = Sheets("Данные").Range("c" & c & ":d" & c).Value Range("d" & k) = Sheets("Данные").Range("e" & c).Value Range("e" & k) = Sheets("Данные").Range("e1").Value End If Next For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = Sheets("Данные").Range("a" & c).Value Range("b" & k & ":c" & k) = Sheets("Данные").Range("c" & c & ":d" & c).Value Range("d" & k) = Sheets("Данные").Range("f" & c).Value Range("e" & k) = Sheets("Данные").Range("f1").Value End If Next Range("b2:b" & k).NumberFormat = "m/d/yyyy" End If Application.ScreenUpdating = True End Sub
[/vba]
1 вариант - доп.столбцы 2 - макросы [vba]
Код
Sub u_701() 'лист Раскладка Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row If a > 1 Then Range("a2:f" & a).Clear b = Sheets("Данные").Cells(Rows.Count, "a").End(xlUp).Row If b > 1 Then For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then e = Sheets("Данные").Range("b" & c).Value ' & " " g = Len(e) - Len(Replace(e, " ", "")) + 1 For h = 1 To g i = InStr(e & " ", " ") j = Left(e, i - 1) ' k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = d Range("b" & k) = j Range("c" & k & ":f" & k) = Sheets("Данные").Range("c" & c & ":f" & c).Value e = Mid(e, i + 1, Len(e)) Next End If Next Range("c2:c" & k).NumberFormat = "m/d/yyyy" End If Application.ScreenUpdating = True End Sub Sub u_702() 'лист Цвета Application.ScreenUpdating = False a = Cells(Rows.Count, "a").End(xlUp).Row If a > 1 Then Range("a2:e" & a).Clear b = Sheets("Данные").Cells(Rows.Count, "a").End(xlUp).Row If b > 1 Then For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = Sheets("Данные").Range("a" & c).Value Range("b" & k & ":c" & k) = Sheets("Данные").Range("c" & c & ":d" & c).Value Range("d" & k) = Sheets("Данные").Range("e" & c).Value Range("e" & k) = Sheets("Данные").Range("e1").Value End If Next For c = 2 To b d = Sheets("Данные").Range("a" & c).Value If d <> "" Then k = Cells(Rows.Count, "a").End(xlUp).Row + 1 Range("a" & k) = Sheets("Данные").Range("a" & c).Value Range("b" & k & ":c" & k) = Sheets("Данные").Range("c" & c & ":d" & c).Value Range("d" & k) = Sheets("Данные").Range("f" & c).Value Range("e" & k) = Sheets("Данные").Range("f1").Value End If Next Range("b2:b" & k).NumberFormat = "m/d/yyyy" End If Application.ScreenUpdating = True End Sub
Здравствуйте, Nic70y!! Извините, что сразу не отреагировал на предложенные Вами решения, не был на месте!! Мне более всего подошел вариант с доп. столбцами!!! Спасибо Вам огромное!!!
Здравствуйте, Nic70y!! Извините, что сразу не отреагировал на предложенные Вами решения, не был на месте!! Мне более всего подошел вариант с доп. столбцами!!! Спасибо Вам огромное!!!IvanBezdomny