excel - 为什么我的长公式给我一个语法错误?它与“,”有关
问题描述
因此,此宏在 C 和 D 中插入 2 列。然后将这个公式一直填充到 C 列。
Option Explicit
Sub Format_dates()
Dim ws As worksheet
Dim lst As Long
Dim i As Long
Dim r As Long
Columns("C:D").Insert Shift:=xlToRight
Range("C2").Value = "START DATE"
Range("D2").Value = "END DATE"
Range("A" & Cells.Rows.Count).End(xlUp).Offset(0, 3).Select
With ActiveSheet ' ("MASTER Business Events Calendar")
lst = ws.Cells(.Rows.Count, 2).End(xlUp).row
For i = 3 To lst
r = Cells.row
ws.Cells(i, 3) = "=IF(ISNUMBER(B&r),B&r,DATEVALUE(TRIM(LEFT(B&r,FIND("-",SUBSTITUTE(B&r,CHAR(150),"-")&"-")-1))&", "&RIGHT(B&r,4)))"
Next i
End With
End Sub
我不能像使用 python 那样替换公式中的变量吗?
解决方案
您需要将变量与字符串分开:
B&r
应该
B" & r & "
一切都"
应该是""
ws.Cells(i, 3).Formula = "=IF(ISNUMBER(B" & r & "),B" & r & ",DATEVALUE(TRIM(LEFT(B" & r & ",FIND(""-"",SUBSTITUTE(B" & r & ",CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B" & r & ",4)))"
另一个注意事项,您引用ws
但从未设置它。它应该设置为
Set ws = ActiveSheet
然后删除 With 块。
话虽如此,循环是不需要的。
ws.Range(ws.Cells(3, 3),ws.Cells(lst,3)).Formula = "=IF(ISNUMBER(B3),B3,DATEVALUE(TRIM(LEFT(B3,FIND(""-"",SUBSTITUTE(B3,CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B3,4)))"
该行,因为它是相对的,将正确迭代
Option Explicit
Sub Format_dates()
Dim ws As worksheet
Set ws = ActiveSheet
ws.Columns("C:D").Insert Shift:=xlToRight
ws.Range("C2").Value = "START DATE"
ws.Range("D2").Value = "END DATE"
Dim lst As Long
lst = ws.Cells(ws.Rows.Count, 2).End(xlUp).row
ws.Range(ws.Cells(3, 3),ws.Cells(lst,3)).Formula = "=IF(ISNUMBER(B3),B3,DATEVALUE(TRIM(LEFT(B3,FIND(""-"",SUBSTITUTE(B3,CHAR(150),""-"")&""-"")-1))&"", ""&RIGHT(B3,4)))"
End Sub
推荐阅读
- javascript - 将 Vue v2 代码移植到 v3。与 V3 中类似的 _b _t 编译器命令是什么?
- flutter - 无法在颤振文件选择器上获取真实位置
- python - 通过 Athena API 客户端(Boto3)执行查询时如何指定文件名?
- powershell - PowerShell 中是否提供联合类型
- google-tag-manager - GA4电商购买只能显示部分物品收入,不能全部显示
- r - R 中的 Apexcharter - 烛台没有注释和时区问题
- pandas - 如何从时间字段中删除微秒
- regex - 如何使用正则表达式提取括号中的数字
- ios - 如果变量类型没有显式声明,为什么在以下情况下需要可选链接?
- linux-kernel - Linux内核:当prepare_to_wait_event之后发生抢占时,wait_event_interruptible会永远休眠吗?