Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从字符串中删除文本(&;保持领先_Vba_Excel - Fatal编程技术网

Vba 从字符串中删除文本(&;保持领先

Vba 从字符串中删除文本(&;保持领先,vba,excel,Vba,Excel,我正试图找到一种方法,从包含前导数字的单元格中删除文本字符串,因为我需要的只是数字,以便在数据透视表中使用它 下面是一个数据示例 5 or more times 1 time 3 times 2 times 这些数据位于“BI”列中,并存储在名为“DB”的工作表中 我有一个宏可以从日期/时间格式的列中删除时间,如果我可以一个接一个地运行这两个列,那就太好了 下面是从日期/时间中删除时间的代码 Sub ToDate() Dim LR As Long, i As Long Sheets("DB"

我正试图找到一种方法,从包含前导数字的单元格中删除文本字符串,因为我需要的只是数字,以便在数据透视表中使用它

下面是一个数据示例

5 or more times
1 time
3 times
2 times
这些数据位于“BI”列中,并存储在名为“DB”的工作表中

我有一个宏可以从日期/时间格式的列中删除时间,如果我可以一个接一个地运行这两个列,那就太好了

下面是从日期/时间中删除时间的代码

Sub ToDate()
Dim LR As Long, i As Long

Sheets("DB").Select

LR = Range("N" & Rows.Count).End(xlUp).Row
For i = 2 To LR
    With Range("N" & i)
        .NumberFormat = "mm/dd/yyy"
        .Value = DateValue(.Value)
    End With
Next i

Sheets("Tasks").Select
GoTo Fin:

Fin:
MsgBox ("Process Completed")

End Sub

如果数字后始终有空格,请使用

' Check that cell has a value
if .Value <> "" Then   
    .Value = Left(.Value,Instr(.Value," ")-1)
Endif
'检查单元格是否有值
如果.Value为“”,则
.Value=Left(.Value,Instr(.Value,”)-1)
恩迪夫

如果数字使用后始终有空格,请使用-1删除空格

' Check that cell has a value
if .Value <> "" Then   
    .Value = Left(.Value,Instr(.Value," ")-1)
Endif
'检查单元格是否有值
如果.Value为“”,则
.Value=Left(.Value,Instr(.Value,”)-1)
恩迪夫

使用-1删除空格

这将返回字符串开头的所有内容,直到出现空格字符为止。
-1
之所以重要,是因为您不希望在最终结果中使用空格字符

With Range("BI" & i)
    .Value = Left(.Value, InStr(.Value, " ") - 1)
End With

这将返回字符串开头的所有内容,直到出现空格字符为止。
-1
之所以重要,是因为您不希望在最终结果中使用空格字符

With Range("BI" & i)
    .Value = Left(.Value, InStr(.Value, " ") - 1)
End With
这也将有助于:

if .Value <> "" Then   
    .Value = Split(.Value, " ")(0)
Endif
如果.Value为“”,则
.Value=Split(.Value,“”)(0)
恩迪夫
这也可以:

if .Value <> "" Then   
    .Value = Split(.Value, " ")(0)
Endif
如果.Value为“”,则
.Value=Split(.Value,“”)(0)
恩迪夫


您可以在此处获得相同的代码:数字是否总是在字符串前面,并且总是用空格分隔?谢谢您,帕雷什。我尝试了这个示例代码,它会弹出一个选择范围的弹出框,我需要代码在没有额外交互的情况下执行。我不知道如何编辑该示例,使其在特定的工作表和范围(双栏)上以这种方式工作,是的,该列的内容总是以一个前导数字开头,后跟一个文本字符串,如我发布的示例所示。您可以使用
Val
函数忽略前导空格和尾随文本,因此
.Value=Val(.Value)
您可以在此处获得相同的代码:数字是否总是在字符串前面,并且总是用空格分隔?谢谢您,帕雷什。我尝试了这个示例代码,它会弹出一个选择范围的弹出框,我需要代码在没有额外交互的情况下执行。我不知道如何编辑该示例,使其在特定的工作表和范围(双栏)上以这种方式工作,是的,该列的内容总是以一个前导数字开头,后跟一个文本,如我发布的示例中所示。您可以使用
Val
函数忽略前导空格和尾随文本,因此
。Value=Val(.Value)
add-1删除空格谢谢Paul Kelly和Chrismas007。这是可行的,但只有一个问题。在“BI”范围内的某个点,在数据继续之前可能(存在)空单元格,并且宏在找到第一个空单元格后会因错误而停止。不幸的是,这些空单元格无法删除,因为同一行中还有其他数据需要保留。我就是这样做的。LR=Range(“BI”和Rows.Count).End(xlUp).i=2的行到带有Range(“BI”和i)的LR.Value=Left(.Value,InStr(.Value,”)-1)End With Next iYou可以在尝试更改单元格之前检查该单元格是否为空。我已经更新了示例中的代码。现在我得到一个错误。调试指向.Value=Left(.Value,Instr(.Value,”)-1,错误为“无效的过程调用或参数”。这就是我格式化代码的方式。对于范围为(“BI”&i)的i=2到LR,如果.Value为“”,则.Value=Left(.Value,InStr(.Value,”)-1)如果以下一个iBtw结束,则结束,.Value=Left(.Value,InStr(.Value,”)-1)如果我从“”中删除空格代码运行,但它只是删除了列中的所有内容。添加-1删除空格谢谢Paul Kelly和Chrismas007。这是可行的,但只有一个问题。在“BI”范围内的某个点,在数据继续之前可能(存在)空单元格,并且宏在找到第一个空单元格后会因错误而停止。不幸的是,这些空单元格无法删除,因为同一行中还有其他数据需要保留。我就是这样做的。LR=Range(“BI”和Rows.Count).End(xlUp).i=2的行到带有Range(“BI”和i)的LR.Value=Left(.Value,InStr(.Value,”)-1)End With Next iYou可以在尝试更改单元格之前检查该单元格是否为空。我已经更新了示例中的代码。现在我得到一个错误。调试指向.Value=Left(.Value,Instr(.Value,”)-1,错误为“无效的过程调用或参数”。这就是我格式化代码的方式。对于范围为(“BI”&i)的i=2到LR,如果.Value为“”,则.Value=Left(.Value,InStr(.Value,”)-1)如果以下一个iBtw结束,则结束,.Value=Left(.Value,InStr(.Value,”)-1)如果我从“”中删除空格,则代码将运行,但它只是删除列中的所有内容。谢谢。已经开始工作了=)。我也尝试过你的方法,也很有效。谢谢。已经开始工作了=)。我也尝试过你的方法,它也很有效。