0

マクロは、選択範囲で実行されると、20130808191057 として示される日時を取得し、19:10 IT としてフォーマットします。

マクロはうまく機能しますが、空のセルを含むセルの範囲を選択すると、停止してエラーが発生します。空のセルとテキストのあるセルを無視するにはどうすればよいですか。可能であれば、選択した列で実行したいと思います。

Sub TimeCreator()
    Dim r As Range, t As String
    For Each r In Selection
        t = r.Text
        r.Clear
        r.Value = TimeSerial(Mid(t, 9, 2), Mid(t, 11, 2), Right(t, 2))
        r.NumberFormat = "[h]:mm  ""IT"""
    Next
End Sub

前もって感謝します。

4

1 に答える 1

1

Andy G が述べているように、セルが空の場合はチェックを実行し、空の場合はスキップする必要があります。

次のようにできます。

Sub TimeCreator()
    Dim r As Range, t As String
    For Each r In Selection
        If r.Value <> Empty Then 'test if the cell is blank (note, a zero length string is not blank in Excel)
            t = r.Text
            'r.Clear is unnecessary as you assign to r.Value
            r.Value = TimeSerial(Mid(t, 9, 2), Mid(t, 11, 2), Right(t, 2))
            r.NumberFormat = "[h]:mm  ""IT"""
        End If
    Next
End Sub

ただし、最初に値を持つセルでのみマクロを実行することをお勧めします。これは、次のように Range.SpecialCells() を使用して実行できます。

Sub TimeCreator()
    Dim r As Range, rangeToRunOn As Range, t As String
    Set rangeToRunOn = Selection.SpecialCells( _
                           xlCellTypeConstants, _
                           xlTextValues OR xlNumbers)
    If Not rangeToRunOn is Nothing Then
        For Each r In rangeToRunOn
            t = r.Text
            'r.Clear is unnecessary as you assign to r.Value
            r.Value = TimeSerial(Mid(t, 9, 2), Mid(t, 11, 2), Right(t, 2))
            r.NumberFormat = "[h]:mm  ""IT"""
        Next
    End If
End Sub
于 2013-08-11T13:39:38.180 に答える