我需要你的意见。
在工作表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%以下的第二行。
此外,不是复制列中数据的完整值 - 我现在只是看到零。
非常感谢你的帮助。
答案 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每次都将它从一个字符串转换为一个浮点数。