그래서 기본적으로 조건을 검사 할 수식을 작성하고 조건이 충족되면 다른 셀에 특정 텍스트 줄을 붙여 넣기를 원합니다. 값을 붙여 넣으려는 셀에 수식이 존재하기를 원하지 않습니다. 예를 들어 B5에 값을 붙여 넣으려는 경우 셀 B5에 수식을 넣지 않으려 고합니다.
답변
다음 방법은 설명 된 해결 방법을 사용합니다. 이리 과 이리 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
답변
셀 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 방식을 사용하면 통합 문서를 매크로 사용 통합 문서로 저장해야하며 사용자는 매크로를 허용하거나 파일을 신뢰할 수있는 파일로 설정해야합니다.
참고 : 위의 내용은 단지 하나의 예일뿐입니다. 숫자 나 텍스트를 평가할 것인지 여부, 평가가 대소 문자를 구분하는지 여부, 평가 규칙이 무엇인지, 결과를 배치 할 위치 등 요구 사항을 정의해야합니다.