我有一张表格,其中3个工作表中的所有数据将从单元格D1开始放在彼此之下。 在A列到C列中,将放置刚刚粘贴的列的单元格的计算组合。 例如:
cell A2 will be: D2 & E2
Cell B2 will be: D2 & E2 & if (G2 = "" ; F2 ; G2)
cell C2 will be: D2 & E2 & if (H2 = "" ; if (G2 = "" ; F2 ; G2) ; H2)
当我只有一列要填充时(A栏),我有:
Sub M_snb()
for each sh in sheets(Array("uitdraai FD", "uitdraai asw", "uitdraai food"))
sn=sh.cells(1).currentregion.offset(1).columns(1)
sp=sh.cells(1).currentregion.offset(1)
for j=1 to ubound(sn)
sn(j,1)=sp(j,2)&sp(j,3)&sp(j,4)
next
sh.cells(1).currentregion.offset(1).columns(1)=sn
next
End Sub
这可以快速而完美地工作,但使用CurrentRegion。 我一直在尝试更改此脚本,以便将其用于其他2列(B列和C列),但到目前为止,我还没有成功。
当我更改代码的第一行,并将单元格(1)更改为单元格(4)时,我看到代码从单元格D1开始,这是oke。甚至currentregion.offset(1)也是正确的。但是当我添加.columns(1)时,我收到一个错误。 (我通过在最后添加.select来尝试所有内容,并逐步扩展代码以查看会发生什么)。
error 438:
this property or method are not supported by this object.
如何以最有效的方式实现目标?
(这是基础,我有额外的if
陈述(有时,F栏中的单元格的值是'Zelfzorg ASW',必须更改为'Zelfzorg'
我希望有人可以帮助我并提供代码来执行我想要的操作。
我想尽可能多地学习这个,但我不明白上面的代码会发生什么
答案 0 :(得分:0)
然后根据您的评论尝试此操作 这比循环更快。
未经测试:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim lrow As Long
For Each ws in Thisworkbook.Sheets(Array("uitdraai FD", "uitdraai asw", "uitdraai food"))
With ws
lrow = .Range("D" & Rows.Count).End(xlUp).Row
If lrow > 1 Then '~~> checks whether Column D has value other than header
.Range("A2:A" & lrow).Formula = "=D2&E2"
.Range("B2:B" & lrow).Formula = "=D2&E2&IF(G2="""",F2,G2)"
.Range("C2:C" & lrow).Formula = "=D2&E2&IF(H2="""",IF(G2="""",F2,G2),H2)"
'~~>next line converts formulas to values, if you don't want it, remove it
.Range("A2:C" & lrow).Value = .Range("A2:C" & lrow).Value
End If
End With
Next
End Sub
这是你正在尝试的吗?
代码的作用是将您的公式放在A,B和C列中,直到您在D列中有值
希望这适合你。
我没有时间去测试,如果遇到问题,只需评论一下。