2016-07-19 6 views
0

현재 명명 된 범위의 탭 내에서 작업하고 있습니다. 그들은 모두 클래스 1과 연관되어 있습니다.이 셀을 두 번 복제하여 클래스 2와 클래스 3에 동일한 열을 생성하고 싶습니다. 명명 된 범위는 다음 두 클래스에 대해 _2/_3과 별개로 유지되어야합니다. 또한 각 열에서 수식을 수정해야하지만 올바른 접미사 (_2/_3)가 포함되어야합니다.명명 된 범위 중복/수식 변경

이 더 나은 내가 뭘하려고하는지 설명하기 위해 단순화 된 버전입니다 :

**Class 1** 

    Lives   
    Age  
    Adjust   
    Claim  
    Risk  

**Class1 Class2  Class3** 

    Lives  Lives_2  Lives_3 

    Age  Age_2  Age_3 

    Adjust Adjust_2 Adjust_3 

    Claim  Claim_2  Claim_3 

    Risk  Risk_2  Risk_3 

을 이들은 이름을 대표하는 세포의; 그들 모두는 또한 각 클래스 내에서 연결하는 수식을 포함합니다. 이미 완료된 클래스 1 영역에는 9 개의 열과 120 개의 행이 있습니다. 나는 18 클래스 3 다음 다음 (9)에 열 (10)을 채우는 클래스 두 싶습니다 난 그냥 이름을 변경하려고하는 작업 된 코드는하지만 실패했습니다 :

Sub ChangeNames() 
    Dim OldName As String 
    Dim NewName2 As String 
    Dim NewName3 As String 
    Dim rng As Range 



    For r = 1 To 127 
     For c = 1 To 10 
      If IsNamedRange(Cells(r, 1 + c)) Then 
        Set rng = Sheets("Medical").Cells(r, 1 + c) 

        OldName = rng.Name 
        NewName2 = OldName & "_2" 
        NewName3 = OldName & "_3" 

        Sheets("Medical").Cells(r, 11 + c).Name = NewName2 
        Sheets("Medical").Cells(r, 21 + c).Name = NewName3 

      End If 

     Next c 
    Next r 


End Sub 

Function IsNamedRange(MyRange) As Boolean 
    Dim vntName As Variant 
    On Error Resume Next 
     IsNamedRange = MyRange.Name <> "" 
    Exit Function 
End Function 

VBA에서도 가능합니까? 어떤 도움을 많이 주시면 감사하겠습니다!

서브 이름() 어둡게은 문자열로 어둡게 oldname을가 문자열로 어둡게 NewName2은 문자열로 어둡게 NewName3는 문자열 희미한는

For Each this In Workbook.names 
    If Range(this).Worksheet = "Medical" Then 
     NewName2 = Range(this).Name & "_2" 
     NewName3 = Range(this).Name & "_3" 
     x = Range(this).Column 
     y = Range(this).Row 
     Sheets("Medical").Cells(x, 10 + y).Name = NewName2 
     Sheets("Medical").Cells(x, 20 + y).Name = NewName3 
    End If 

Next this 

최종 서브

+1

* VBA *로 가능합니까? - 예. * 그러나 나는 실패했습니다 * - 당신이 일하지 않는 것에 대해 정교하게한다면, 우리는 당신을 더 많이 도울 수 있습니다. –

+0

위 코드를 실행할 때; 이전 이름 ​​변수는 셀 이름 인 Med_Prod 대신 "= Medical! $ b $ 3"값을 갖습니다. 셀 위치가 아닌 이름 범위를 반환하려면 어떻게해야합니까? 더 명확히 할 필요가 있다면 – Brian

+0

은 시트 레벨이나 통합 문서 레벨에 정의 된 이름입니까? –

답변

1
를 정수로 정수 희미한 Y가 X이

이 코드를 사용해보십시오. 정확한 데이터 세트에 맞게 오프셋이나 미세 조정을 약간 조정해야 할 수도 있지만 최대한 정확하게 정의했습니다.

Sub ChangeNames() 

    Dim rName As Name 
    For Each rName In ThisWorkbook.Names 

     If rName.RefersToRange.Parent.Name = "Medical" Then 

      Select Case rName.RefersToRange.Column 

       Case 2 To 10 

        For i = 1 To 2 

         Dim sName As String 
         sName = "=" & rName.RefersToRange.Offset(, i * 10).Parent.Name 
         sName = sName & "!" & rName.RefersToRange.Offset(, i * 10).Address 
         ThisWorkbook.Names.Add rName.Name.Name & "_" & i + 1, RefersTo:=sName 

        Next 

      End Select 

     End If 

    Next 

End Sub 
+0

임에 응용 프로그램 또는 개체가 정의 된 오류가 발생했습니다. *** rName.RefersToRange.Parent.Name = "Medical"Then *** line – Brian

+0

with the ws의 기능은 무엇입니까? referencesToRange.Parent가 ws로 대체되지 않겠습니까? – Brian

+0

및 rName은 여전히 ​​A15 ... – Brian