Function Сц(Диапазон As Range, Optional РазделительСтолцов As String = " ", Optional РазделительСтрок$ = vbLf) Dim a, a1(), lr As Long, lc As Long, sRes As String Dim lcnt As Long a = Диапазон.Value If Not IsArray(a) Then Сц = a Exit Function End If ReDim a1(1 To UBound(a)) For lr = 1 To UBound(a) a1(lr) = a(lr, 1) For lc = 2 To UBound(a, 2) a1(lr) = Trim(a1(lr) & РазделительСтолцов & a(lr, lc)) Next Next Сц = Join(a1, РазделительСтрок) End Function
[/vba]
Можно с udf: [vba]
Код
Function Сц(Диапазон As Range, Optional РазделительСтолцов As String = " ", Optional РазделительСтрок$ = vbLf) Dim a, a1(), lr As Long, lc As Long, sRes As String Dim lcnt As Long a = Диапазон.Value If Not IsArray(a) Then Сц = a Exit Function End If ReDim a1(1 To UBound(a)) For lr = 1 To UBound(a) a1(lr) = a(lr, 1) For lc = 2 To UBound(a, 2) a1(lr) = Trim(a1(lr) & РазделительСтолцов & a(lr, lc)) Next Next Сц = Join(a1, РазделительСтрок) End Function
SLAVICK, похоже, ТС ещё надо несколько подряд идущих пустых строк сокращать до одной пустой строки, т.е. этакий "trim" по переводам строк... впрочем, не буду предвосхищать
SLAVICK, похоже, ТС ещё надо несколько подряд идущих пустых строк сокращать до одной пустой строки, т.е. этакий "trim" по переводам строк... впрочем, не буду предвосхищать Gustav
Function Сц1(d As Range) For i = 1 To d.Count n_ = n_ & " " & d(i) & IIf(d(i).Row <> d(i + 1).Row, vbLf, "") Next i Сц1 = WorksheetFunction.Trim(n_) End Function
[/vba]
Еще вариант [vba]
Код
Function Сц1(d As Range) For i = 1 To d.Count n_ = n_ & " " & d(i) & IIf(d(i).Row <> d(i + 1).Row, vbLf, "") Next i Сц1 = WorksheetFunction.Trim(n_) End Function
Большое всем спасибо за помощь. Наиболее подходящие результат мне понравился _Boroda_ Только подскажите пожалуйста еще как этим правильно пользоваться, я просто мало знаком с Excel и начал только разбираться с макросами [vba]
Код
Sub () End Sub
[/vba], а с [vba]
Код
Function () End Function
[/vba] я к сожалению пока еще не умею работать. Заранее Благодарю Вас.
Большое всем спасибо за помощь. Наиболее подходящие результат мне понравился _Boroda_ Только подскажите пожалуйста еще как этим правильно пользоваться, я просто мало знаком с Excel и начал только разбираться с макросами [vba]
Код
Sub () End Sub
[/vba], а с [vba]
Код
Function () End Function
[/vba] я к сожалению пока еще не умею работать. Заранее Благодарю Вас.pirat_m
На самом деле у меня там лишние пробелы. А как пользоваться? Да просто посмотрите у нас в файлах. Только обратите внимание, что функции должны быть написаны в стандартном модуле. В интернете куча ссылок Почитайте здесь, например http://www.programm-school.ru/polzovatel_func_excel.html
На самом деле у меня там лишние пробелы. А как пользоваться? Да просто посмотрите у нас в файлах. Только обратите внимание, что функции должны быть написаны в стандартном модуле. В интернете куча ссылок Почитайте здесь, например http://www.programm-school.ru/polzovatel_func_excel.html_Boroda_
Function Сц2(d As Range) n_ = d(1) For i = 2 To d.Count n_ = n_ & IIf((d(i - 1).Row <> d(i).Row), vbLf, " ") & d(i) Next i Сц2 = Replace(WorksheetFunction.Trim(n_), vbLf & " ", "") End Function
[/vba]
Вы про вот так? [vba]
Код
Function Сц2(d As Range) n_ = d(1) For i = 2 To d.Count n_ = n_ & IIf((d(i - 1).Row <> d(i).Row), vbLf, " ") & d(i) Next i Сц2 = Replace(WorksheetFunction.Trim(n_), vbLf & " ", "") End Function
А где Вы "" увидели? - там их нет. Скобки вставляются если Вы копируете из Excel текст с разделителем строк. Можно этот разделитель заменить на другой(например " ", или "|") - тогда скобок не будет.
Код
=Сц(A1:D10;" ";"|")
Но тогда не будет переноса строки. В принципе этот символ потом в ворде(или куда Вы копируете) можно будет заменить.
А где Вы "" увидели? - там их нет. Скобки вставляются если Вы копируете из Excel текст с разделителем строк. Можно этот разделитель заменить на другой(например " ", или "|") - тогда скобок не будет.
Код
=Сц(A1:D10;" ";"|")
Но тогда не будет переноса строки. В принципе этот символ потом в ворде(или куда Вы копируете) можно будет заменить.SLAVICK