从字母数字单元格切入字母,粘贴到另一个单元格

时间:2016-01-15 20:03:00

标签: excel excel-vba vba

如何设置一个宏来剥离第一列中##### XX的字母,并将它们放入L列的同一行?谢谢!

3 个答案:

答案 0 :(得分:0)

假设您正在处理第一张工作表,并且在保留前5个字符的同时始终剥离最后两个字符,则以下代码将起作用:

Public Sub StripOff()
  Dim iRow as Integer
  iRow = 2       'Assuming row 1 is headers, else make this 1
  While Sheets(1).Range("I" + Cstr(iRow)).Value <> ""
    Sheets(1).Range("L" + CStr(iRow)).Value = Right(Sheets(1).Range("I" + Cstr(iRow)).Value, 2)
    Sheets(1).Range("I" + Cstr(iRow)).Value = Left(Sheets(1).Range("I" + Cstr(iRow)).Value, 5)
    iRow = iRow + 1
  Wend
End Sub

答案 1 :(得分:0)

我从您的问题中理解的操作词是剪切剥离。在我看来,这意味着最后两个字母从第I列永久删除并放在L列中。

Sub cut2right()
    Dim v As Long, vPFXS As Variant, vSFXS As Variant

    With Worksheets("Sheet6")
        vPFXS = .Range(.Cells(2, "I"), .Cells(Rows.Count, "I").End(xlUp))
        ReDim vSFXS(1 To UBound(vPFXS), 1 To 1)
        For v = LBound(vPFXS, 1) To UBound(vPFXS, 1)
            If Len(vPFXS(v, 1)) > 1 Then
                vSFXS(v, 1) = Right(vPFXS(v, 1), 2)
                vPFXS(v, 1) = Left(vPFXS(v, 1), Len(vPFXS(v, 1)) - 2)
            End If
        Next v
        .Cells(2, "I").Resize(UBound(vPFXS, 1), 1) = vPFXS
        .Cells(2, "L").Resize(UBound(vPFXS, 1), 1) = vSFXS
    End With
End Sub

使用变量数组应该加速处理具有可变长度字符串值的许多单元格。如果它们的长度都相同,那么手动运行具有固定长度的Text-to-Columns命令到未使用的列,然后将结果复制并粘贴到相应的列就可以了。

答案 2 :(得分:0)

您可以使用VBA Val函数从字符串中获取前导数字字符。要在工作表上使用此功能,您需要在标准VBA模块中创建用户定义函数(UDF)。

Function LeadingNumbers(Str As String) As Double
    LeadingNumbers = Val(Str)
End Function

只需在单元格中输入函数并引用包含所需字符串的单元格即可清理&#34;。