如果VBA宏中的单元格中有一位数字,如何输入字符?

时间:2017-09-27 07:10:10

标签: excel vba excel-vba

我想问一下,如果单元格中已包含数字,如何将字符0置于单元格中。 为了澄清我的意思,如果单元格中的数字是5,我想在数字5之前加上0,以得到结果05

据我所知,单元格格式应为TEXT以避免自动Excel校正。但是,由于细胞中有几个不同的特征,这个问题是具体的。在某些时候,我在同一列中的单元格中有不同的字符(123AVARIX等等。)。

例如:我想选择K列,找到一位数(123-9)的数字字符并粘贴{ {1}}之前有两个空格数字,例如00102,...

当然,用宏。我知道如何将Text格式化,但不知道如何管理整个宏函数来选择列K,将整列格式化为文本,在列中找到一个数字并在其前面粘贴03。 / p>

有人知道怎么做吗? 非常感谢提前。

1 个答案:

答案 0 :(得分:1)

有两种解决方案:

  1. 格式化数字
  2. 将数字转换为文本并格式化
  3. 1。格式化数字

    此解决方案的优点是数字仍然是数字(不是文本),但使用前导零进行格式化。因此,您仍然可以像以前一样使用这些数字进行计算。

    Public Sub ChangeNumberFormat()
        ThisWorkbook.Worksheets("YourDesiredSheetName").Columns("K").NumberFormat = "00"
        'this will keep them numbers but only change the format of them
    End Sub
    

    请注意,您不需要使用VBA执行此操作,只需为列K设置用户定义的单元格格式00(使用 Ctrl + 打开格式单元格1 )。

    2。将数字转换为文本并格式化

    如果您确实需要将它们转换为文本,这将是一种可能的解决方案。但我真的不建议这样做,因为你不能用这些“数字”计算,因为它们被转换为文本。

    诀窍是首先使用numberformat格式化数字,然后将其转换为文本(请参阅代码中的注释)。

    Option Explicit 'force variable declaring
    
    Public Sub FixLeadingZerosInText()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets("YourDesiredSheetName") '<-- change your sheet name here
    
        Dim lRow As Long
        lRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row  'find last used row in column K
    
        Dim iCell As Range
        For Each iCell In ws.Range("K1:K" & lRow)          'loop from row 1 to last used in column K
            If iCell.Value < 10 And iCell.Value > -10 Then 'check if it is a one digit number
                Dim tmpText As String
                tmpText = Format(iCell.Value, "00")        'format the one digit number
                iCell.NumberFormat = "@"                   'convert number to text
                iCell.Value = tmpText                      're-write formatted number
            End If
            iCell.NumberFormat = "@" 'make all other numbers in column K formatted as text too
        Next iCell
    End Sub