функция vba: возвращаемая строка с новой строкой

прежде всего, новый для VBA.

я реализую это решение как объединить все колонки в одну ячейку-в-Excel[и StackOverflow], но есть продолжение.

A1:I
A2:am
A3:a
A4:boy

мой вывод такой: Iamaboy но я бы в одной ячейке:

I
am
a
boy

функции, похоже, не возвращают строки с vbNewLine, chr(10) или chr(13)...

7 ответов


одна строка кода:

Range("B1").Formula = join(application.transpose(Range("A1:A4")),vblf)

ответ таков, как сказал тлевин

=ConcatenateRange(A1:A4,CHAR(10))

или, альтернативно, с помощью [alt-enter] вы можете написать это так

=ConcatenateRange(A1:A4,"
")
Ну, вы видите, когда вы вручную вводите что-то вроде I[alt-enter]am[alt-enter]a[alt-enter]boy в Excel или даже выполнить инструкцию, такую как [A1] = "I" & vbNewLine & "am" Excel автоматически меняет форматирование ячеек и включает перенос слов. Перенос слов требуются для linebreaks, которые будут показаны в ячейке. Однако, если вы возвращаете строку с linebreak в ней из UDF Excel, формат не обновляется.

Я могу придумать два возможных решения:

  1. вручную включить перенос слов на любой ячейке вы используете эту функцию в
  2. (не рекомендуется) хранить ссылку в Application.Caller во время вызова ConcatenateRange UDF установите Application.OnTime(now, "AddWordWrap") вызовите и напишите подпрограмму AddWordWrap, чтобы она использовала сохраненную ссылку для добавления форматирования wordwrap в ячейку (это связано с тем, что вы не можете обновить формат ячейки в UDF). Этот метод является ошибочным и проблематичным.

просто используйте разделитель CHAR (10):

=ConcatenateRange(A1:A4;CHAR(10))

использование:

=A1&"[Alt+Enter]"&A2&"[Alt+Enter]"&A3&"[Alt+Enter]"&A4

попробуйте использовать этот

Sheet1.Range("A1").Value = "sgar" & Chr(10) & "saha"

Cells(row, column) = "current line" & Chr(10) & "new line"

я вставил это, и это сработало, как только я использовал "обернуть текст".