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

我有在Excel中将文本值转换为数值的问题。 我有Excel工作表,有一些文本值,我想将这些文本值使用VBA或macros转换成数字。 我总是想要改变的范围从S2开始到V2列,并且行数总是dynamic的。 有一天,我可以有10行,但第二天,我可以有20000行。 但是,我只想运行macros,当汇总表被激活换句话说,当汇总表单击我想运行macros。 请帮忙。 谢谢

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 

循环遍历应用文本到列,固定宽度的列。 如果您希望在“汇总表被激活发生这种情况,请使用该工作表的代码表的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是快速的; 如此之快以至于你根本不会注意到它的运作。 但是,如果您只需要每天进行一次这样的操作,那么您可能需要logging上次处理的date,以便每天(每次激活“摘要”工作表时)都不要多次运行它。

Detail工作表上完全限定任何单元格范围引用是非常重要的。 您是“ 摘要”工作表代码表上的一个私有子项,任何非限定范围引用将默认为摘要工作表,而不是详细信息工作表(有关详细信息,请参阅.Cells定义时必需的.Range中的 。