循环使用if语句放置单元格组合

时间:2014-01-27 15:02:31

标签: excel vba excel-vba

我有一张表格,其中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'

我希望有人可以帮助我并提供代码来执行我想要的操作。

我想尽可能多地学习这个,但我不明白上面的代码会发生什么

1 个答案:

答案 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列中有值 希望这适合你。
我没有时间去测试,如果遇到问题,只需评论一下。