【问题标题】:split a text into several lines (inside a cell) in Excel using VBA使用 VBA 在 Excel 中将文本拆分为多行(在单元格内)
【发布时间】:2015-07-06 21:09:19
【问题描述】:

我正在使用 Excel 为我的数据生成一份汇总报告。我希望每个夏天都显示在一个单元格中。我使用了 VBA,得到了这样的结果:

我希望能够像这样显示数据:

所有行都应以“增加”或“减少”开头。我怎样才能在 VBA 中做到这一点? (我有很多像这个例子中的单元格)如何遍历特定单元格内的文本并在每个单词之后添加一个新行?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    如果您尝试修复宏以便将来正确格式化行,那么您需要添加换行符(我自己使用 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)IncreaseChar(10)Decrease,其中 Char(10) 是您可以通过按 Alt+Numpad 0010 获得的内容,或粘贴公式=CHAR(10) 的结果值。然后使用公式删除第一个字符。

    【讨论】:

    • 是的,这会起作用(假设 com1 等是您构建的行,上面写着“增加 X%..”)。不管你的最后一行是什么,你都不需要 vbLf。
    • 注意“回车”+“换行”(vbCrLf)也可以用更易读的vbNewLine来引用。
    • 好的,谢谢,所以假设我现在使用它:如果其中一个元素不存在,则 Selection = com1 & vbLf & com2 & vbLf & com3 & vbLf com4实例)然后我得到一个空行/我怎样才能避免它?
    • 要正确地做到这一点(有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))
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多