6

我有一个电子表格,其中项目描述是可变长度,但总是以“硬返回”结束以强制在单元格中换行。我需要将单元格的第一行复制到另一个单元格中。

我可以使用 INSTR 查找硬返回(不可见字符)的第一个实例,然后复制前 N-1 个字符吗?

例如:

Dell PowerEdge R720XD
Chassis (Max of ......

或者

Dell OptiPlex 7010 Minitower   
Intel Core.............

在所有情况下,无论长度如何,我都需要复制单元格中文本的第一行。

任何想法我怎么能做到这一点?

4

4 回答 4

6

是的,您可以轻松做到这一点

strShort = Left(strLong, InStr(strLong, vbCrLf) - 1)

有时(eep。当来自 Unix 系统时),您可能必须将vbCrLf(carriage Return, LineFeed) 替换为vbLfonly。

如果您不确定它是否包含 Enter,则此代码将执行

strShort = IIf(InStr(strLong, vbCrLf), Left(strLong, InStr(strLong, vbCrLf) - 2), strLong)
于 2013-02-25T19:50:47.500 回答
2

根据换行符的类型,您可以这样做:

InStr(Range("A1").Text, vbLf)
InStr(Range("A1").Text, vbCr)
InStr(Range("A1").Text, vbCrLf)

获取换行符之前的文本:

Left(Range("A1").Text, InStr(Range("A1").Text, vbLf) - 1)

在换行符后获取文本:

Right(Range("A1").Text, InStr(Range("A1").Text, vbLf))
于 2013-02-25T19:53:10.003 回答
0

我无法在下面的 Ripster 代码中添加评论。我需要50的声望;我的只有 36 岁,但这确实是该评论应该去的地方,而不是单独的答案。

在我看来,Ripster 的最后一段代码,

Right(Range("A1").Text, InStr(Range("A1").Text, vbLf))

应该,

Right(Range("A1").Text, (Len(Range("A1")-InStr(Range("A1").Text, vbLf)) - 1)

最后在没有中断的情况下重新生成字符串

strString = Left(Range("A1").Text, InStr(Range("A1").Text, vbLf) - 1) & Right(Range("A1").Text, (Len(Range("A1")-InStr(Range("A1").Text, vbLf)) - 1)

给版主的说明:请查看此内容。我仍然认为 mysefl 是 VBA 的初学者,我的逻辑可能是错误的。

于 2018-10-08T15:27:40.033 回答
-1

我的解决方案是:

strString = 替换(strString, vbLf, "")

即使字符串包含多个线制动器,它也很有用。

于 2020-01-23T15:22:24.973 回答