VBA函数:返回带有换行符的字符串

7

首先,我是VBA的新手。

我正在实施这个解决方案如何将Excel中的所有列合并为一个单元格[stackoverflow],但有一个后续问题。

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

我的输出结果是:Iamaboy,但我想要在一个单元格中显示:

I
am
a
boy

函数似乎不返回带有vbNewLinechr(10)chr(13)的字符串...


5
在Excel中,您需要手动设置单元格的“自动换行”功能。 - Kazimierz Jawor
http://www.ozgrid.com/forum/showthread.php?t=16059 - sancho.s ReinstateMonicaCellio
7个回答

3

一行代码:

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

2
答案就像tlewin所说的那样。
=ConcatenateRange(A1:A4,CHAR(10))

或者,你也可以使用 [alt-enter] 来像这样编写它。
=ConcatenateRange(A1:A4,"
")

“等等,”你说,“我试过了,但它不起作用!” 当你在Excel中手动输入像I[alt-enter]am[alt-enter]a[alt-enter]boy这样的内容,或者执行[A1] = "I" & vbNewLine & "am"这样的语句时,Excel会自动更改单元格格式并打开自动换行。自动换行是显示单元格中换行符的必要条件。但是,如果从UDF返回一个带有换行符的字符串,Excel不会更新格式。
我能想到两种可能的解决方案:
  1. 在使用此函数的任何单元格上手动启用自动换行
  2. (不建议)在调用ConcatenateRange UDF时将引用存储在Application.Caller中,然后设置一个Application.OnTime(now, "AddWordWrap")调用,并编写AddWordWrap子例程,以便它使用存储的引用向单元格添加自动换行格式(因为无法在UDF中更新单元格的格式)。该方法存在错误和问题。

你关于单词换行的额外信息说得很对。这是 Excel 的限制,我必须接受它。 - jherbold

0

只需使用CHAR(10)分隔符:

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

我肯定会点赞这个,因为它看起来应该是可以工作的,但实际上并没有。 - Daniel
@DanielCook 你试过使用CHAR(13)吗?还有你重新计算了工作表(F9)吗? - Thiago Lewin

0

使用:

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

0

尝试使用这个

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

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

-1

我把它插入后,只要使用“换行文本”,它就可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接