几个月内修剪字符以仅显示前三个字符

时间:2018-12-11 10:16:39

标签: excel vba loops

我编写了一个循环,循环遍历包含月份名称的范围,并修剪大于三个字符的任何内容,因为我只需要看到前三个即:Jan而不是January。

下面的代码用于识别包含较长名称的单元格,但是LEFT函数会清除该单元格,而不仅仅是删除多余的字符以仅显示前三个字符。知道函数中有什么问题吗?非常感谢您的帮助。

非常感谢。

Sub TrimMonth()
    Application.ScreenUpdating = "False"

    Dim rng As Range
    Dim i, counter As Integer
    Dim lastrow As Long

    lastrow = ActiveSheet.Range("A1048576").End(xlUp).row

    'Set the range to evaluate.
    Set rng = Range("A2:A" & lastrow)

    'initialize i to 1
    i = 1

    'Loop for a count of 1 to the number of rows in
    'the range to evaluate.
    For counter = 1 To rng.Rows.Count
        'If cell i in the range contains more than 3
        'characters then trim to 3 characters else increment i
        If Len(rng.Cells(i)) > 3 Then
            rng.Cells(i).Value = Left(Cells(i).Value, 3)
            i = i + 1
        Else
            i = i + 1
        End If
    Next

    Application.ScreenUpdating = "True"   
End Sub

1 个答案:

答案 0 :(得分:1)

此代码将公式添加到B列以返回三个字母月份的文本,然后在删除公式之前将值复制到A列。

Sub TrimMonth()

    Dim rDates As Range

    With ThisWorkbook.Worksheets("Sheet1")

        'Set reference to range containing month names.
        Set rDates = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))

        'Add formula one column to right.
        'This will convert the month name to a real date and then format it
        'as three letter month text.
        rDates.Offset(, 1).FormulaR1C1 = _
            "=TEXT(DATEVALUE(""1-"" & RC[-1]),""mmm"")"

        'Replace originals with values from formula.
        rDates.Value = rDates.Offset(, 1).Value

        'Clear formula.
        rDates.Offset(, 1).ClearContents

    End With

End Sub  

或者不添加公式即可完成操作:

Sub TrimMonth()

    Dim rDates As Range
    Dim rCell As Range

    With ThisWorkbook.Worksheets("Sheet1")

        'Set reference to range containing month names.
        Set rDates = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))

        'Convert each cell in range.
        For Each rCell In rDates
            rCell.Value = Format(CDate("1-" & rCell), "mmm")
        Next rCell

    End With

End Sub