VBA Excel宏多次复制第一行而不是第二行

时间:2015-03-24 19:43:15

标签: excel vba excel-vba

我需要你的意见。

在工作表1"在库存"中,我有13列数据,大约有300行。我需要将这些数据复制到表2" Low"基于第11栏的价值。

如果第11列小于98%,我需要复制数据。

这是我的宏:

Dim z As Integer

z = 3

For i = 20 To Worksheets("In Stock").TextBox1.Value
If Worksheets("In Stock").Cells(i, 11) < "98" Then GoTo JMP1
GoTo JMP2

JMP1:
Worksheets("Low").Cells(z, 1).Value = Worksheets("In Stock").Cells(20,   1).Value
Worksheets("Low").Cells(z, 2).Value = Worksheets("In Stock").Cells(20, 2).Value
Worksheets("Low").Cells(z, 3).Value = Worksheets("In Stock").Cells(20, 3).Value
Worksheets("Low").Cells(z, 4).Value = Worksheets("In Stock").Cells(20, 4).Value
Worksheets("Low").Cells(z, 5).Value = Worksheets("In Stock").Cells(20, 5).Value
Worksheets("Low").Cells(z, 6).Value = Worksheets("In Stock").Cells(20, 6).Value
Worksheets("Low").Cells(z, 7).Value = Worksheets("In Stock").Cells(20, 7).Value
Worksheets("Low").Cells(z, 8).Value = Worksheets("In Stock").Cells(20, 8).Value
Worksheets("Low").Cells(z, 9).Value = Worksheets("In Stock").Cells(20, 9).Value
Worksheets("Low").Cells(z, 10).Value = Worksheets("In Stock").Cells(20, 10).Value
Worksheets("Low").Cells(z, 11).Value = Worksheets("In Stock").Cells(20, 11).Value
Worksheets("Low").Cells(z, 12).Value = Worksheets("In Stock").Cells(20, 12).Value
Worksheets("Low").Cells(z, 13).Value = Worksheets("In Stock").Cells(20, 13).Value

z = z + 1

JMP2:
Next i
Worksheets("Low").Select

正如您所看到的,它是基于if的简单复制/粘贴,但由于某种原因,宏只复制第一行而不是跳到98%以下的第二行。

此外,不是复制列中数据的完整值 - 我现在只是看到零。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

GoTo通常被认为是现代社会的祸根,应该尽可能避免。对于跟在你身后的人(或者在你需要在6个月内重新访问它的人)来说,代码很难被跟踪。这将使您的代码更具可读性:

Option Explicit
Dim SourceRow As Integer
Dim DestRow as Integer
Dim Col as Integer 

SourceRow = 3

For DestRow = 20 To Worksheets("In Stock").TextBox1.Value
  If Worksheets("In Stock").Cells(DestRow, 11) < 0.98 Then  
    With Worksheets("Low")
      For Col = 1 to 13
        .Cells(SourceRow, Col) = Worksheets("In Stock").Cells(DestRow, Col)
      Next
    End With
    SourceRow = SourceRow + 1
  End If
Next 

Worksheets("Low").Select

正如评论中所提到的,由于您正在寻找一个百分比,因此If应该与0.98进行比较,并且因为它是数字,所以&#39;没有理由把它放在引号"98"中并强制Excel每次都将它从一个字符串转换为一个浮点数。