Vba在Copy方法中更改数据的位置

时间:2016-01-05 07:09:37

标签: vba

我使用复制方法将数据从A工作表获取到B工作表。但是,结果并不是我的预期。

 For Each ss in yesno
 If ss.Cells.Value ="yes" Then
     Set rng = Union(.Range("A" & ss.Row),
                     .Range("C" & ss.Row),
                     .Range("B" & ss.Row),
                     .Range("D" & ss.Row))
     tlr = tws.Range("A" & tws.Row.Count).End(xlUp).offset(1).Row
     rng.Copy tws.Cells(tlr,"A")
 ElseIf ss.Cells.Value = "no" Then
 End If
 Next

这个问题我认为它发生在“set rng Union”行。我希望数据结果来自范围A,C,B,D 但它仍显示为A,B,C,D。无论我如何改变秩序。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

范围是工作表上出现>的单元格块 - 您无法更改范围或工作表中单元格的顺序。 Union()方法返回Range对象,因此加载单元格或范围的顺序并不重要,它们仍然以相同的顺序存储在工作表的相同位置。

然而,您可以从源数据生成单维数组并使用它。用以下代码替换上面的代码:

For Each ss in yesno
    If ss.Cells.Value ="yes" Then   

        vArray = Array(.Range("A" & ss.Row).Value,
                       .Range("C" & ss.Row).Value,
                       .Range("B" & ss.Row).Value,
                       .Range("D" & ss.Row).Value)

        tlr = tws.Range("A" & tws.Row.Count).End(xlUp).offset(1).Row
        tws.Cells(tlr, "A").Resize(1, 4).Value = vArray
    End If
Next