首页 > 解决方案 > 基于标准提取数据

问题描述

我有两张纸,“SA”和“SB”。

我正在尝试将期刊从“SA”提取到“SB”。

我正在尝试使用代码中的标准。(稍后这将基于用户从组合框中选择的标准。)

如果 B或J 列中的值为 =“123456789”,我希望将工作表“SA”中的整行(或者最好是填充的最后一列)复制到工作表“SB”中。

在我的代码中,一些行粘贴在同一行的顶部而不是下一行。

Sub test()

    Dim SA As Worksheet
    Dim SB As Worksheet
    
    Set SA = Worksheets("SA")
    Set SB = Worksheets("SB")
    
    Dim DBSLRow As Long
    Dim ResultLRow As Long
    Dim i As Long

    SALRow = SA.Cells(Rows.Count, 1).End(xlUp).Row
    SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row
    
    Debug.Print SALRow
    Debug.Print SBLRow
    
    For i = 1 To SALRow
        If Cells(i, 2) = "123456789" Or Cells(i, 10) = "123456789" Then
            SA.Cells(i, 1).EntireRow.Copy
            SB.Cells(SBLRow, 1).PasteSpecial
            SBLRow = SBLRow + 1
        Else
           
        End If
    Next
    
End Sub

我已阅读其他问题并且无法了解错误。
也许有更好的方法。

标签: excelvba

解决方案


首先,您需要避免不返回错误的类型不匹配,并将单元格用作工作表的属性

If SA.Cells(i, 2) = "123456789" Or SA.Cells(i, 10) = "123456789" Then

通过在“”中取 123456789,你说它是字符串类型的,但你没有在 Cells(i, 2) 中设置属性。您可以检查此单元格的 .Value 或 .Text。如果您不选择属性程序将默认检查属性。总是像下面这样使用

 If SA.Cells(i, 2).Value = 123456789  ' to check value // number type of data /integer/long/double etc

 If SA.Cells(i, 2).Text= "123456789"  ' to check text string // text type of data / String

最好的选择是声明变量并将值设置为喜欢

 dim str_Text as String : str_Text = "123456789" 
 dim lng_Text as Long: lng_Text = 123456789

然后检查条件

 If SA.Cells(i, 2).Text= str_Text 
 If SA.Cells(i, 2).Value= lng_Text 

下一个

 SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1

如果您在 i =1 时没有设置最后一行,那么您将在占用的行中粘贴项目。

并删除 i 的增量,它将在下一步增加。试试下面的代码

Sub test()

Dim SA As Worksheet
Dim SB As Worksheet
Dim str_Condition as String : str_Condition = "123456789"
Set SA = Worksheets("SA")
Set SB = Worksheets("SB")

SALRow = SA.Cells(Rows.Count, 1).End(xlUp).Row
SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1

Debug.Print SALRow
Debug.Print SBLRow

For i = 1 To SALRow
    If SA.Cells(i, 2) = str_Condition  Or SA.Cells(i, 10) = str_Condition  Then
        SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1
        SA.Cells(i, 1).EntireRow.Copy
        SB.Cells(SBLRow, 1).PasteSpecial
    End If
Next i
End Sub

推荐阅读