В приложенном файле есть стобик "Данные" и соответствующие им "Значения". Используем цикл, в котором сравниваются значения в столбе "Значения" с эталонными 1, 2, 3. Находим данные, соответствующие значениям 1, 2, 3. Подскажите пожалуйста, что добавить в цикл, что бы данные группировались в одну ячейку, как в столбце "Данные значений 1"?
Спасибо!
Здравствуйте!
В приложенном файле есть стобик "Данные" и соответствующие им "Значения". Используем цикл, в котором сравниваются значения в столбе "Значения" с эталонными 1, 2, 3. Находим данные, соответствующие значениям 1, 2, 3. Подскажите пожалуйста, что добавить в цикл, что бы данные группировались в одну ячейку, как в столбце "Данные значений 1"?
Function СцепитьЕсли(ByRef Диапазон As Range, _ ByVal Критерий As String, _ ByRef Диапазон_сцепления As Range, _ Optional Разделитель As String = " ") As String '--------------------------------------------------------------------------------------- ' Procedure : СцепитьЕсли ' Author : The_Prist & Alex_ST ' Topic_HEADER : "Помогите создать СЦЕПИТЬЕСЛИ() - аналог СУММЕСЛИ()" ' Topic_URL : http://www.planetaexcel.ru/forum.php?thread_id=14935 ' Post_Author : The_Prist ' Post_URL : http://www.planetaexcel.ru/docs/forum_upload/post_113923.xls ' DateTime : 02.04.2010 22:24 ' Purpose : СЦЕПИТЬЕСЛИ() - аналог СУММЕСЛИ() ' Notes : По умолчанию разделитель слов - пробел, но можно задать любой другой символ/символы. ' Диапазон - диапазон с критериями(указывается один столбец) ' Критерий - критерий. Просматривается Диапазон. ' Диапазон_сцепления - из этого диапазона берется значение для сцепления, ' если значение в аргументе Диапазон совпадает с аргументом Критерий (указывается один столбец). '--------------------------------------------------------------------------------------- Dim rCell As Range, rFndrng As Range, sStr As String Set Диапазон = Intersect(Диапазон, ActiveSheet.UsedRange) Set Диапазон_сцепления = Intersect(Диапазон_сцепления, ActiveSheet.UsedRange) For Each rCell In Диапазон If rCell.Value Like Критерий Then If Trim(Диапазон_сцепления.Cells(rCell.Row - Диапазон.Row + 1, 1)) <> "" Then _ sStr = sStr & IIf(sStr <> "", Разделитель, "") & Диапазон_сцепления.Cells(rCell.Row - Диапазон.Row + 1, 1) End If Next rCell СцепитьЕсли = sStr End Function
Function СцепитьЕсли(ByRef Диапазон As Range, _ ByVal Критерий As String, _ ByRef Диапазон_сцепления As Range, _ Optional Разделитель As String = " ") As String '--------------------------------------------------------------------------------------- ' Procedure : СцепитьЕсли ' Author : The_Prist & Alex_ST ' Topic_HEADER : "Помогите создать СЦЕПИТЬЕСЛИ() - аналог СУММЕСЛИ()" ' Topic_URL : http://www.planetaexcel.ru/forum.php?thread_id=14935 ' Post_Author : The_Prist ' Post_URL : http://www.planetaexcel.ru/docs/forum_upload/post_113923.xls ' DateTime : 02.04.2010 22:24 ' Purpose : СЦЕПИТЬЕСЛИ() - аналог СУММЕСЛИ() ' Notes : По умолчанию разделитель слов - пробел, но можно задать любой другой символ/символы. ' Диапазон - диапазон с критериями(указывается один столбец) ' Критерий - критерий. Просматривается Диапазон. ' Диапазон_сцепления - из этого диапазона берется значение для сцепления, ' если значение в аргументе Диапазон совпадает с аргументом Критерий (указывается один столбец). '--------------------------------------------------------------------------------------- Dim rCell As Range, rFndrng As Range, sStr As String Set Диапазон = Intersect(Диапазон, ActiveSheet.UsedRange) Set Диапазон_сцепления = Intersect(Диапазон_сцепления, ActiveSheet.UsedRange) For Each rCell In Диапазон If rCell.Value Like Критерий Then If Trim(Диапазон_сцепления.Cells(rCell.Row - Диапазон.Row + 1, 1)) <> "" Then _ sStr = sStr & IIf(sStr <> "", Разделитель, "") & Диапазон_сцепления.Cells(rCell.Row - Диапазон.Row + 1, 1) End If Next rCell СцепитьЕсли = sStr End Function
krosav4ig, ну хорошо, а если мне нужно в ручную задать диапазон и критерий в редакторе VBA, а потом использовать результат сцепления в дальнейшем, как это сделать?
krosav4ig, ну хорошо, а если мне нужно в ручную задать диапазон и критерий в редакторе VBA, а потом использовать результат сцепления в дальнейшем, как это сделать?Protorivatel
Sub test() Dim rng As Range, col&, criteria$, delim$, str$ Set rng = [Лист1!A2:A9]: col = 1: criteria = 1: delim = ", " str = СцепитьЕсли(rng.Offset(, col), criteria$, rng, delim) End Sub
[/vba]
[vba]
Код
Sub test() Dim rng As Range, col&, criteria$, delim$, str$ Set rng = [Лист1!A2:A9]: col = 1: criteria = 1: delim = ", " str = СцепитьЕсли(rng.Offset(, col), criteria$, rng, delim) End Sub