我有一些数据,我想要被削减到最初的12个数字,不管有多少。我目前的做法是从C列取数字,在G列中,我有一个公式=Left(C3,12),然后向下拖动,使其与C中的范围相匹配,然后运行一个宏,如下所示:
Sub Macro6()
Range("G3:G7").Select
Selection.Copy
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub这是可行的,但我必须不断更新范围,它有点笨重。有谁知道更好的方法来完成同样的事情吗?(基本上使C中的值成为前12位数字)
发布于 2014-11-24 05:46:55
如果我没听错的话,你想用同一个单元格的前12位数字替换C列中单元格的内容。
从如下所示的数据开始:

运行以下命令:
Sub keep12()
Dim wks As Worksheet
Set wks = Worksheets("Sheet1")
Dim rng As Range
Set rng = wks.Range("C3:C" & wks.Range("C" & wks.Cells.Rows.Count).End(xlUp).Row)
For Each cell In rng
cell.Value = Left(cell.Text, 12)
Next cell
End Sub结果:

发布于 2014-11-24 06:52:34
最快的路!不需要VBA。
Fixed WidthFinish

这是输出

发布于 2014-11-24 07:43:20
其他答案也是这方面的有效解决方案,Excel公式答案是实现它的最有效方法@Siddharth Rout。我只是简单地添加了另一种方法,在这种情况下,可以更直接地满足OP的具体需求,将数据从C列复制到G列。
Sub LeftFilterAll()
Dim sheetName As String
Dim LastRow As Long
sheetName = "Sheet1"
LastRow = Sheets(sheetName).Range("C" & Rows.Count).End(xlUp).row ' Count the last row in Column C
For row = 2 To LastRow
'Left 12 From C to G
Sheets(sheetName).Cells(row, 7).Value = Left(Sheets(sheetName).Cells(row, 3).Text, 12)
Next row
End Sub沿着这条路走下去,您可能希望这样做,这样它就可以简单地更新G列中的值,而不是全部替换它们,如果您发现正在为1或2个新记录一遍又一遍地运行这些值,而不是整个组,则得到G列的最后一行并从该行号开始。所以您只需要更新下面的内容。如果您计划在输入C值后更改它们,这是没有好处的,因为它们只会被处理一次。
Sub LeftFilterUpdate()
Dim sheetName As String
LastCRow = Sheets(sheetName).Range("C" & Rows.Count).End(xlUp).row ' Count the last row in Column C
LastGRow = Sheets(sheetName).Range("G" & Rows.Count).End(xlUp).row ' Count the last row in Column G
For row = LastGRow To LastCRow
'Left 12 From C to G
Sheets(sheetName).Cells(row, 7).Value = Left(Sheets(sheetName).Cells(row, 3).Text, 12)
Next row
End Subhttps://stackoverflow.com/questions/27098341
复制相似问题