根据另一个单元格中的文本替换部分字符串

时间:2017-09-18 14:12:01

标签: excel vba

凌晨5:00 5:13 上午6:10 6:26 上午6:40 6:56 上午7:25 7:41 上午8:15 8:28 上午9:10 9:24 上午10:10 10:23上午 上午11:10 11:26上午 下午12:02 12:15 下午12:50 1:06 PM

我正在尝试创建一个宏,我需要将当前单元格中的单词AM或PM替换为没有AM和PM的时间,如果上面的单元格有AM或PM

例如,第一行中的时间保持不变,第二行中的行只显示6:10和6:26之类的时间,因为上面的单元格有AM。同样对于PM行也是如此。包含PM的第一行保持不变,但后面的行只显示数字。

我当前的代码是这样,它似乎没有工作..我的excel文件只是崩溃,必须重新启动EXCEL Required end table

'Remove additional AM and PM    
Dim i as Long, j as Long
Dim celltxt as String

    For i= 2 To 200
        j=3
        Do While j<50
            celltxt = Cells(i-1,j).Text
            If InStr( 1, celltext,("AM" Or "PM")) Then
            Cells(i,j).Replace What:="AM" Or "PM", Replacement:=" ", SearchOrder:=xlByColumns, MatchCase:=True
            Else
            End If
        Loop
    Next i
    End Sub

3 个答案:

答案 0 :(得分:0)

我认为你需要尝试这段代码:

'Remove additional AM and PM    
Dim i as Long, j as Long
Dim celltxt as String

    For i= 2 To 200
        For j = 3 To 49
            celltxt = Cells(i-1,j).Text
            If InStr( 1, celltext,("AM" Or "PM")) Then
            Cells(i,j).Replace What:="AM" Or "PM", Replacement:=" ", SearchOrder:=xlByColumns, MatchCase:=True
            Else
            End If
        Next j
    Next i
End Sub

希望这个帮助

答案 1 :(得分:0)

1)你的代码崩溃,因为你没有增加内循环的计数器(j),所以代码被困在一个无限循环中(当你使用调试器时很容易理解)< / p>

2)我认为替换不接受or - 条款。相反,您必须发出2个单独的替换语句。

3)没有理由循环所有数据。您可以一次替换所有字符串(也许您必须调整范围的地址):

Dim r As Range
Set r = Range("C1:AW200")
r.Replace What:="AM", Replacement:="", LookAt:=xlPart, MatchCase:=False
r.Replace What:="PM", Replacement:="", LookAt:=xlPart, MatchCase:=False

4)也许更好的解决方案是从字符串中创建真实日期并正确格式化。

答案 2 :(得分:0)

我想我想出来了

'Remove additional AM and PM
    For m = 100 To 2 Step -1
        For n = 3 To 30
                celltxt = Cells(m - 1, n).Text
                    If celltxt Like "*AM*" Then
                        Cells(m, n).Replace What:="AM", Replacement:=" "
                    Else
                    End If
        Next n
    Next m
    For m = 100 To 2 Step -1
        For n = 3 To 30
                celltxt = Cells(m - 1, n).Text
                    If celltxt Like "*PM*" Then
                        Cells(m, n).Replace What:="PM", Replacement:=" "
                    Else
                    End If
        Next n
    Next m
    For m = 100 To 2 Step -1
        For n = 3 To 30
                celltxt = Cells(m - 1, n).Text
                    If celltxt Like "*-*" Then
                        Cells(m, n).Replace What:="PM", Replacement:=" "
                    Else
                    End If
        Next n
    Next m
    For m = 100 To 2 Step -1
        For n = 3 To 30
                celltxt = Cells(m - 1, n).Text
                    If celltxt Like "*-*" Then
                        Cells(m, n).Replace What:="AM", Replacement:=" "
                    Else
                    End If
        Next n
    Next m
End Sub