ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: tsgnhj

[求助] 两个for循环和两个if套嵌,程序一直调试不过,急,请高手帮忙。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-27 13:56 | 显示全部楼层
本帖最后由 micch 于 2018-12-27 18:01 编辑

看了楼主的标注,实在惭愧,我这学习态度明显不够认真,学习一下

  1. Sub test()
  2.     Dim i%, k%, m%, n%
  3.     ar = Sheet2.UsedRange '=========替换内容表存入数组
  4.     arr = Sheet1.[a1].CurrentRegion '====销售明细表原内容存入数组
  5.     ReDim brr(999, 1 To UBound(arr, 2)) '定义数组存放替换结果,999选足够大数字
  6.     For i = 2 To UBound(arr) '========对明细表每一行内容循环
  7.     For k = 1 To UBound(ar) '========明细表每一行内容与替换内容比对
  8.     '================因为不确定数据是否顺序排列所以全部循环比对一次
  9.         If arr(i, 1) = ar(k, 1) And arr(i, 3) = ar(k, 2) Then '===如果日期,品名一致
  10.         For m = 1 To 5 '======brr增加两行数据,一行为原数据,一行为新客户
  11.             brr(n, m) = arr(i, m): brr(n + 1, m) = arr(i, m)
  12.         Next
  13.         brr(n + 1, 2) = "新客户": brr(n + 1, 5) = ar(k, 4) '新客户B,E列赋值
  14.         If ar(k, 3) >= arr(i, 4) Then '=============数量发生变化
  15.             brr(n, 4) = 0
  16.             brr(n + 1, 4) = arr(i, 4)
  17.             ar(k, 3) = ar(k, 3) - arr(i, 4) '=========替换表当前行数量为剩余数量
  18.         Else
  19.             brr(n, 4) = arr(i, 4) - ar(k, 3)
  20.             brr(n + 1, 4) = ar(k, 3)
  21.             ar(k, 2) = "" '==============替换表当前行替换完毕,不再参与比对
  22.         End If
  23.                  n = n + 2: GoTo 1
  24.         End If
  25.     Next k
  26.         For m = 1 To 5: brr(n, m) = arr(i, m): Next '比对无替换,原明细直接赋值结果数组
  27.         n = n + 1
  28. 1
  29.     Next i
  30.     For i = 0 To n: brr(i, 6) = brr(i, 4) * brr(i, 5): Next '============金额列赋值
  31.     Sheet1.[a1].End(4).Offset(3).Resize(n, 6) = brr '======结果位置暂定为源表下方
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-12-27 13:59 | 显示全部楼层
if判断结束退出用goto语句,只会数组循环,字典不熟练。

得到结果是覆盖源文件,还是生成新表,或者放其他位置,修改最后一行赋值语句就行

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-27 17:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
micch 发表于 2018-12-27 13:59
if判断结束退出用goto语句,只会数组循环,字典不熟练。

得到结果是覆盖源文件,还是生成新表,或者放其 ...

谢谢,之前没想到能用goto跳出去,又长知识了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-28 11:11 | 显示全部楼层
micch 发表于 2018-12-27 13:56
看了楼主的标注,实在惭愧,我这学习态度明显不够认真,学习一下

十分感谢!

TA的精华主题

TA的得分主题

发表于 2018-12-29 15:33 | 显示全部楼层
本帖最后由 758920075 于 2018-12-29 15:47 编辑
tsgnhj 发表于 2018-12-27 13:37
不写注释怕以后我自己都忘。

谢楼主回复哈哈,想请教楼主一个问题
我也在试着弄楼主这个问题,写的时候发现一个问题
If Sheets(1).Cells(h, l + 1).Value < 0 Then
  Sheets(1).Cells(h, l + 1).Value = 0

then以后换行和不换行是不一样的
  If Sheets(1).Cells(h, l + 1).Value < 0 Then Sheets(1).Cells(h, l + 1).Value = 0具体有个啥子区别,谢谢楼主了


这样就对的

这样就对的

这样会报错,endif没有if块

这样会报错,endif没有if块

TA的精华主题

TA的得分主题

发表于 2018-12-29 17:49 | 显示全部楼层
758920075 发表于 2018-12-29 15:33
谢楼主回复哈哈,想请教楼主一个问题
我也在试着弄楼主这个问题,写的时候发现一个问题
  If Sheets(1) ...

if的条件和结果代码都在一行的话,不用写endif

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-29 19:22 | 显示全部楼层
758920075 发表于 2018-12-29 15:33
谢楼主回复哈哈,想请教楼主一个问题
我也在试着弄楼主这个问题,写的时候发现一个问题
  If Sheets(1) ...

16楼说的对,then之后换行,需要用end if ,不换行,就不需要用。

TA的精华主题

TA的得分主题

发表于 2019-1-5 17:50 | 显示全部楼层
本帖最后由 758920075 于 2019-1-5 21:53 编辑

回去研究研究

TA的精华主题

TA的得分主题

发表于 2019-1-6 19:56 | 显示全部楼层
micch 发表于 2018-12-27 13:56
看了楼主的标注,实在惭愧,我这学习态度明显不够认真,学习一下

借楼请教一下,谢楼主
m,同学:
arr = Sheet1.[a1].CurrentRegion '====销售明细表原内容存入数组
  ReDim brr(999, 1 To UBound(arr, 2)) '定义数组存放替换结果,999选足够大数字

UBound(arr, 2)中2 是代表的arr数组中的第二维度对吧,但是arr是一个区域,这个区域的第二维度是什么呢?
他的行号,或是列号?
谢m同学了

TA的精华主题

TA的得分主题

发表于 2019-1-6 20:07 | 显示全部楼层
楼主的问题是不是,一边插入新列,一边用单元格地址进行循环,每次插入的时候,之后行的行号就变化了,却还是以此循环导致的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 22:54 , Processed in 0.044524 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表