我在每行的第一个单元格中都有文本内容。它基本上是一个段落。我想将这一段分成不同的单元格,在同一行中。
定义:光合作用是植物和其他有机体将光能转化为化学能的过程,光能通常来自太阳,稍后可以释放出来,为有机体的活动提供动力。工作:在光合细菌中,为光合作用收集光线的蛋白质嵌入到细胞膜中。在其最简单的形式中,这涉及到围绕细胞本身的膜。进化:早期的光合作用系统,例如绿色和紫色硫磺以及绿色和紫色非硫细菌的光合作用系统,被认为是缺氧的,使用各种分子作为电子供体。
此内容存在于单元格a1中。我想把它分成3个单元
单元格a2
定义:光合作用是植物和其他有机体将通常来自太阳的光能转化为化学能的过程,这些光能稍后可以释放出来,为生物体的活动提供动力。
单元格a3
工作:在光合作用的细菌中,为光合作用收集光线的蛋白质嵌入细胞膜。最简单的形式是围绕细胞本身的细胞膜。
单元格a4
进化:早期的光合作用系统,如绿色和紫色的硫磺和绿色和紫色的非硫细菌的光合作用系统,被认为是无氧的,使用各种分子作为电子供体。
第一个单元格来自文本定义:- Working:(这包括文本" Definition:“,不包括" Working:")第二个单元格来自Working:-演进:(这包括文本"Working:”,不包括“includes:”)第三个单元格,来自does:- endof字符串。
发布于 2015-09-07 05:55:05
使用FIND()和MID(),您应该能够解析它。
免责声明:下面的解决方案假设您希望解析的每个段落中始终包含字符串"Definition“、"Working”和“”。
FIND根据字符从指定位置开始的位置返回一个数字,在本例中为第一个字符1。
在A2中使用以下公式:
=LEFT(A1,FIND("Working:",A1,1)−1)
这将搜索"Working:“并返回其位置。在这种情况下,字符号206。-1省略W中的"W“,因为它是字符#206。我们希望在"W“之前的字符结束。
在A3中使用以下公式:
=MID(A1,FIND("Working:",A1,1),FIND("Evolution:",A1,1)-FIND("Working:",A1,1))
现在我们正在寻找一个开始和结束字符的位置。我们必须使用减法来得到字符串的长度。
在A4中使用以下公式:
=MID(A1,FIND("Evolution:",A1,1),FIND("Working:",A1,1))
中间需要一个开始和结束字符位置。
好处:为了消除开头或结尾的多余空格,可以将公式包装在TRIM()函数中。示例:=TRIM(MID(A1,FIND("Working:",A1,1),FIND("Evolution:",A1,1)-FIND("Working:",A1,1)))

发布于 2015-09-07 06:25:02
因为您将其标记为Excel-vba,所以我想我应该为您发布一个VBA解决方案。这个UDF有望满足您的需求。
Function SplitString(MyString As String, PartNum As Long)
Dim MyNewString As String, DefNames As Variant, DefNamesOn As Boolean
DefNamesOn = True
DefNames = Array("Definition: ", "Working: ", "Evolution: ")
MyNewString = Split(MyString, ":")(PartNum)
If DefNamesOn Then
SplitString = DefNames(PartNum - 1)
Else
SplitString = ""
End If
If Right(UCase(MyNewString), 8) = " WORKING" Then
SplitString = SplitString & Trim(Left(MyNewString, Len(MyNewString) - 8))
ElseIf Right(UCase(MyNewString), 10) = " EVOLUTION" Then
SplitString = SplitString & Trim(Left(MyNewString, Len(MyNewString) - 10))
Else
SplitString = SplitString & Trim(MyNewString)
End If
End Function如果开始时不需要"Definition: "、"Working: "或"Evolution: ",可以将DefNamesOn = True更改为"Evolution: "
像使用任何其他公式一样使用它:=拆分字符串( A1,1),其中A1包含您的字符串,1是您想要的零件的编号(1,2或3)
如果你总是想要打开或关闭DefNames,你可以从代码中去掉一些代码,但我认为在代码中给你这个选项更好。
发布于 2015-09-07 06:38:07
另一个VBA解决方案:
Option Explicit
Public Sub extractPara()
Dim lRow As Long, ur As Variant, arr As Variant
Dim i As Long, j As Long, x2 As Long, x3 As Long
With ActiveSheet
lRow = .Range("A" & .Rows.Count).End(xlUp).Row: j = 1
ur = .Range("A1:A" & lRow).Value2
arr = .Range("A1:A" & lRow * 4).Value2
For i = 1 To lRow
x2 = InStr(1, ur(i, 1), "Working:", vbBinaryCompare)
x3 = InStr(1, ur(i, 1), "Evolution:", vbBinaryCompare)
arr(j + 0, 1) = ur(i, 1)
arr(j + 1, 1) = Left(ur(i, 1), x2)
arr(j + 2, 1) = Mid(ur(i, 1), x2, x3)
arr(j + 3, 1) = Mid(ur(i, 1), x3)
j = j + 4
Next
.Range("A1:A" & lRow * 4) = arr
End With
End Subhttps://stackoverflow.com/questions/32427010
复制相似问题