在Excel中使用VBA将文本拆分为几行(单元格内)
我正在使用Excel为我的数据生成汇总报告。我希望每个夏天都显示在一个单元格中。我使用VBA,得到了如下结果: 我希望能够像这样显示数据:在Excel中使用VBA将文本拆分为几行(单元格内),vba,excel,Vba,Excel,我正在使用Excel为我的数据生成汇总报告。我希望每个夏天都显示在一个单元格中。我使用VBA,得到了如下结果: 我希望能够像这样显示数据: 所有行均应以“增加”或“减少”开头。如何在VBA中执行此操作?(我有许多单元格,如本例中的单元格)如何浏览特定单元格中的文本,并在每个单词后添加新行 如果您试图修复宏,以便它将来正确格式化行,那么您需要通过将元素与vbLf连接在一起来添加换行符(我自己使用CrLf,但对于单元格,Excel只关心换行符) 我感谢@retailcoder指出vbNewLin
所有行均应以“增加”或“减少”开头。如何在VBA中执行此操作?(我有许多单元格,如本例中的单元格)如何浏览特定单元格中的文本,并在每个单词后添加新行 如果您试图修复宏,以便它将来正确格式化行,那么您需要通过将元素与vbLf连接在一起来添加换行符(我自己使用CrLf,但对于单元格,Excel只关心换行符) 我感谢@retailcoder指出vbNewLine==vbCrLf,所以您可以使用对您更有意义的选项 比如Range.Value=“line 1”&vbcrlf&“line 2”&vbcrlf&“line 3”等: 或者,我个人更喜欢通过循环或使用Join()构造文本: 要在新行中实际显示,您需要使用
Range.WrapText=True
然而,我意识到一种解释是,你只想快速修复工作表上已有的内容。如果是这种情况,只需手动查找单词“增加”或“减少”,并分别用
Char(10)rease
或Char(10)reduce
替换,其中Char(10)是通过按Alt+Numpad 0010或通过粘贴公式=Char(10)
得到的结果值。然后使用公式删除第一个字符。如果您试图修复宏,以便它在将来正确格式化行,则需要通过将元素与vbLf连接在一起,添加换行符(我自己使用CrLf,但对于单元格,Excel只关心换行符)
我感谢@retailcoder指出vbNewLine==vbCrLf,所以您可以使用对您更有意义的选项
比如Range.Value=“line 1”&vbcrlf&“line 2”&vbcrlf&“line 3”等:
或者,我个人更喜欢通过循环或使用Join()构造文本:
要在新行中实际显示,您需要使用Range.WrapText=True
然而,我意识到一种解释是,你只想快速修复工作表上已有的内容。如果是这种情况,只需手动查找单词“增加”或“减少”,并分别用
Char(10)rease
或Char(10)reduce
替换,其中Char(10)是通过按Alt+Numpad 0010或通过粘贴公式=Char(10)
得到的结果值。然后使用公式删除第一个字符。yep这将有效(假设com1等是您构建的表示“增加X%”的行)。不管最后一行是什么,您都不需要vbLf。请注意,“回车符”+“换行符”(vbCrLf
)也可以用可读性更高的vbNewLine
)来引用。好的,谢谢,现在让我们假设我使用这个:Selection=com1&vbLf&com2&vbLf&com3&vbLf com4,如果其中一个元素不存在(例如,如果我使用一个条件),那么我会得到一个空行/如何避免它?要正确地做到这一点(有IIF
in-line if的变通方法,但它们不会覆盖所有场景,并且您可能会得到一个尾随的新行)使用循环:对于数组中的每一行(第1行、第2行、第3行):if-line“”然后text=text&line&vbcrlf:下一行:text=left(text,len(text)-1)`去掉尾随的vbcrlf
。或者你可以使用IIF来消除循环的需要,但这需要更多的输入!实际上它说的是text=left(text,len(text)-1)
它应该说text=left(text,len(text)-len(vbcrlf))
是的,这会起作用(假设com1等是您构建的表示“增加X%”的行)。但无论最后一行是什么,您都不需要vbLf。请注意,“回车符”+“换行符”(vbCrLf
)也可以用可读性更高的vbNewLine
引用。好的,谢谢你,让我们假设我现在使用这个:Selection=com1&vbLf&com2&vbLf&com3&vbLf-com4如果其中一个元素不存在(例如,如果我使用条件),那么我会得到一个空行/我如何避免它?正确地执行它(对于IIF
行内if有一些变通方法,但它们不能覆盖所有场景,并且您可能会得到一个尾随的新行)对数组中的每一行使用循环:(第1行,第2行,第3行):如果行“”,则text=text&line&vbcrlf:下一行:text=left(text,len(text)-1)'去掉尾随的vbcrlf
。或者,您可以使用IIF来消除对循环的需要,但这需要更多的键入!实际上,当它说text=left(text,len(text)-1)
时,应该说text=left(text,len(text)-len(vbcrlf))
Range.Value = _
"line 1" & vbcrlf & _
"line 2" & vbcrlf & _
"line 3"
Range.Value = Join(Array( _
"Line 1", _
"Line 2", _
"Line 3"), vbCrLf)