将单元格移动到满足条件的特定工作表

时间:2019-02-07 18:09:41

标签: excel vba

我想创建一个VBA,将单元格的行移动到特定的工作表中。基本上,所有数据都放在一个工作表中,并将所有行复制到它所属的工作表中。

Screenshot of Data

标识符是发票编号中连字符前面的前两位数字。

例如,

每个发票编号以“ 1-”开头的行都将粘贴到工作表2

发票“ 3-”将粘贴到工作表3 ...等

我能够找到一些行将可用的代码,但是我很难找到正确的代码来读取连字符前的数字。

Private Sub CommandButton1_Click()
a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To a

If Worksheets("Sheet1").Cells(i, 1).Value = "1-" Then

    Worksheets("Sheet1").Rows(i).Copy
    Worksheets("Sheet2").Activate
    b = Worksheets("Sheet2").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("Sheet1").Activate

End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select
End Sub

大约有16种不同的发票编号标识符,因此我将有16种不同的工作表也将粘贴它。

3 个答案:

答案 0 :(得分:0)

定义此:

Dim dashpos As Long

如果我输入的信息有误,请先添加此行,然后再根据您的数据进行复制。这将使数据位于-的左侧,您可以将其放在所需的工作表中。将提取左侧的数字并将其放在第4列中,然后您可以在此处进行比较。

dashpos = InStr(1, Cells(i, 1), "-")
Cells(I, 4).Value = Left(Cells(i, 1), dashpos - 1)

答案 1 :(得分:0)

基于Snehil所说的内容,尝试使用此方法:

Private Sub CommandButton1_Click()
a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Dim dashpos As Long

For i = 2 To a

dashpos = InStr(1, Cells(i, 1), "-")
Cells(i, 4).Value = Left(Cells(i, 1), dashpos - 1)

If Worksheets("Sheet1").Cells(i, 4).Value = "1" Then

    Worksheets("Sheet1").Rows(i).Copy
    Worksheets("Sheet2").Activate
    b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Sheet2").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("Sheet1").Activate

End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select
End Sub

我认为您在定义“ b”时出错,请参见上面的建议。

答案 2 :(得分:-1)

您是否考虑过将其变成表格,然后仅使用高级查询来移动数据?有必要为此使用VBA吗?