ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 循环+判断

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-10 21:12 | 显示全部楼层 |阅读模式
为了解决一个问题,看了近两个星期的VBA 写了一个星期代码。未能如愿。
恳请各位老师百忙中抽时间,不吝赐教。谢谢!
ULYQ)88DPS33W0R3{9}3V0Y.png
Book1.zip (41.84 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-10 21:17 | 显示全部楼层
1、当AK7="A"时,"BK7"="BK384"(BK列最小值),"CC7"= "1";当"BK7"="BK385"(BK最大值),"CD7" = "1";当BK385<"BK7"<BK385;"CE7" = "1"

TA的精华主题

TA的得分主题

发表于 2019-10-10 22:43 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-10 22:44 编辑

不知是否符合要求?


Sub t20191010()
        Set sh = Sheets("sheet1")
        sh.[cc2:df60000].ClearContents
        ar = [{63,67,71,72,73,75,76,77,79}]
        For j = 7 To 377 Step 10
               If sh.Cells(j, 37).value = "A" Then
                For Each i In ar
                        n = n + 1
                        If sh.Cells(j, i).Value = sh.Cells(384, i).Value Then sh.Cells(j, 80 + (3 * n - 2)) = 1
                        If sh.Cells(j, i).Value = sh.Cells(385, i).Value Then sh.Cells(j, 80 + (3 * n - 1)) = 1
                        If sh.Cells(j, i).Value > sh.Cells(384, i).Value And sh.Cells(j, i).Value < sh.Cells(385, i).Value Then sh.Cells(j, 80 + 3 * n) = 1
                Next i
                n = 0
                End If
        Next j

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 09:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢网海遨游老师!
这么快就有回应,感动ing.虽然看不懂,但感觉是这个样的,很厉害。
我验证一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 10:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
网海遨游 发表于 2019-10-10 22:43
不知是否符合要求?

我把代码放进去,没有反应。
麻烦网海遨游老师再帮忙看看。
另补充说明:
当AK7="A"时,
当"BK7"="BK384"(BK列最小值),"CC7"= "1";
     当"BK7"="BK385"(BK列最大值),"CD7" = "1";
     当BK385<"BK7"<BK385;"CE7" = "1"
当"BO7"="BO384"(BO列最小值),"CF7"= "1";
     当"BO7"="BO385"(BO列最大值),"CG7" = "1";
     当BO385<"BO7"<BO385;"CH7" = "1"
当"BS7"="BS384"(BS列最小值),"CI7"= "1";
     当"BS7"="BS385"(BS列最大值),"CJ7" = "1";
     当BS385<"BS7"<BS385;"CK7" = "1"
当"BT7"="BT384"(BT列最小值),"CL7"= "1";
     当"BT7"="BT385"(BT列最大值),"CM7" = "1";
     当BT385<"BT7"<BT385;"CN7" = "1"
当"BU7"="BU384"(BU列最小值),"CO7"= "1";
     当"BU7"="BU385"(BU列最大值),"CP7" = "1";
     当BU385<"BU7"<BU385;"CQ7" = "1"
当"BW7"="BW384"(BW列最小值),"CR7"= "1";
     当"BW7"="BW385"(BW列最大值),"CS7" = "1";
     当BW385<"BW7"<BW385;"CT7" = "1"
当"BX7"="BX384"(BX列最小值),"CU7"= "1";
     当"BX7"="BX385"(BX列最大值),"CV7" = "1";
     当BX385<"BX7"<BX385;"CWT7" = "1"
当"BY7"="BY384"(BY列最小值),"CX7"= "1";
     当"BY7"="BY385"(BY列最大值),"CY7" = "1";
     当BY385<"BY7"<BY385;"CZT7" = "1"
当"CA7"="CA384"(CA列最小值),"DA7"= "1";
     当"CABY7"="CA385"(CA列最大值),"DB7" = "1";
     当CA385<"CA7"<CA385;"DCT7" = "1"
.............................

TA的精华主题

TA的得分主题

发表于 2019-10-11 10:38 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-11 10:41 编辑
27234aa 发表于 2019-10-11 10:17
我把代码放进去,没有反应。
麻烦网海遨游老师再帮忙看看。
另补充说明:

你把后面的表格拉得太窄,看不到了。实际上应该可以的。你点击按钮即可获取数据

Book222222.zip

37.55 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 11:19 | 显示全部楼层
网海遨游 发表于 2019-10-11 10:38
你把后面的表格拉得太窄,看不到了。实际上应该可以的。你点击按钮即可获取数据

好的,网海遨游老师。
我马上下载看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 12:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
网海遨游 发表于 2019-10-11 10:38
你把后面的表格拉得太窄,看不到了。实际上应该可以的。你点击按钮即可获取数据

非常好。谢谢网海遨游老师!
我想还把此方法用于其他工作表。刚才做了一下,没有做好。
这是我做的步骤,什么地方错了,还望网海遨游老师指点。
1、复制粘贴到另外一个工作簿      )(XII95PZQLZI%FSXTP(E~7.png

2、指定宏。
V2Z$VF5~]9OFQ@6{UGUL(`I.png

TA的精华主题

TA的得分主题

发表于 2019-10-11 15:05 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-11 15:06 编辑

把代码帮你注释下,你就明白怎么更改了。


Sub t20191011()
        Dim sh As Worksheet, ar, j%, i%, n% '定义变量类型
        Set sh = Sheets("sheet1") '定义工作表对象(这里工作表名叫Sheet1)
        sh.[cc2:df60000].ClearContents '清除要写入数据的区域
        ar = [{63,67,71,72,73,75,76,77,79}] 'Bk、BO、BS、BT、BU……对应的列号(即字母换成了数字)
        For j = 7 To 377 Step 10 '从第7行循环到第377行,步进为10(即7、17、27、37……377)
               If sh.Cells(j, 37).Value = "A" Then '如果AK列(转化成数字就37列)的值是A,就……
                For Each i In ar '遍历相应的列(即遍历Bk、BO、BS、BT、BU……等列)
                        n = n + 1'累加、计数
                        If sh.Cells(j, i).Value = sh.Cells(384, i).Value Then sh.Cells(j, 80 + (3 * n - 2)) = 1 '如果等于该列的384行(最小值),相应的单元格值为1
                        If sh.Cells(j, i).Value = sh.Cells(385, i).Value Then sh.Cells(j, 80 + (3 * n - 1)) = 1
                        If sh.Cells(j, i).Value > sh.Cells(384, i).Value And sh.Cells(j, i).Value < sh.Cells(385, i).Value Then sh.Cells(j, 80 + 3 * n) = 1
                Next i
                n = 0 '初始化n=0(对Bk、BO、BS、BT、BU……每一列都要重新计数),不然在写入数据时会出错。
                End If
        Next j
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-11 20:52 | 显示全部楼层
老师写得非常浅显易懂,我也看得点头,貌似有点懂的意思。但我的水平就这几天刚刚学会的这句if...then这个语句。看了几个小时,我想是Set sh = Sheets("sheet1") 这个语句吧。到百度上查阅了Set sh = Sheets("sheet1") ,还是不得其解。不懂,脑袋更晕了。也把这段代码复制粘贴到模块里(原来我是放在ThisWorkbook里)。也想找点什么替代“sheet1”,尝试了几次,都不对。
非常感谢网海遨游老师这样耐心、逐句解释!好感动!还望老师有空抽时间指点指教。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-19 21:29 , Processed in 0.045179 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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