ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 复制公式到下行单元格,并按规定逻辑修改参数列值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-6 16:26 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同一列中多行单元格,逐一复制公式到下个单元格,并按规定逻辑修改参数列值。
在一个任意的工作表中,L23中设置了一个包含函数AND的公式,并且函数AND设置了四个参数,其中行数固定,列值均为L列到W列的循环逻辑,请求编写一段VBA代码码,从L23开始,将上个单元格内的公式复制公式到下一个单元格,并对AND参数进行L列W列的循环逻辑的修改(简单明了的说,就如同机械钟表盘的规律,秒钟走了一个循环,分钟移动一格,分钟走了一个循环,时钟移动一格),公式中其他参数均不变动。
详细演变如下:
复制L23公式到L24,从AND中的第四参数的列值开始计算往右移动一列,(如L更改为M、M更改为N……),若AND的第四个参数出现为X列时,应将X列更改为L列,并且顺延将AND的第三参数向右移动一列,(如L更改为M、M更改为N……),若函数AND的第三,第四参数同时出现为X列时,应将X列更改为L列,继续顺延将函数AND的第二参数向右移动一列,(如L更改为M、M更改为N……),若AND的第二,第三,第四参数同时出现为X列时,应将X列更改为L列,同样顺延将函数AND的第一参数向右移动一列,(如L更改为M,M更改为N……),
……以此类推,直至完成所需单元格。

CCC .zip

40.82 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-7 20:54 | 显示全部楼层
Sub UpdateFormulas()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你的工作表名
    Dim row As Long
    Dim colOffset As Long
    Dim formula As String
   
    ' 初始列偏移量
    colOffset = 0
   
    ' 遍历从L22到L42的行
    For row = 22 To 42
        ' 初始化公式
        formula = "=IF(AND("
        
        ' 遍历AND函数的四个参数
        For i = 16 To 19
            ' 计算列字母
            Dim colLetter As String
            colLetter = Chr(Asc("L") + (i - 16 + colOffset) Mod 12)
            
            ' 添加到公式中
            If i > 16 Then formula = formula & ","
            formula = formula & colLetter & "$" & i & "=1"
        Next i
        
        ' 完成公式
        formula = formula & "),L$44,0)"
        
        ' 将公式写入单元格
        ws.Cells(row, "L").Formula = formula
        
        ' 更新列偏移量
        colOffset = (colOffset + 1) Mod 12
    Next row
End Sub

这段代码能实现部分功能,但是还不符合要求,求大侠更正:
一,公式是从L22开始复制到L23,L22中的公式改变;
二,AND函数中的参数是逐一递增更改的,当第四参数的列值到达W列时,更改不再将列值右移,而是返回L列继续循环,并且,当第四参数更改为L列时,第三参数的列值相应的右移一列,直到W时同样更改为L列。第二,第一参数如此逻辑同样作出更改。而这段代码却是将AND中所有的参数都右移一列,因此需要进行相应的调整。

TA的精华主题

TA的得分主题

发表于 2024-9-7 22:23 | 显示全部楼层
小递归练练手。

0000.zip

36.57 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-8 07:18 | 显示全部楼层
xbox1210 发表于 2024-9-7 22:23
小递归练练手。

已验证,完美!流畅!
感谢感谢!正是我要的结果!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 21:54 , Processed in 0.031516 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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