excel VBA中Do While语句的判断错误
答案:3 悬赏:50 手机版
解决时间 2021-03-31 22:43
- 提问者网友:欲望失宠
- 2021-03-31 17:05
excel VBA中Do While语句的判断错误
最佳答案
- 五星知识达人网友:七十二街
- 2021-03-31 18:22
你直接说你想要什么效果就好了。
你这代码太多了,说清楚你想要实现的效果,两三行代码应该可以解决了。追问判断表格1中A列单元格是否有有数据,有就复制到表格2中A列里追答复制到A列的哪个单元格啊?
下面代码是复制到 A1 单元格。
Sub AAA()
Sheets("订单明细").Columns("A").SpecialCells(xlCellTypeConstants).Copy _
Sheets("缓冲状态-优先级管理").Range("A1")
End Sub是不是想下面图片这样复制A列所有有数据的单元格?
追问比这个还简单些,我上图吧
数据从A4开始,先判断A列单元格是否有数据,
然后判断两个条件:1,M列(答复交期)为是。
2,K列(已入库)不为是。
然后将筛选出来的数据复制到“缓冲状态-优先级管理”当中,也是从A4开始,粘贴。
追答只是要 A 列的数据而已吗?
下面两段代码, AAA 为按你原来思路写的。
BBB 为数组的方式,速度会比 AAA 快。基本上瞬间可以完成。
Sub AAA()
I = 4
J = 4
Do While Worksheets("订单明细").Cells(I, 1).Value <> ""
If Worksheets("订单明细").Range("M" & I) = "是" And Worksheets("订单明细").Range("K" & I) <> "是" Then
Worksheets("缓冲状态-优先级管理").Range("A" & J) = Worksheets("订单明细").Range("A" & I)
J = J + 1
End If
I = I + 1
Loop
End SubSub BBB()
Dim Ar
Dim Br
Dim I As Long
Dim N As Long
Ar = Worksheets("订单明细").UsedRange
ReDim Br(1 To UBound(Ar), 1 To 1)
For I = 4 To UBound(Ar)
' A 列不为空 K 列不为 "是" M 列为 "是"
If Ar(I, 1) <> "" And Ar(I, 11) <> "是" And Ar(I, 13) = "是" Then
Br(N, 1) = Ar(I, 1)
N = N + 1
End If
Next
Worksheets("缓冲状态-优先级管理").Range("A4").Resize(N) = Br
End Sub追问万分感谢!!
第一种完全正确,只是为是的是H列,不是M列,可能图片不清楚。
但是第二种运行到Br(N,1)=Ar(I,1)时显示下标越界,请问是怎么回事,如果我不仅要A列数据,而是要A~K列的所有数据呢?追答额 不是你说的 M列 和K列吗?
(数据从A4开始,先判断A列单元格是否有数据,
然后判断两个条件:1,M列(答复交期)为是。
2,K列(已入库)不为是。
然后将筛选出来的数据复制到“缓冲状态-优先级管理”当中,也是从A4开始,粘贴。)
Sub AAA()
I = 4
J = 4
With Worksheets("订单明细")
Do While .Cells(I, 1).Value <> ""
If .Range("M" & I) = "是" And .Range("K" & I) <> "是" Then '反正这里就是写条件啦,自己修改就好了
.Range("A" & I & ":K" & I).Copy Worksheets("缓冲状态-优先级管理").Range("A" & J)
J = J + 1
End If
I = I + 1
Loop
End Sub
Sub BBB()
Dim Ar
Dim Br
Dim I As Long
Dim N As Long
Ar = Worksheets("订单明细").UsedRange
ReDim Br(1 To UBound(Ar), 1 To 11)
For I = 4 To UBound(Ar)
' A 列不为空 K 列不为 "是" M 列为 "是"
If Ar(I, 1) <> "" And Ar(I, 11) <> "是" And Ar(I, 13) = "是" Then
N = N + 1
For J = 1 To 11
Br(N, J) = Ar(I, J)
Next
End If
Next
Worksheets("缓冲状态-优先级管理").Range("A4").Resize(N, 11) = Br
End Sub
你这代码太多了,说清楚你想要实现的效果,两三行代码应该可以解决了。追问判断表格1中A列单元格是否有有数据,有就复制到表格2中A列里追答复制到A列的哪个单元格啊?
下面代码是复制到 A1 单元格。
Sub AAA()
Sheets("订单明细").Columns("A").SpecialCells(xlCellTypeConstants).Copy _
Sheets("缓冲状态-优先级管理").Range("A1")
End Sub是不是想下面图片这样复制A列所有有数据的单元格?
追问比这个还简单些,我上图吧
数据从A4开始,先判断A列单元格是否有数据,
然后判断两个条件:1,M列(答复交期)为是。
2,K列(已入库)不为是。
然后将筛选出来的数据复制到“缓冲状态-优先级管理”当中,也是从A4开始,粘贴。
追答只是要 A 列的数据而已吗?
下面两段代码, AAA 为按你原来思路写的。
BBB 为数组的方式,速度会比 AAA 快。基本上瞬间可以完成。
Sub AAA()
I = 4
J = 4
Do While Worksheets("订单明细").Cells(I, 1).Value <> ""
If Worksheets("订单明细").Range("M" & I) = "是" And Worksheets("订单明细").Range("K" & I) <> "是" Then
Worksheets("缓冲状态-优先级管理").Range("A" & J) = Worksheets("订单明细").Range("A" & I)
J = J + 1
End If
I = I + 1
Loop
End SubSub BBB()
Dim Ar
Dim Br
Dim I As Long
Dim N As Long
Ar = Worksheets("订单明细").UsedRange
ReDim Br(1 To UBound(Ar), 1 To 1)
For I = 4 To UBound(Ar)
' A 列不为空 K 列不为 "是" M 列为 "是"
If Ar(I, 1) <> "" And Ar(I, 11) <> "是" And Ar(I, 13) = "是" Then
Br(N, 1) = Ar(I, 1)
N = N + 1
End If
Next
Worksheets("缓冲状态-优先级管理").Range("A4").Resize(N) = Br
End Sub追问万分感谢!!
第一种完全正确,只是为是的是H列,不是M列,可能图片不清楚。
但是第二种运行到Br(N,1)=Ar(I,1)时显示下标越界,请问是怎么回事,如果我不仅要A列数据,而是要A~K列的所有数据呢?追答额 不是你说的 M列 和K列吗?
(数据从A4开始,先判断A列单元格是否有数据,
然后判断两个条件:1,M列(答复交期)为是。
2,K列(已入库)不为是。
然后将筛选出来的数据复制到“缓冲状态-优先级管理”当中,也是从A4开始,粘贴。)
Sub AAA()
I = 4
J = 4
With Worksheets("订单明细")
Do While .Cells(I, 1).Value <> ""
If .Range("M" & I) = "是" And .Range("K" & I) <> "是" Then '反正这里就是写条件啦,自己修改就好了
.Range("A" & I & ":K" & I).Copy Worksheets("缓冲状态-优先级管理").Range("A" & J)
J = J + 1
End If
I = I + 1
Loop
End Sub
Sub BBB()
Dim Ar
Dim Br
Dim I As Long
Dim N As Long
Ar = Worksheets("订单明细").UsedRange
ReDim Br(1 To UBound(Ar), 1 To 11)
For I = 4 To UBound(Ar)
' A 列不为空 K 列不为 "是" M 列为 "是"
If Ar(I, 1) <> "" And Ar(I, 11) <> "是" And Ar(I, 13) = "是" Then
N = N + 1
For J = 1 To 11
Br(N, J) = Ar(I, J)
Next
End If
Next
Worksheets("缓冲状态-优先级管理").Range("A4").Resize(N, 11) = Br
End Sub
全部回答
- 1楼网友:动情书生
- 2021-03-31 20:12
你这个进度条控制的R,如果它是在r = R +1后插入进度条
- 2楼网友:孤独入客枕
- 2021-03-31 19:03
Do While Sheets("订单明细").cell(1, i) <> ""
换成
Do While Sheets("订单明细").Cells(1, i) <> ""
换成
Do While Sheets("订单明细").Cells(1, i) <> ""
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯