使用Left而不复制;糊

时间:2014-11-24 05:23:48

标签: excel-vba string-formatting vba excel

我有一些数据,我想基本上减少到前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位数字)

3 个答案:

答案 0 :(得分:2)

最快的方式!无需VBA。

  1. 在Col A之后插入一个空白列。
  2. 突出显示Col A.
  3. 点击数据|文字到列
  4. 选择Fixed Width
  5. 使用12个字符后的图像设置字段,然后点击Finish
  6. 删除B列(我们插入的那个。)
  7. enter image description here

    这是输出

    enter image description here

答案 1 :(得分:1)

如果我理解正确,你想要用同一单元格中任何内容的前12位替换C列中单元格的内容。

从看起来像这样的数据开始:

enter image description here


运行此:

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

结果:

enter image description here

答案 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