Excel 使用宏剪切并粘贴字符串的一部分

Excel 使用宏剪切并粘贴字符串的一部分,excel,excel-2007,vba,Excel,Excel 2007,Vba,如果字符串的第9个字符中有一个-符号,我需要一个宏来剪切和粘贴字符串的一部分,将其从a列粘贴到B列。我在stackoverflow上发现了一些代码,它们将复制/粘贴文本部分,但不会剪切/粘贴。我的数据是这样的 SUBIAIUP-456253 SUBIAIUP-254 以下是我目前掌握的代码: Public Sub LeftSub() Dim cell As Range Dim sourceRange As Range Set sourceRange = Sheet1.Range("A1

如果字符串的第9个字符中有一个-符号,我需要一个宏来剪切和粘贴字符串的一部分,将其从a列粘贴到B列。我在stackoverflow上发现了一些代码,它们将复制/粘贴文本部分,但不会剪切/粘贴。我的数据是这样的

SUBIAIUP-456253
SUBIAIUP-254
以下是我目前掌握的代码:

Public Sub LeftSub()
 Dim cell As Range
 Dim sourceRange As Range

 Set sourceRange = Sheet1.Range("A1:A180")

 For Each cell In sourceRange

     If Mid(cell.Value, 9, 1) = "-" Then

     'this code should cut/paste the value from col A to col B, not copy/paste
     Sheets("Sheet1").Range("B" & cell.Row).Value = Mid(cell.Value, 9, 20)

     End If
  Next
 End Sub
非常感谢您的帮助。

谢谢。

如果希望将粘贴到B列中的值从A列中删除,请使用以下命令:

If Mid(cell.Value, 9, 1) = "-" Then
    cell.Offset(, 1).Value = Mid(cell.Value, 9)
    cell.Value = Left(cell, 8)
End If
If Mid(cell.Value, 9, 1) = "-" Then
    'this code WILL cut/paste the value from col A to col B, not copy/paste
    cell.Cut cell.Offset(, 1)
End If
正如Sid和Brett所指出的,如果我们要从中点获取其余的值,则不需要Mid函数的字符数参数。如果希望破折号位于列B值的开头,请将中点设置为9。如果要忽略它,请将其设置为10

如果要剪切/粘贴从A列到B列的整个值,请使用以下命令:

If Mid(cell.Value, 9, 1) = "-" Then
    cell.Offset(, 1).Value = Mid(cell.Value, 9)
    cell.Value = Left(cell, 8)
End If
If Mid(cell.Value, 9, 1) = "-" Then
    'this code WILL cut/paste the value from col A to col B, not copy/paste
    cell.Cut cell.Offset(, 1)
End If

如果要将粘贴到B列中的值从A列中删除,请使用以下命令:

If Mid(cell.Value, 9, 1) = "-" Then
    cell.Offset(, 1).Value = Mid(cell.Value, 9)
    cell.Value = Left(cell, 8)
End If
If Mid(cell.Value, 9, 1) = "-" Then
    'this code WILL cut/paste the value from col A to col B, not copy/paste
    cell.Cut cell.Offset(, 1)
End If
正如Sid和Brett所指出的,如果我们要从中点获取其余的值,则不需要Mid函数的字符数参数。如果希望破折号位于列B值的开头,请将中点设置为9。如果要忽略它,请将其设置为10

如果要剪切/粘贴从A列到B列的整个值,请使用以下命令:

If Mid(cell.Value, 9, 1) = "-" Then
    cell.Offset(, 1).Value = Mid(cell.Value, 9)
    cell.Value = Left(cell, 8)
End If
If Mid(cell.Value, 9, 1) = "-" Then
    'this code WILL cut/paste the value from col A to col B, not copy/paste
    cell.Cut cell.Offset(, 1)
End If

如果您的数据如上面的示例所示,则不需要VBA。您也可以使用文本到列:)如果您的数据如上面的示例所示,则不需要VBA。您也可以使用文本到列:)+1很好:)您可能希望使用
Mid(cell.Value,10)
而不是
Mid(cell.Value,9,20)
谢谢,先生们。我重构了语句的左侧,没有查看右侧@brettdj:我听说mid$返回一个字符串,而mid则返回一个变量,而且mid$的性能可能会更好。这是真的吗?这正是我需要的。非常感谢。没错,字符串函数比它的变体函数快。Mid也可以用于LHS,不仅仅是RHS(此处不相关,但对其他应用程序有用)+1不错的:)您可能希望使用
Mid(cell.Value,10)
而不是
Mid(cell.Value,9,20)
谢谢,先生们。我重构了语句的左侧,没有查看右侧@brettdj:我听说mid$返回一个字符串,而mid则返回一个变量,而且mid$的性能可能会更好。这是真的吗?这正是我需要的。非常感谢。没错,字符串函数比它的变体函数快。Mid也可用于LHS,不仅仅用于RHS(此处不相关,但适用于其他应用)