我有一些数据,我想基本上减少到前12个数字,无论它有多少。我目前正在这样做的方式是从列C中获取数字,在列GI中有一个公式=左(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位数字)
答案 0 :(得分:2)
Fixed Width
Finish
这是输出
答案 1 :(得分:1)
如果我理解正确,你想要用同一单元格中任何内容的前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
结果:
答案 2 :(得分:1)
其他答案也是有效的解决方案,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后更改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 Sub