用excel VBA写的FOR循环代码,运行未响应

是一组商品信息,希望通过以下代码将信息转换为布尔矩阵。实验的时候10条数据还行,一旦真正用到实际的上千条数据中时,电脑就未响应了,希望有高人帮忙改进一下代码呀~Subsc... 是一组商品信息,希望通过以下代码将信息转换为布尔矩阵。实验的时候10条数据还行,一旦真正用到实际的上千条数据中时,电脑就未响应了,希望有高人帮忙改进一下代码呀~

Sub scbejz()
Dim A As Range, B As Range, D As Range
Dim i As Integer
Dim j As Integer
Dim k As Integer
Set A = Sheets("sheet1").[F:AK].SpecialCells(xlCellTypeConstants, 23)
For i = 2 To 10000
For j = 6 To 100
For k = 6 To 100
For Each D In A
If Sheets(1).Cells(i, j).Value = Sheets(4).Cells(1, k).Value Then
Sheets(4).Cells(i, k).Value = "1"
End If
Next
Next k
Next j
Next i
End Sub
展开
 我来答
绿衣人敲门
2015-10-20 · 知道合伙人软件行家
绿衣人敲门
知道合伙人软件行家
采纳数:18765 获赞数:63774
毕业于西北大学计算机网络技术专业,现在在西安电力学院进行网络推广维护工作!

向TA提问 私信TA
展开全部

常用的for循环语句有两种,一个是for ……next结构;一个是For each……next结构。这两种结构主要都是针对多数据循环遍历的时候用到的。那么下面我将分别来介绍一下两种循环结构的具体用法,首先还是要打开VBA编辑器

1.for……next结构

  这个结构一般是这样的:

for i=初始值 to 结束值 step 步长值

    ……

next

具体解释一下,初始值指的是循环开始的值,结束值指的是循环结束的值,实质上就是i值得一个判断,如果i值在起始值和结束值之间,那么进入循环语句,然后i值每运行到next语句后会自动加一个步长值,直至i值超出了初始值到结束值这个范围,循环才会结束。这里要说明一下”step 步长值“往往是省略掉的,省略掉的话,步长取默认值为1。下面将以一段小实例来具体说明这个结构的用法:

实例:在sheet1工作表中一次输出1到10这个数,显示在第一列中。

程序:

Sub 循环语句()

Dim i As Integer

For i = 1 To 10

  Cells(i, 1) = i

Next

End Sub


步长为+2的for循环结构

 这里我们看一下一个示例程序吧

程序:

Sub 循环语句()

Dim i As Integer

For i = 1 To 10 Step 2

    Cells(i, 1) = i

Next

End Sub


步长为-1的for循环结构

   这里同样的我们来看一下当step值为-1的时候,程序又会是如何的呢?

看下面实例程序:

Sub 循环语句()

Dim i As Integer

For i = 10 To 1 Step -1

    Cells(i, 1) = i

Next

End Sub


2.for each……next结构

   具体结构:

For each 对象变量 in 对象集合

   ……

next

具体解释一下,这里我们看到和上一个结构的而不同的是上面一种结构主要是数值变量,而这种结构是对象变量。什么意思呢?each……in指的是在这个对象集合里面,一次将每一个对象都遍历一边。同样的道理,执行到next后对象自动指到下一个。具体我们来看一下下面的一个实例吧

实例:给一个数据区域内的所有单元格赋值,从1开始。

分析:显然数据区域就是一个对象集合,单元格就是这个集合里面的对象

程序:

Sub 循环语句()

Dim i As Integer

For Each c In Range("a1:c5")

  i = i + 1

  c.Value = i

Next

End Sub


循环语句运用起来是很灵活的,上面只介绍了两种循环语句的基本用法,循环语句是可以套用的,这个就需要结合具体情况来灵活运用了

下面我们用多循环语句嵌套来实现乘法口诀:

程序:

Sub 循环语句()

Dim i, j As Integer

For i = 1 To 9

  For j = 1 To i

    Cells(i, j) = i & "*" & j & "=" & i * j

 Next

Next

End Sub

mayfor000
2014-10-08 · TA获得超过4067个赞
知道大有可为答主
回答量:6970
采纳率:30%
帮助的人:1368万
展开全部
开始加上Application.ScreenUpdating = False:Application.EnableEvents = False
结尾加上Application.EnableEvents = True:Application.ScreenUpdating = True
速度至少提升3倍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-08
展开全部
不是不响应,而是忙着执行呢,给它足够的时间,会结束的,提高效率的话把它们写入数组,配合屏幕禁止刷新,这样应该会快很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wtx274321
2014-10-08 · TA获得超过1.8万个赞
知道大有可为答主
回答量:2343
采纳率:57%
帮助的人:953万
展开全部
不要直接引用单元格,要先将需要引用的单元格赋值到数组在数组中操作。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skyzxh

2014-10-08 · 知道合伙人软件行家
skyzxh
知道合伙人软件行家
采纳数:2623 获赞数:8343
毕业于中科院,硕士,30年工程从业经验。现任公司技术负责。

向TA提问 私信TA
展开全部
肯定死掉的吧?你自己算一下要做多少次循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式