我正在尝试通过循环将特定数据从一张纸移动到另一张纸。我需要宏来查看电子邮件,然后剪切这些行的所有数据并将其粘贴到下一个选项卡中。我有以下代码,但是无法识别我的.Value =“ @”。如果我这样做.Value =“”然后它将识别所有空白单元格。请帮忙,我知道这可能超级简单。
Private Sub CommandButton1_Click()
a = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If Worksheets("Master").Cells(i, 12).Value = "@" Then
Worksheets("Master").Rows(i).Cut
Worksheets("Email").Activate
b = Worksheets("Email").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Email").Cells(b + 1, 1).Select
ActiveSheet.Paste
Worksheets("Master").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Master").Cells(1,1).Select
End Sub
答案 0 :(得分:0)
好吧,这不起作用的原因是因为您正在询问Cells(i,12)
的值是否等于@
,但是我假设您正在询问它是否包含字符@
。为此,您可以使用like
而不是=
,并在要比较的字符串中添加通配符(*
)。因此,通配符的作用是说任何字符都可以位于指定字符的另一侧,并将其视为匹配项。例如,@*
将匹配以@
开头的任何内容,而*@
将匹配以@
结尾的所有内容。通过组合它们,您将获得*@*
,它与包含@
的任何内容匹配。
还要注意,您可以通过直接使用对象而不是激活它们来将其中的大部分折叠成一行。
您还应该养成使用Option Explicit
并调暗变量的习惯,这样可以防止您使用未初始化的变量,这有助于防止较长代码段中的错误。
我在末尾添加了一些代码,该代码删除了主工作表使用范围内的所有空白单元格。这将使所有内容向上移动,因此,除非您关心的所有内容都位于中间没有空单元格的块中,否则我将其注释掉。但是,如果您选择使用它,确实可以帮助精简主列表。
Option Explicit
Private Sub CommandButton1_Click()
Dim A as Long
Dim i as Long
A = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row
Application.CutCopyMode = False
For i = 2 To A
If Worksheets("Master").Cells(i, 12).Value Like "*@*" Then
Worksheets("Master").Rows(i).Copy Destination:= Worksheets("Email").Cells(Worksheets("Email").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
Worksheets("Master").Rows(i).Clear
End If
Next
Worksheets("Master").UsedRange.SpecialCells(xlCelltypeBlanks).Delete shift:=xlShiftUp
Application.CutCopyMode = True
End Sub