String 在Excel中提取字符串的一部分
我有一根这样的绳子 东京5号的汽车将于33:53:03抵达。13:56:39 来自奥地利的汽车将于33:53:07抵达。13:56:43 来自印度的汽车将于33:53:03抵达。13:56:39 在excel的同一单元格中 我需要在13:56:39在13:56:43 13:56:39在单独的单元格中显示字符串的这些部分String 在Excel中提取字符串的一部分,string,excel,vba,shift,ctrl,enter,String,Excel,Vba,Shift,Ctrl,Enter,我有一根这样的绳子 东京5号的汽车将于33:53:03抵达。13:56:39 来自奥地利的汽车将于33:53:07抵达。13:56:43 来自印度的汽车将于33:53:03抵达。13:56:39 在excel的同一单元格中 我需要在13:56:39在13:56:43 13:56:39在单独的单元格中显示字符串的这些部分 请帮助如果您的数据是在一列中,我认为使用变量数组的Regexp是有意义的 但作为一个更灵活的选项,您可以使用以下UDF作为数组输入的公式来拆分字符串 如果您的字符串是A1,并且您
请帮助如果您的数据是在一列中,我认为使用变量数组的Regexp是有意义的 但作为一个更灵活的选项,您可以使用以下UDF作为数组输入的公式来拆分字符串 如果您的字符串是A1,并且您希望最多有5个匹配项 选择B1:F1 在公式栏中添加=1 挤在一起 额外的非匹配项将不适用 代码 更新以处理单个匹配
如果您的数据是在一列中,我认为带有变量数组的Regexp是有意义的 但作为一个更灵活的选项,您可以使用以下UDF作为数组输入的公式来拆分字符串 如果您的字符串是A1,并且您希望最多有5个匹配项 选择B1:F1 在公式栏中添加=1 挤在一起 额外的非匹配项将不适用 代码 更新以处理单个匹配
我将采用不同的方法,使用公式: B列使用以下公式:
B1=IFERROR(SEARCH("at ??:??:??",A$1,1),"")
B2=IFERROR(SEARCH("at ??:??:??",A$1,B1+11),"")
C1=IFERROR(PART(A$1,B1,11),"")
C列使用以下公式:
B1=IFERROR(SEARCH("at ??:??:??",A$1,1),"")
B2=IFERROR(SEARCH("at ??:??:??",A$1,B1+11),"")
C1=IFERROR(PART(A$1,B1,11),"")
这些方法适用于大量事件。我会采用不同的方法,使用以下公式: B列使用以下公式:
B1=IFERROR(SEARCH("at ??:??:??",A$1,1),"")
B2=IFERROR(SEARCH("at ??:??:??",A$1,B1+11),"")
C1=IFERROR(PART(A$1,B1,11),"")
C列使用以下公式:
B1=IFERROR(SEARCH("at ??:??:??",A$1,1),"")
B2=IFERROR(SEARCH("at ??:??:??",A$1,B1+11),"")
C1=IFERROR(PART(A$1,B1,11),"")
这些方法适用于大量发生的情况。向下和脏字符串操作:
Option Explicit
Sub Test()
Dim cellValue As String
Dim newCellArray() As String
Dim valueYouWant As String
Dim cellCounter As Integer
Dim x As Integer
Dim myRange As Range
Const SEPERATOR_VALUE = "at "
Const ASCII_A = 65
For cellCounter = 1 To 10 '10 represents the last row...there are ways to set this dynamically if needed
cellValue = Sheet1.Range("A" & cellCounter)
newCellArray = Split(cellValue, "at ")
'Array is zero-based, but we want to start at first split value
For x = 1 To UBound(newCellArray)
valueYouWant = Trim$(Left$(newCellArray(x), InStr(1, newCellArray(x), " "))) 'You could prefix this with "at " if you really needed it
Sheet1.Range(Chr$(ASCII_A + x) & cellCounter).Value = valueYouWant
Next x
Next cellCounter
End Sub
向下和脏字符串操作:
Option Explicit
Sub Test()
Dim cellValue As String
Dim newCellArray() As String
Dim valueYouWant As String
Dim cellCounter As Integer
Dim x As Integer
Dim myRange As Range
Const SEPERATOR_VALUE = "at "
Const ASCII_A = 65
For cellCounter = 1 To 10 '10 represents the last row...there are ways to set this dynamically if needed
cellValue = Sheet1.Range("A" & cellCounter)
newCellArray = Split(cellValue, "at ")
'Array is zero-based, but we want to start at first split value
For x = 1 To UBound(newCellArray)
valueYouWant = Trim$(Left$(newCellArray(x), InStr(1, newCellArray(x), " "))) 'You could prefix this with "at " if you really needed it
Sheet1.Range(Chr$(ASCII_A + x) & cellCounter).Value = valueYouWant
Next x
Next cellCounter
End Sub
整个字符串是否在单个单元格中?或者有三个单元格,每个单元格都有以汽车开头的文本?不,整个文本都在同一个单元格中,我需要每个单元格中的时间。时间周围的文本总是相同的,还是不同?如果它变化,以哪种方式?每个单元格中总是有三次吗?还有更多吗?是否可以减少?它保持不变,对于时间的每个实例,都有一个at/b/b表示空间,就像在C中一样,在单个单元格中的整个字符串之前?或者有三个单元格,每个单元格都有以汽车开头的文本?不,整个文本都在同一个单元格中,我需要每个单元格中的时间。时间周围的文本总是相同的,还是不同?如果它变化,以哪种方式?每个单元格中总是有三次吗?还有更多吗?可以少一些吗?它保持不变,对于时间的每个实例,都有一个at/b/b表示空间,就像前面的C一样