我想基本上模拟在VBA中替换Excel中的所有功能并替换字符串03/01/2018(在此工作簿中存在10次)与01/03/2017我已经知道如何为一个单次出现但不是一个范围内的所有出现。
替换方法是否有像findnext这样的东西?
Sub findandreplacedate()
Workbooks("01 .xlsx").Sheets(1).usedrange.Replace What:="*03/01/2018*", _
Replacement:="01/03/2017", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
end sub
答案 0 :(得分:2)
你可以尝试一下。这使用RegEx (正则表达式)来检查您的日期。
您需要设置对 Microsoft VBScript正则表达式x.x
的引用
Sub ChangeDates()
Dim RegEx As New RegExp, rng As Range, i As Long, s As String
Dim tempArr() As String, bFlag As Boolean
With RegEx
.Pattern = "(\d{2})/(\d{2})/(\d{4})"
For Each rng In ActiveSheet.UsedRange
tempArr = Split(rng.Text)
bFlag = False
For i = 0 To UBound(tempArr)
If .test(tempArr(i)) Then
s = tempArr(i)
'Subtract 1 year from original date
s = Format(DateAdd("YYYY", -1, CDate(s)), "MM/DD/YYYY")
'Swap month and day field
tempArr(i) = Format(DateSerial(.Replace(s, "$3"), _
.Replace(s, "$2"), .Replace(s, "$1")), "mm/dd/yyyy")
'Tell VBA that the string has change and to update sheet
bFlag = True
End If
Next
If bFlag = True Then rng.Value = Join(tempArr)
Next rng
End With
End Sub
(\d{2})/(\d{2})/(\d{4})
此表达式分为三组:(\d{2})
,(\d{2})
,(\d{4})
第1组和第2组找到任意两个({2}
)位(\d
),后跟正斜杠/
第3组正在寻找正斜杠{4}
之后的任意四个(\d
)位(/
)
答案 1 :(得分:2)
是的 FindNext
Range.FindNext Method (Excel)
要查找某个范围内的所有文字实例,您可以将 FindNext
与 Find
一起使用,以下示例说明如何使用 FindNext
。
Option Explicit
Public Sub Example()
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(1).UsedRange _
.Find("03/01/2018", LookIn:=xlValues)
If rng Is Nothing Then
Debug.Print "Not Found"
Exit Sub
End If
Dim firstAdd As String
firstAdd = rng.Address
Do ' Print address
DoEvents
Debug.Print rng.Address
' Find next item
Set rng = ThisWorkbook.Worksheets(1).UsedRange.FindNext(rng)
Loop Until rng Is Nothing Or firstAdd = rng.Address
End Sub
其他信息
<子> DoEvents 对于允许用户在启动后取消进程等简单操作非常有用,例如搜索文件。对于长时间运行的进程,通过使用Timer或将任务委派给ActiveX EXE组件可以更好地完成处理器的处理。在后一种情况下,任务可以完全独立于您的应用程序继续,并且操作系统采用多任务处理和时间切片。
Debug.Print Immediate Window 用于调试和计算表达式,执行语句,打印变量值等。它允许您在调试期间输入要由开发语言评估或执行的表达式。要显示立即窗口,请打开项目进行编辑,然后从“调试”菜单中选择“Windows”并选择“立即”,或按CTRL + ALT + I.