通过vba计算包裹单元格中的行数。

问题描述 投票:3回答:2

如何通过vba代码计算封装单元格中的行数?

With Cells(1, 1)
    .WrapText = False
    height1 = .height
    .WrapText = True
    height2 = .height
End With 
MsgBox height2 / height1 & " Lines"

由于我已经将行高设置为固定的高度(只能看到一行),所以这段代码无法使用。

另外在我的文本中,没有换行,因为数据是通过VBA代码输入的。

先谢谢你了。

excel excel-vba cell vba
2个回答
3
投票

一种方法是用未调整单元格的长度减去换行符的单元格长度。

可以使用工作表函数将换行符替换为长度为0的字符串。Substitute

Sub test()
Dim c As Range
Set c = ActiveCell
MsgBox Len(c.Value) - Len(Application.WorksheetFunction.Substitute(c.Value, Chr(10), vbNullString)) & " Linebreak(s)"
End Sub

[更新: Not a linebreak!]

正如Sid在《中国经济周刊》中所指出的 在excel中,从包裹的单元格中获取前两行文本。 如果使用字体大小(可以改变),这是很棘手的。

我认为最简单的方法是把单元格的内容复制到其他地方(到其他空白行),然后根据该单元格自动匹配该行以获得高度。


0
投票

比方说,你想计算A1单元格中的行数,你可以这样做。

' Gets the value of the cell (shortcut)
val = Range("A1").value

' Counts the lines by comparing the contents by the themselves 
' after removing the line brakes which is character 10. 
' This gives back the number of breaks 
' so we add 1 to get the number of lines, 
' since the last line doesn't have a line break.
lines = Len(val) - Len(Replace(val, Chr(10), "")) + 1
© www.soinside.com 2019 - 2024. All rights reserved.