Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 删除单元格中的部分文本,保留其他文本_Excel_Vba - Fatal编程技术网

Excel 删除单元格中的部分文本,保留其他文本

Excel 删除单元格中的部分文本,保留其他文本,excel,vba,Excel,Vba,`2020年4月19日下午6:00:00-这是电池内部的内容。我想删除“6:00:00 PM”部分,但我能找到的唯一功能是.REPLACE函数,它只会删除整个单元格并将其变为空白。每个单元格都有不同的日期,所以我不能每次都用相同的日期替换 With Columns("E:E") .Replace What:="?*:00:00 PM=", Replacement:="?*:00:00 PM " .Replace What:="?*:00:00 PM", Replacement:="" End W

`2020年4月19日下午6:00:00-这是电池内部的内容。我想删除“6:00:00 PM”部分,但我能找到的唯一功能是.REPLACE函数,它只会删除整个单元格并将其变为空白。每个单元格都有不同的日期,所以我不能每次都用相同的日期替换

With Columns("E:E")
.Replace What:="?*:00:00 PM=", Replacement:="?*:00:00 PM "
.Replace What:="?*:00:00 PM", Replacement:=""
End With
With Columns("H:H")
.Replace What:="?*:00:00 PM=", Replacement:="?*:00:00 PM "
.Replace What:="?*:00:00 PM", Replacement:=""
End With
使用该函数

这个答案将在第4列(“D”)中找到最后一行,并从第1行循环到lRow(最后一行),按定义格式化每个单元格

Sub test()
    Dim rng As Range, cell As Range
    Dim lRow As Long
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Worksheets("Data")

    lRow = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row
    Set rng = Range(Cells(1, 4), Cells(lRow, 4))

    For Each cell In rng
        cell = Format(cell, "dd/mm/yyyy")
    Next cell
End Sub

如果列E中的值为真实日期/时间,则运行:

Sub dropTime()
    With Range("E:E").Cells
        .NumberFormat = "m/d/yyyy "
    End With
End Sub
Sub dropTime2()
    Dim rng As Range, r As Range, arr
    Set rng = Intersect(Range("E:E"), ActiveSheet.UsedRange)
    For Each r In rng
        arr = Split(r.Text, " ")
        If UBound(arr) = 2 Then
            r.Value = arr(0)
            r.NumberFormat = "m/d/yyyy "
        End If
    Next r
End Sub

如果列E中的值是文本值,则运行:

Sub dropTime()
    With Range("E:E").Cells
        .NumberFormat = "m/d/yyyy "
    End With
End Sub
Sub dropTime2()
    Dim rng As Range, r As Range, arr
    Set rng = Intersect(Range("E:E"), ActiveSheet.UsedRange)
    For Each r In rng
        arr = Split(r.Text, " ")
        If UBound(arr) = 2 Then
            r.Value = arr(0)
            r.NumberFormat = "m/d/yyyy "
        End If
    Next r
End Sub

比我的回答更清楚。我将保留我的,因为它的工作,并显示了一个替代的解决方案,但这应该是选定的答案。所以,在我的VBA中,我已经使用单元格作为另一个部分的范围。所以它给了我一个“编译错误:对于已经在使用的控制变量”。有没有办法解决这个问题?你可以调用
cell
其他东西<例如,代码>单元格2。