|
楼主 |
发表于 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中所有的参数都右移一列,因此需要进行相应的调整。
|
|