将表中的命名范围转换为另一个命名范围

时间:2019-01-27 18:47:58

标签: excel vba

我遇到这样的问题:在工作表“团队概述”(设置到名为“ tbl”的表,第2列的表)中获取命名范围,然后将其粘贴到另一个名为“知识矩阵”的工作表中的另一个命名范围中“(可以通过将其定向为绝对引用来解决,但是如果我更改表/工作表中的列数,则需要更新VBA中的代码。)

我尝试过使用遍历数组并仅切换x,y,坐标,但是我遇到的困难是将选择内容复制到另一个命名范围,并将源命名范围分配给变量rng(返回运行时错误5-无效的程序)。

该代码适用于测试没有命名范围和仅具有绝对引用的表的文件。

Sub Transpose()
Dim rng As Range
Dim rngT As Range
Dim oarray As Variant
Dim cl As Long
Dim rw As Long

Set rng = ThisWorkbook.Sheets("Team overview").Range("Name")
Set rngT = ThisWorkbook.Sheets("Knowledge Matrix").Range("Target")

oarray = rng

For cl = 1 To UBound(oarray)    
    For rw = 1 To UBound(oarray, 2)    
        Cells(rw, cl) = oarray(cl, rw)    
    Next
Next
End Sub

整个图片:

表“ tbl”用于清晰地概述团队成员。当团队负责人添加/删除一个时,我需要在所有其他表标题中对其进行更新。由于标头中不能包含公式,因此我想将列以转置的方式复制到其他表标头的命名范围中。
该成员处于“活动”或“蝴蝶”状态的情况也略有复杂,但这仅是最上面的樱桃。
所以基本上:

  1. 如果第1列具有“活动”或“蝴蝶”副本表/命名范围(垂直间隔)
  2. 转置该数组并将其粘贴到另一个命名数组(水平间隔)

如果可能,我不希望使用.Select

具有命名范围的源表
Source table with named range

具有命名范围的目标表
Target table with named range

1 个答案:

答案 0 :(得分:0)

已经有一种称为“转置”的方法。

Sub MyTranspose()

    Dim rng As Range
    Dim rngT As Range
    Dim oarray As Variant

    Set rng = ThisWorkbook.Sheets("Team overview").Range("Name")
    Set rngT = ThisWorkbook.Sheets("Knowledge Matrix").Range("Target")

    oarray = rng.value2

    rngT.resize(ubound(oarray, 2), ubound(oarray, 1)) = _
        application.transpose(oarray)

End Sub