我在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
答案 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?)。