수식 내에서 명명 된 셀을 자동 계산 / 해결하는 방법은 무엇입니까?


1

나는이 A1 = 5 내가 추가 한 A1을 이름 "으로 주인공 ".

내가 5=Protagonist 를 생각해 내면 .

D12에서 내가하고 싶다고 말하면 6=Protagonist+1 이 나올 것입니다 .

  • 내가 달성하고자하는 것은 "대체입니다 주인공 에" 5 과가 D12의 공식은 남아있다 =5+1.

A1이 지속적으로 값을 변경하기 때문에이 작업을 수행 해야하며 값을 사용하는 수식을 만들 때 보유한 값만 유지하면됩니다.

(수동 내가 선택할 수 있습니다 알고 주인공 과 충돌 F9를 내가 그것을해야 할 공식의 그 부분을 해결하기 위해,하지만 금액에 중요한 시간 소비를 먹으 렴)

이것은 공식을 입력하고 해결 한 후에 발생할 수 있습니다. 타이핑하는 동안 수식 입력 줄에 발생할 수 있다면 정말 놀랍지 만 vba가 그렇게 확장되지는 않을 것입니다.


당신이 원하는 마십시오 D12이 될 수 있습니다 : =A1 + 1또는 =5 + 1또는 =6또는 6??
게리의 학생

그것은 언급되었다-나는 그것을 유지 / 되길 원한다 = 5 + 1
helena4

1
왜 이것을하고 싶은지 설명해 주시겠습니까? 근본적인 문제를 설명하면 누군가 이런 종류의 솔루션에 의지하지 않고 문제를 해결하는 방법을 잘 알고있을 것입니다.
Excellll December

명명 된 범위의 수식을 입력 할 때마다 대신 명명 된 범위 의 현재 값 을 주입하고 앞으로 정적 상태를 유지하고 싶습니까?
Raystafarian

게리는 해결했다. 그리고 당신들에게 문서를 주었고 당신이 그것을 분석하고 당신에게 그것을 설명한다면 그것은 많은 시간을 낭비 할 것입니다.
helena4

답변:


3

계산 된 값으로 바꿔야 할 경우 :

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 Then
    If Left(Target.Formula, 1) = "=" And IsNumeric(Intersect(Range("B1:F1000"), Target)) Then
      Dim a As Variant
      For Each a In Array("protagonist", "anotherNameToChange")
        While InStr(1, Target.Formula, a, 1)
          Target.Formula = Replace(Target.Formula, a, Evaluate(ThisWorkbook.Names(a).Value), , , 1)
        Wend
      Next
    End If
  End If
End Sub

원하는대로 배열의 모든 이름에 대해 자동으로 수행합니까?

모든 이름에 대해 필요한 경우 followimg 2 행을 변경하십시오.

For Each a In Array("protagonist", "anotherNameToChange")

로 변경 :

For Each a In ThisWorkbook.Names

Target.Formula = Replace(Target.Formula, a, Evaluate(ThisWorkbook.Names(a).Value), , , 1)

Target.Formula = Replace(Target.Formula, a, Evaluate(a.Value), , , 1)

이것은 대소 문자를 구분하지 않습니다 :)


그래, 나는 많은 다른 이름을 사용한다. 따라서 이상한 이름의 주인공은 내 문서에 어떤 형태의 텍스트로도 나타날 가능성이 없습니다.
helena4

예상대로 작동하는 한 모든 것이 정상입니다 ... 조정이 필요한 경우 알려주세요 ... 두 번째 방법을 추가하겠습니다 ... 단 몇 초 ...
Dirk Reichel

네, 주인공을 위해서만하면됩니다. 모든 이름이 아닙니다. 마음에 들지 않으면 A1 ~ C1000 범위에 바인딩 할 수 있습니다. 전체 문서를 검색 할 필요가 없습니다.
helena4

@ helena4는 그것을 변경 ... 그냥 배열에 대체 할 모든 이름을 넣어 (또한 1 항목으로 작동)
Dirk Reichel

시원하고, 게리의 대답을 부풀려주십시오. 그는 땀을 흘 렸습니다 :) 우리는 끝났습니다.
helena4

2

이것을 시도하십시오 :

Sub qwerty()
   Dim N As Name, FixString As String

   Set N = ActiveWorkbook.Names("Protagonist")
   FixString = N.RefersToRange

   For Each cell In Cells.SpecialCells(xlCellTypeFormulas)
      cell.Formula = Replace(cell.Formula, "Protagonist", FixString)
   Next cell
End Sub

편집 # 1 :

Event Macroqwerty 에서 호출하려면 다음과 같이 사용하십시오.

Private Sub Worksheet_Change(ByVal Target As Range)
   If Intersect(Target, Range("A1:C100")) Is nothen Then
   Else
      Application.EnableEvents = False
         Call qwerty
      Application.EnableEvents = True
   End If
End Sub

3 열 1000 행을 검색하고 표준 재 계산이 트리거되거나 Enter 키를 누를 때 발견 된 셀에서 교체를 수행해야한다면 성능이 크게 떨어질 것이라고 생각하십니까? 그렇지 않으면 버튼에 바인딩하지 않아도됩니다.
helena4

@ helena4 항상 다음과 같은 것을 사용하여 제한 할 수 있습니다.Range("A1:C1000").SpecialCells(xlCellTypeFormulas)
Gary 's Student

내가 아는 한 (그리고 큰 지식 기반은 아님) 이것은 수동으로 만 실행됩니다. 워크 시트 변경 사항에 바인딩하여 하루에 호출 할 수 있습니까? 그리고이 VBA 학습에 얼마나 많은 시간이 걸리나요? 내가 :) 땐 이상한 요청을 여기 너희들을 귀찮게 중지 할 수 있도록 전 과정에 저를 보내 내 상사에 의지 할 수
helena4

@ helena4 Sure ..... 이벤트 매크로를 생성 한 다음 이벤트 매크로 호출 qwerty 를 갖습니다 .
게리의 학생

0

귀하의 질문을 이해 한 결과 불가능합니다.

나는 그것이 존재한다면,이 행동을 원하는 당신의 뒤에있는 추론 (비즈니스 로직)을 이해하고 통합 문서를 재 형식화하는 것이 대답이라고 생각합니다.


나는 약간 회의적입니다-나는 vba를 사용하여 셀의 내용을 대체했습니다. 전체의 일부가 아닙니다. 수식을 입력 한 후 이름이 바뀌면 수식 표시 줄에서 이름을 입력 할 수 없어도 충분합니다. vba가 막 다른 곳이면 주변 장치로 해결할 수 있습니다. 매크로를 여분의 키에 바인딩하고 = "="& Protagonist를 붙여 넣은 다음 9를 누르고 계속 진행할 수있는 마우스를 구입하면됩니다. 논리는 여기에 간략히 맞지 않습니다. 점점 증가하는 엔트리 목록에서 동적 일치를 참조해야한다고 말하면 충분합니다. 그리고 나는 목표를 더 이상 단순화 할 수 없었습니다.
helena4

소급하여 셀 값 (protagonist + 1)을 소스 값 (5 + 1)으로 변경하려면 간단하고 WorksheetChange이벤트 와 함께 자동으로 발생할 수도 있지만 질문에서 얻은 것은 아닙니다.
Lunatik

예, 더 이상의 해석을 피하기 위해 설명했습니다. 그것은 단순히 수식 표시 줄에서 발생하는 것을 선호한다는 것을 의미했지만 수식을 입력 한 후에는 시원합니다.
helena4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.