다른 셀에 특정 값을 붙여 넣을 수식을 어떻게 작성합니까?


7

그래서 기본적으로 조건을 검사 할 수식을 작성하고 조건이 충족되면 다른 셀에 특정 텍스트 줄을 붙여 넣기를 원합니다. 값을 붙여 넣으려는 셀에 수식이 존재하기를 원하지 않습니다. 예를 들어 B5에 값을 붙여 넣으려는 경우 셀 B5에 수식을 넣지 않으려 고합니다.


1
수식보다는 매크로를 원하는 것처럼 들립니다.
Brad Patton

^ 당신이 저에게 할 수있는 매크로의 예를 들어 줄 수 있습니까? 전에 매크로를 작성한 적은 ... 감사합니다!
Robert Jefferies

스택 오버플로에 오신 것을 환영합니다! 당신이 묻는 것의 본질을 바꿀 필요가있을 때, 당신이 기존의 질문을 편집함으로써 그렇게하는 것이 매우 바람직합니다. 새 것을 만들자. .
Aaron Miller

1
부디 편집하다 자세한 내용은 귀하의 질문; 검사 할 상태, 데이터 정렬 방법, 트리거 할 방법 등이 있습니다.
CharlieRB

@ 브래드의 의견 +1; 저는 한 셀의 공식이 다른 셀을 수정하는 것이 불가능하다고 믿습니다.
Scott

답변:


6

다음 방법은 설명 된 해결 방법을 사용합니다. 이리 이리 VBA에 정의 된 워크 시트 함수를 사용하여 다른 셀의 값을 설정할 수 있습니다.

사용자 정의 함수는 대상 변수의 주소와 해당 셀을 설정할 값을 전역 변수에 저장합니다. 그런 다음 워크 시트가 다시 계산 될 때 트리거되는 매크로는 전역 변수를 읽고 대상 셀을 지정된 값으로 설정합니다.

사용자 정의 함수의 사용은 간단합니다.

  =SetCellValue(target_cell, value)

어디에 target_cell 워크 시트의 셀에 대한 문자열 참조 (예 : 'A1') 또는 그러한 참조로 평가되는 표현식입니다. 여기에는 다음과 같은 표현식이 포함됩니다. =B14 여기서 B14의 값은 "A1"입니다. 함수는 유효한 표현식에서 사용될 수 있습니다.

SetCellValue 값이 대상 셀에 성공적으로 기록되면 1을 반환하고 그렇지 않으면 0을 반환합니다. 대상 셀의 이전 내용을 덮어 씁니다.

세 가지 코드가 필요합니다.

  • 코드 정의 SetCellValue 그 자체
  • 워크 시트 계산 이벤트에 의해 트리거되는 매크로. 과
  • 효용 함수 IsCellAddress 보장하기 위해 target_cell 유효한 셀 주소입니다.

SetCellValue 함수에 대한 코드

이 코드는 통합 문서에 삽입 된 표준 모듈에 붙여 넣어 야합니다. 이 모듈은 Visual Basic 편집기의 메뉴를 통해 삽입 할 수 있습니다. Visual Basic ~로부터 Developer 탭의 탭.

  Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function


Worksheet_Calculate 매크로 코드

이 코드는 사용할 워크 시트의 코드에 포함되어야합니다. SetCellValue. 가장 쉬운 방법은 워크 시트의 탭을 마우스 오른쪽 버튼으로 클릭하는 것입니다. Home 보기, 선택 View Code그런 다음 편집기 창에 코드를 붙여 넣습니다.

  Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub


IsCellAddress 함수에 대한 코드

이 코드는 동일한 모듈에 붙여 넣을 수 있습니다. SetCellValue 암호.

  Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range           ' Input is valid cell reference if it can be
      On Error GoTo GetOut       ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long            'convert single cell "range" address to
      colonPos = InStr(aValue, ":")   'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If                          'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function

"Worksheet_Calculate"에 없습니까? Application.Calculate 전에 Application.EnableEvents = True? 그렇지 않으면 함수가 94 번 계산됩니다.
Nicolau

1

셀 B5에 "green"값이 포함되어 있으면 텍스트 "텍스트 A"를 셀 C5에 표시한다고 가정합니다.

당신 양철통 수식 접근 방식을 사용하지만 수식은 다른 셀의 값을 변경할 수 없으므로 수식을 C5 셀에 입력해야합니다.

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

B5에 "녹색"이라는 단어가 포함되어 있으면 셀 C5에 "텍스트 A"만 표시됩니다.

이와 같은 공식은 많은 조건에서 작동하도록 구축 될 수 있습니다. 특정 상황에 대한 도움을 얻으려면 요구 사항을 정의해야합니다.

C5에 수식을 포함시키지 않으려면 VBA 방식을 사용할 수도 있습니다. 수작업으로 값을 편집하거나 셀 B5를 붙여 넣을 때 셀 B5가 변경 될 때마다 실행되는 워크 시트 변경 이벤트를 실행할 수 있습니다.

그러한 매크로의 예는 다음과 같습니다.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

산출물의 조건과 배치는 단지 예일 뿐이며 요구 사항에 맞게 조정해야합니다.

수식과 매크로 접근 방식의 차이점은 다음과 같습니다.

  • 수식 접근 방식을 사용하면 셀 C5에 수식이 포함됩니다. 사용자가 실수로 수식을 삭제하면 전달되는 기능도 삭제됩니다. (그러나 그것을 관리하는 방법이 있습니다)
  • VBA 매크로를 사용하면 C5 셀에 수식이 표시되지 않고 축약 된 텍스트가 값으로 표시되지만 설치를 변경하려면 Excel VBA에 대한 지식이 필요합니다. 또한 VBA 방식을 사용하면 통합 문서를 매크로 사용 통합 문서로 저장해야하며 사용자는 매크로를 허용하거나 파일을 신뢰할 수있는 파일로 설정해야합니다.

참고 : 위의 내용은 단지 하나의 예일뿐입니다. 숫자 나 텍스트를 평가할 것인지 여부, 평가가 대소 문자를 구분하는지 여부, 평가 규칙이 무엇인지, 결과를 배치 할 위치 등 요구 사항을 정의해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.