Excel 如何从包装单元格中获取前两行文本?

Excel 如何从包装单元格中获取前两行文本?,excel,vba,count,line,Excel,Vba,Count,Line,我需要从Excel中的包装单元格中提取前两行文本。例如,包装的Excel单元格包含以下文本: wrapedtext1 wrappedtext2 wrappedtext3 wrappedtext4 我只需要前两行“wrappedtext1 wrappedtext2”。有可能吗?您好,有两种方法可以使用VBA代码执行此操作 第一条路。如果线之间用空格分隔 Dim avarSplit As Variant 'If separated with a space avarSplit = Spli

我需要从Excel中的包装单元格中提取前两行文本。例如,包装的Excel单元格包含以下文本:

wrapedtext1

wrappedtext2

wrappedtext3

wrappedtext4

我只需要前两行“wrappedtext1 wrappedtext2”。有可能吗?

您好,有两种方法可以使用VBA代码执行此操作

第一条路。如果线之间用空格分隔

Dim avarSplit As Variant

'If separated with a space
avarSplit = Split(Worksheets(2).Range("A7").Value, " ")
第二种方式,如果他们是分开的休息

Dim avarSplit2 As Variant

'separated with a break
avarSplit2 = Split(Worksheets(2).Range("A8").Value, Chr(10))
然后你得到一个数组,其中所有的行是分开的,你可以读出它们

穆斯利

我只需要得到前两行“wrappedtext1 wrappedtext2”。可能吗

是的,它可能是可能的,但是没有简单的方法来实现它。有很多因素你必须考虑。

1) 行高(像素)

2) 字体类型和大小

3) 行距

4) 单元格合并了吗

5) 单元格是否处于自动调整状态

6) 所有文本是否都处于正常模式,或者是否有任何粗体/斜体/下划线字符等

考虑一下这个快照

例如,以像素为单位的行高可以从

Debug.Print范围(“A1”).高度*(24/18)

上述情况下的字体大小可以通过以下方式实现

Debug.Print范围(“A1”).Font.Size

但挑战是在下面的场景中会发生什么

在我看来,要实现你想要的东西太痛苦了。最好的方法是使用
ALT+Enter
插入换行符,然后检索文本

跟进


字符串通过vba代码输入到包装的单元格中。那么,如何通过按alt+enter键插入数据呢1355 4小时前

在这种情况下,您也可以采取类似的方法

Sub Sample()
    Dim strg As String

    strg = "This is a sample" & vbCrLf & _
           "sentence which is" & vbCrLf & _
           "in Cell A1 and the" & vbCrLf & _
           "text is separated" & vbCrLf & _
           "with line breaks"

    With Range("A1")
        .Columns(1).ColumnWidth = 16.86
        .Font.Name = "Calibri"
        .Font.Size = 11
        .Value = strg
    End With
End Sub
注意:对于上述,您必须记录一个宏,并查看可以采用特定格式的字体、字体大小和列宽。再次,您必须考虑到我上面给出的例子是在一个新的表中的非格式化单元格。如果要写入合并单元格或每个格式化单元格,则必须相应地更改上述代码,这可以通过录制宏轻松实现我还假设缩放级别设置为100%

快照


Sid

您可以在Excel中使用一些复杂的公式来实现这一点,而无需VBA代码

假设多行文字位于A1中。如果只需要前两行,可以执行以下操作:

获取第一行:

=MID(A1,1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2))))
获取第二行:

=MID(A1,SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1))+1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2)))-SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1)))
然后简单地使用
CONCATENATE()
组合这两种方法

查看此网站,它允许您指定要获取的行: 使用查找功能:

=左(B2,(查找(字符(10),B2)))

  • 查找搜索换行符(CHAR(10)
  • LEFT为您提供B2中的前X个字符,直至找到换行符的数字

您是否尝试过抓取该单元格的内容并准确查看其包含的字符?例如,使用Asc()打印ASCII码函数?这可能会给你一个如何获取所需内容的线索。@JTeagle:我也有这个问题。在将wrapText属性设置到单元格后,单元格内容会自动用列宽进行包装。也就是说,我们实际上不放换行符。当我们按Alt+enter键输入数据时,我可以提取2行。但这里就是这样做的只需将wrap text属性设置为cell@1355-我理解。我担心您在这里可能会遇到困难,因为尽管您可能可以获得单元格的宽度,甚至可以获得正在使用的字体,但VBA(据我所知)没有在C++和可能的VB中提供一种“测量”文本的方法。我能问一下为什么只需要前两行吗?因为单元格的宽度(因此,在运行时可以很容易地改变),看起来似乎是一个稍微随意的事情。我需要验证一些字符串的长度(必须在一个设备中显示)。通过excel。我已将所有属性设置为excel列。在设备中仅显示两行。因此,我需要提取适合设备的字符串。字符串通过vba代码输入到包装单元格中。那么如何通过按alt+enter插入数据?好问题:)可能找到单元格的宽度,然后决定每行应该包含的字数?让我看看能否给你举个例子:)谢谢你的回答。这又是一个问题。我无法手动将换行符插入字符串。我需要检查两行能容纳多少单词。这正是我的观点。您需要首先决定使用哪种字体/字号,因为这在很大程度上取决于此。正如我提到的,这不是小菜一碟:)他们已经告诉过他们通过vba代码输入数据。所以断线就不会出现了。空格在此处不是有效的行分隔符。