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

时间:2012-03-28 07:04:47

标签: excel excel-vba cell vba

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

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

由于我已将行高设置为固定行(仅显示一行),因此此代码无效。

同样在我的文本中,由于数据是通过VBA代码输入的,因此没有换行符。

提前致谢。

2 个答案:

答案 0 :(得分:3)

一种方法是从未调整单元格的长度中删除换行符来减去单元格的长度

使用工作表函数Substitute

,可以使用0长度字符串替换换行符
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在Get first two lines of text from a wraped cell in excel中指出的那样,如果使用字体大小(可以改变),这很棘手。

我认为最简单的方法是将单元格内容复制到其他位置(到其他空白行),并根据该单元格自动调整该行以获得高度。

答案 1 :(得分: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