如何复制动态命名范围内的值?

时间:2016-05-04 11:20:48

标签: excel vba excel-vba

我在工作中进行了废物计算练习,并且我有几个动态命名范围,其单元格都包含由公式到达的值。我需要一个模块,它将动态命名范围内的值复制到另一个工作表而不复制公式本身,只复制单元格包含的值。我试着用这个:

Sub Sample()
    Dim wsI As Worksheet, wsO As Worksheet

    Set wsI = ThisWorkbook.Sheets("Sheet1")
    Set wsO = ThisWorkbook.Sheets("Sheet1")

    wsI.Range("Pct_waste").Copy wsO.Range("B4")

End Sub

但这会复制公式,这是没用的。我不能只使用绝对引用,因为我需要能够快速添加新数据。最后,我打算创建一个宏,将动态命名范围内的值复制到新工作表,然后以数字方式对这些值进行排序,并将它们绘制在散点图上。因此,我需要找到一种方法来复制动态命名范围中的所有值,而无需复制公式本身。

另外,对于VBA而言,我相当新手,所以请轻松一点!

3 个答案:

答案 0 :(得分:1)

使用.Resize()方法:

Set wsI = ThisWorkbook.Sheets("Sheet1")
Set wsO = ThisWorkbook.Sheets("Sheet1")

With wsI.Range("Pct_waste")
    wsO.Range("B4").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With

答案 1 :(得分:0)

尝试仅粘贴值:

Sub Sample() 

Dim wsI As Worksheet, wsO As Worksheet

Set wsI = ThisWorkbook.Sheets("Sheet1")
Set wsO = ThisWorkbook.Sheets("Sheet1")

wsI.Range("Pct_waste").Copy 
wsO.Range("B4").PasteSpecial xlPasteValues

End Sub

答案 2 :(得分:0)

或类似的东西

Sub test()

Dim r As Excel.Range
Dim i As Integer

Set r = Range("test_range")

For i = 1 To r.Cells.Count
    Range("x" & i).Value = r.Cells(i, 1).Value
Next i

End Sub

或者你可以做这样的事情,如表格中的静态公式,= index(range_name,rows($ A $ 1:$ A1),1)并填写,也使用IFERRROR捕获错误,这将是静态的虽然