Копировать значения именованного диапазона, указанного в другой ячейке - PullRequest
0 голосов
/ 15 февраля 2020

Я хочу создать al oop, который копирует один диапазон в другой, в зависимости от значения в списке. Список содержит имена всех диапазонов, которые я хочу скопировать.

Таким образом, в этом примере PolicyOutput является именованным диапазоном от DD15:DD77. Я хочу, чтобы он обновлялся значениями из другого диапазона, policy1, а затем l oop, чтобы снова скопировать новые значения из другого диапазона ячеек, policy2.

Список политик находится в диапазоне ячеек с именем PolicyChoice

Каждая строка PolicyChoice содержит ссылку на группу ячеек. Это будут значения: policy1, policy2, policy3 et c.

Значения ячеек относятся к именованным диапазонам. Например, policy1 - A15:A77, а policy2 - B15:B77

Я хочу, чтобы A15:A77 скопировал в DD15:DD77, затем B15:B77, чтобы скопировать в DD15:DD77, но таким образом, чтобы обновляется и перезапускается при изменении пользователем списка «PolicyChoice».

Я попробовал приведенный ниже код, но он просто копирует «policy1» снова в каждую ячейку в диапазоне PolicyOutput вместо значений в политика диапазона1

policyChoiceCount = (Sheets("RunModel").Range("policyChoice").Count) - Application.WorksheetFunction.CountIf(Sheets("RunModel").Range("policyChoice"), "")

For h = 1 To PolicyChoiceCount
             Sheets(PolicySheetName).Range("PolicyOutput").Value = WorksheetFunction.Index(Sheets("RunModel").Range("policyChoice"), h)

 Next h

Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2020

Добавить диапазон (WorksheetFunction ..). Значение, подобное этому

Sheets(policySheetName).Range("PolicyOutput").Value = _
Range(WorksheetFunction.Index(Sheets("RunModel").Range("policyChoice"), h)).Value

или простыми шагами

Sub mycopy ()

    Dim wb As Workbook, wsSource As Worksheet, wsTarget As Worksheet
    Dim rngSource As Range, rngTarget As Range, cell As Range

    Set wb = ThisWorkbook
    Set wsSource = wb.Sheets("RunModel")
    Set wsTarget = wb.Sheets("PolicySheetName")
    Set rngTarget = wsTarget.Range("PolicyOutput")

    For Each cell In wsSource.Range("PolicyChoice")
        If Len(cell) > 0 Then
            On Error Resume Next
            If IsEmpty(Range(cell)) Then
                MsgBox "No named range " & cell, vbCritical, "ERROR"
                Exit Sub
            End If
            On Error GoTo 0

            rngTarget.Value = Range(cell).Value
        End If
    Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...