당신이 당신의 시트에있는 모든 날짜는 당신이 당신의 사용 범위의 모든 세포를 통해 루프과 같이 함수를 사용하여 조정을 할 수있는 수정해야 할 것을 절대적으로 확신하는 경우
Sub ChangeDate()
Dim rngDates As Range
Dim varCounter As Variant
Dim dt As Date
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlManual
Set rngDates = ThisWorkbook.Worksheets("Tabelle2").UsedRange
'Loop over all cells in range
For Each varCounter In rngDates
'If it's a date, change its value
If IsDate(varCounter.Value) Then
dt = CDate(varCounter.Value)
dt = DateAdd("h", 1, dt)
varCounter.Value = Format(dt, "mm/dd/yy h:nnam/pm")
End If
Next varCounter
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub
을에 따라 사용 된 범위의 세포 양은별로 좋지 않을 수 있습니다.
우리가 배열로 사용 범위를 읽고과 같이 메모리에 처리 할 수있는에 개선하려면
Sub ChangeDate()
Dim varValues As Variant
Dim lngColumns As Long, lngRows As Long
Dim dt As Date
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlManual
'Read entire range to array
varValues = ThisWorkbook.Worksheets("Tabelle2").UsedRange
'Loop over all "columns"
For lngColumns = 1 To UBound(varValues, 1)
'Loop over all "rows" in that "column"
For lngRows = 1 To UBound(varValues, 2)
If IsDate(varValues(lngColumns, lngRows)) Then
dt = CDate(varValues(lngColumns, lngRows))
dt = DateAdd("h", 1, dt)
varValues(lngColumns, lngRows) = Format(dt, "mm/dd/yy h:nnam/pm")
End If
Next lngRows
Next lngColumns
'Overwrite usedRange with array
ThisWorkbook.Worksheets("Tabelle2").UsedRange = varValues
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub
이 관계없이 처리하고 데이터의 양의 확대됨에 조용히해야한다. 이것은 통합 문서를 보지 않고 모든 것을 설명하지 않을 수 있으며 철저한 테스트를 거쳐야 함은 물론입니다.
VBA에는 IsDate 함수가 있습니다. 날짜처럼 보이는 문자열이있을 수 있지만 'IsNumeric' 함수를 사용하거나 셀 형식을 검사해야하는 경우 셀 형식을 확인해야합니다. –