如何使用VBA在Excel中的所有行前面添加单引号

如何使用VBA在Excel中的所有行前面添加单引号,excel,vba,Excel,Vba,我有一个电子表格,其中包含日期的第一列,我希望文本保持为“May-21”,但形式为字符串。单元格值应该是May-21,但当我尝试将其转换为字符串时,它使用5位数字。如果我将列保留为日期格式,它将自动选择May first,因此即使格式为MMM yy,值也将为5/1/2021,我想将列视为字符串而不是日期。有什么建议吗 以下是我在VBA中尝试的内容: Columns("A:A").Select Selection.NumberFormat = "'[$

我有一个电子表格,其中包含日期的第一列,我希望文本保持为“May-21”,但形式为字符串。单元格值应该是May-21,但当我尝试将其转换为字符串时,它使用5位数字。如果我将列保留为日期格式,它将自动选择May first,因此即使格式为MMM yy,值也将为5/1/2021,我想将列视为字符串而不是日期。有什么建议吗

以下是我在VBA中尝试的内容:

Columns("A:A").Select        
Selection.NumberFormat = "'[$-en-US]mmm-yy;@"

这就是你想要的吗

下面的方法使用
INDEX()
TEXT()
公式一次性转换整个范围。没有循环。要了解更多解释,您可能需要查看

在行动中


注意:如果不想使用VBA,请使用公式
=TEXT(A1,“[$-en-US]mmm-yy;@”)
。把它放在B1单元格,然后向下拖动。最后复制粘贴为值。

创建一个包含月份名称和数字的表,并从月份创建
vlookup
Concat
month和
year
的最后两个数字,您应该在不使用VBA的情况下就可以到达那里<代码>=vlookup(月([date]),表,2,0)&“-”和右(年([date]),2)我可以更改格式,但在格式设置之后,如果您在顶部的值字段中看到它,它仍然会显示日期以及日期、月份和日期。这不适合我。它显示了我的
'May-21
,上面用截图更新了我的帖子,显示了公式栏。您可能需要刷新页面才能看到它。
Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim rng As Range
    Dim sAddr As String

    '~~> Change this to the relevant sheet
    Set ws = Sheet1
    
    With ws
        '~~> Find last row in Col A in input sheet
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        
        Set rng = .Range("A1:A" & lRow)
        sAddr = rng.Address
        
        rng = Evaluate("INDEX(TEXT(" & sAddr & ",""'[$-en-US]mmm-yy;@""),)")
    End With
End Sub