【发布时间】:2015-07-06 21:09:19
【问题描述】:
我正在使用 Excel 为我的数据生成一份汇总报告。我希望每个夏天都显示在一个单元格中。我使用了 VBA,得到了这样的结果:
我希望能够像这样显示数据:
所有行都应以“增加”或“减少”开头。我怎样才能在 VBA 中做到这一点? (我有很多像这个例子中的单元格)如何遍历特定单元格内的文本并在每个单词之后添加一个新行?
【问题讨论】:
我正在使用 Excel 为我的数据生成一份汇总报告。我希望每个夏天都显示在一个单元格中。我使用了 VBA,得到了这样的结果:
我希望能够像这样显示数据:
所有行都应以“增加”或“减少”开头。我怎样才能在 VBA 中做到这一点? (我有很多像这个例子中的单元格)如何遍历特定单元格内的文本并在每个单词之后添加一个新行?
【问题讨论】:
如果您尝试修复宏以便将来正确格式化行,那么您需要添加换行符(我自己使用 CrLf,但 Excel,对于单元格,只关心换行符)带有 vbLf 的元素。
感谢@retailcoder 指出 vbNewLine == vbCrLf,因此您可以使用对您更有意义的方法。
比如 Range.Value = "line 1" & vbcrlf & "line 2" & vbcrlf & "line 3" 等等:
Range.Value = _
"line 1" & vbcrlf & _
"line 2" & vbcrlf & _
"line 3"
或者,就我个人而言,我更喜欢通过循环或使用 Join() 来构造文本:
Range.Value = Join(Array( _
"Line 1", _
"Line 2", _
"Line 3"), vbCrLf)
要让它实际显示在新行上,您需要使用 Range.WrapText = True 仔细检查 Word Wrap 是否已打开(Excel 会自动设置它,但以防它被其他东西覆盖)
但是,我意识到一种解释是您只想快速修复工作表上已有的内容。如果是这种情况,那么只需手动查找并替换单词“Increase”或“Decrease”,分别使用Char(10)Increase 或Char(10)Decrease,其中 Char(10) 是您可以通过按 Alt+Numpad 0010 获得的内容,或粘贴公式=CHAR(10) 的结果值。然后使用公式删除第一个字符。
【讨论】:
vbCrLf)也可以用更易读的vbNewLine来引用。
IIF in-line if 的解决方法,但它们不会涵盖所有场景,您可能会以一个尾随的新行结束)使用循环:For each line in Array(line1,line2,line3): if line <> "" then text = text & line & vbcrlf: next line: text = left(text,len(text)-1) 'strip off trailing vbcrlf .或者,您可以使用 IIF 来消除循环的需要,但这需要更多的输入!
text = left(text,len(text)-1)应该说text = left(text,len(text)-len(vbcrlf))