如何使用excel中的vba将文本转换为数字格式

时间:2017-03-14 21:24:15

标签: excel vba excel-vba

我在Excel中将文本值转换为数值时遇到问题。我有excel表,有一些文本值,我想使用VBA或宏将这些文本值转换为数字。我一直想要改变的范围从s2到v2列开始,行数总是动态的。有一天我可以有10行,但第二天我可以有20000行。但是,我只想在激活摘要表时运行宏,换句话说,单击摘要表时我想运行宏。请帮忙。感谢

Sub TextToNumber()
'
' TextToNumber Macro
'

'    

        Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Detail")
Range("AJ1").Select
Selection.Copy

Set StartCell = Range("S2:Y9")

'Find Last Row and Column
  LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
  LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

'Select Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select

  Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False

        Sheets("Summary").Select
End Sub

1 个答案:

答案 0 :(得分:3)

循环显示应用Text-To-Columns的列,每个列固定宽度。如果您希望在激活摘要表时发生,那么请使用该工作表的代码表的Worksheet_Activate事件子。

在摘要工作表的代码表中(即右键单击名称选项卡,然后查看代码)

Option Explicit

Private Sub Worksheet_Activate()
    Dim c As Long
    On Error Resume Next   '<~~ necessary in case there are no values to parse
    For c = 19 To 25       '<~~ from column S to column Y
        With Worksheets("Detail")
            With .Range(.Cells(2, c), .Cells(.Rows.Count, c).End(xlUp))
                .TextToColumns Destination:=.Cells(1, 1), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
            End With
        End With
    Next c
End Sub

TextToColumns很快;太快了,你可能根本没有注意到它在运行。但是,如果您每天只需要执行一次,那么您可能需要记录上次处理的日期,这样您就不会每天运行几次(每次激活摘要工作表时)。

完全限定详细信息工作表上的任何单元格范围引用非常重要非常。您是摘要工作表代码表中的私有子,任何非限定范围引用都将默认为摘要工作表,而不是详细信息工作表(有关详细信息,请参阅Is the . in .Range necessary when defined by .Cells?)。