あなたは、あなたのシート内のすべての日付を変更する必要があることを、ご使用の範囲内のすべてのセルをループ絶対に特定の可能性があるので、のようなあなたの機能を使用して調整を行う場合は、次によって
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'関数を使うか、またはセルフォーマットをチェックする必要があります。 –