동일한 시트에서 동일한 수식을 선택하는 EXCEL 매크로
소개
셀에 수식을 입력하고 셀을 복사하면 셀에 설정된 수식은 동일하지만 상대 참조를 사용하면 수식 표시줄에 표시되는 문자열은 달라집니다.
이 때 수식 바에 표시되는 문자열이 다르더라도 상대 참조가 같은 수식의 셀을 선택하는 매크로가 됩니다.
우선 수식을 셀에 입력
먼저 B2, B7, B12, B17 셀에 각각 왼쪽 위 셀을 참조하는 수식을 입력합니다.
그때
B2 셀에는 절대 참조
B7 셀에 상대 참조
B12 셀에는 열만 절대 참조
B17 셀에는 행만 절대 참조
수식을 입력합니다.
그 후 각 셀을 가로 3열, 세로 3행에 각각 복사합니다.
실행 결과는 이렇게 됩니다.
그 내용을 수식으로 표시한 내용은 다음과 같습니다.
이때 괘선으로 둘러싼 부분이 각각 같은 수식이 됩니다.
소스 코드
Public Sub SelectSameFormula()
'ActiveCellの数式と同一の数式のセルを検索の対象とする
Dim strFormulaR1C1 As String
strFormulaR1C1 = ActiveCell.FormulaR1C1
If strFormulaR1C1 = "" Then
Exit Sub
End If
'総当たりするセルの領域を数式の入力されたセルに限定する
Dim objFormulaRange As Range
Set objFormulaRange = Cells.SpecialCells(xlCellTypeFormulas)
Dim Result As Range
Set Result = ActiveCell
Dim objCell As Range
'数式の入力されたセルを総当たりして同じ数式のセルを取得
For Each objCell In objFormulaRange
If objCell.FormulaR1C1 = strFormulaR1C1 Then
Set Result = Application.Union(Result, objCell)
End If
Next
Call Result.Select
End Sub
사용법
선택한 수식의 입력 셀을 선택하고
SelectSameFormula() 매크로를 실행하십시오.
같은 수식의 입력된 셀이 모두 선택되면 성공입니다.
활성 셀에 수식이 설정되어 있지 않으면 아무 작업도 수행하지 않습니다.
해설
수식을 R1C1 형식으로 표시한 결과를 보면 일목요연처럼,
R1C1 형식으로 얻은 수식이 동일한 셀을 모두 선택하고 있습니다.
여담
여기에서는 다음 기사를 위한 참고 기사가 됩니다.
조건부 서식을 통합하는 EXCEL 매크로
만약 Range 객체의 프로퍼티에 FormulaR1C1이 없고 Formula밖에 없다면 실현이 불가능할까요?
실은 VBA에는 ConvertFormula라는 함수가 준비되어 있어 A1 형식의 수식을 R1C1 형식으로 변환할 수 있습니다.
위의 소스인 FormulaR1C1을 사용하고 있는 개소를 이하에 재기록하면 같은 결과를 얻을 수 있습니다.
변경 전 strFormulaR1C1 = ActiveCell.FormulaR1C1
변경 후 strFormulaR1C1 = Application.ConvertFormula(ActiveCell.Formula, xlA1, xlR1C1, , ActiveCell)
변경 전 If objCell.FormulaR1C1 = strFormulaR1C1 Then
변경 후 If Application.ConvertFormula(objCell.Formula, xlA1, xlR1C1, , objCell) = strFormulaR1C1 Then
중요한 것은 ConvertFormula() 함수의 네 번째 인수와 다섯 번째 인수입니다.
네 번째 인수는 Microsoft의 도움말에 따라 다음과 같습니다.
변환된 참조 형식을 지정하는 XlReferenceType 상수입니다.
이 인수를 생략하면 참조 유형은 변경되지 않습니다.
다섯 번째 인수는 Microsoft 도움말에 따라 다음과 같습니다.
단일 셀을 포함하는 Range 객체를 지정합니다.
이 셀은 상대 참조의 기준점입니다.
Microsoft의 도움말은 여전히 불친절하고 의미가 잘 모르지만,
내용은 변경 전 또는 변경 후의 형식에 R1C1 형식을 지정했을 경우의,
상대 참조의 기점이 되는 셀을 지정하라는 것입니다.
※ 인수를 생략했을 경우는 이하의 실험용 매크로의 결과, 셀 함수로부터 실행되었을 경우는, 셀 함수가 입력되고 있는 셀(Application.ThisCell). 매크로에서 실행되면 ActiveCell이 적용되는 것 같습니다.
즉, 이번 경우에는
네 번째 인수는 생략하여 절대 참조를 절대 참조로 유지하고 상대 참조를 상대 참조로 R1C1 형식으로 변환합니다.
다섯 번째 인수는 변경 후의 형식에 R1C1 형식을 지정했기 때문에 상대 참조시의 기점이 되는 셀(이번 경우에는 수식이 입력되어 있는 셀 그 자체)을 지정합니다.
실험용'*****************************************************************************
'[概要] ConvertFormula()関数の第5引数を省略した場合のR1C1形式の起点となるセルを調査する
'[戻値] R1C1形式の起点となるセルのアドレス
'*****************************************************************************
Public Function RelativeTo() As String
Dim str As String
str = Application.ConvertFormula("A1", xlA1, xlR1C1)
'A1セルからの相対位置の符号を反転 例:R[-1]C[-1] → R[+1]C[+1]
str = Replace(str, "-", "+")
RelativeTo = Application.ConvertFormula(str, xlR1C1, xlA1, , Range("A1"))
End Function
Reference
이 문제에 관하여(동일한 시트에서 동일한 수식을 선택하는 EXCEL 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takahasinaoki/items/9cd0e0cdc76c98382bc6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 B2, B7, B12, B17 셀에 각각 왼쪽 위 셀을 참조하는 수식을 입력합니다.
그때
B2 셀에는 절대 참조
B7 셀에 상대 참조
B12 셀에는 열만 절대 참조
B17 셀에는 행만 절대 참조
수식을 입력합니다.
그 후 각 셀을 가로 3열, 세로 3행에 각각 복사합니다.
실행 결과는 이렇게 됩니다.
그 내용을 수식으로 표시한 내용은 다음과 같습니다.
이때 괘선으로 둘러싼 부분이 각각 같은 수식이 됩니다.
소스 코드
Public Sub SelectSameFormula()
'ActiveCellの数式と同一の数式のセルを検索の対象とする
Dim strFormulaR1C1 As String
strFormulaR1C1 = ActiveCell.FormulaR1C1
If strFormulaR1C1 = "" Then
Exit Sub
End If
'総当たりするセルの領域を数式の入力されたセルに限定する
Dim objFormulaRange As Range
Set objFormulaRange = Cells.SpecialCells(xlCellTypeFormulas)
Dim Result As Range
Set Result = ActiveCell
Dim objCell As Range
'数式の入力されたセルを総当たりして同じ数式のセルを取得
For Each objCell In objFormulaRange
If objCell.FormulaR1C1 = strFormulaR1C1 Then
Set Result = Application.Union(Result, objCell)
End If
Next
Call Result.Select
End Sub
사용법
선택한 수식의 입력 셀을 선택하고
SelectSameFormula() 매크로를 실행하십시오.
같은 수식의 입력된 셀이 모두 선택되면 성공입니다.
활성 셀에 수식이 설정되어 있지 않으면 아무 작업도 수행하지 않습니다.
해설
수식을 R1C1 형식으로 표시한 결과를 보면 일목요연처럼,
R1C1 형식으로 얻은 수식이 동일한 셀을 모두 선택하고 있습니다.
여담
여기에서는 다음 기사를 위한 참고 기사가 됩니다.
조건부 서식을 통합하는 EXCEL 매크로
만약 Range 객체의 프로퍼티에 FormulaR1C1이 없고 Formula밖에 없다면 실현이 불가능할까요?
실은 VBA에는 ConvertFormula라는 함수가 준비되어 있어 A1 형식의 수식을 R1C1 형식으로 변환할 수 있습니다.
위의 소스인 FormulaR1C1을 사용하고 있는 개소를 이하에 재기록하면 같은 결과를 얻을 수 있습니다.
변경 전 strFormulaR1C1 = ActiveCell.FormulaR1C1
변경 후 strFormulaR1C1 = Application.ConvertFormula(ActiveCell.Formula, xlA1, xlR1C1, , ActiveCell)
변경 전 If objCell.FormulaR1C1 = strFormulaR1C1 Then
변경 후 If Application.ConvertFormula(objCell.Formula, xlA1, xlR1C1, , objCell) = strFormulaR1C1 Then
중요한 것은 ConvertFormula() 함수의 네 번째 인수와 다섯 번째 인수입니다.
네 번째 인수는 Microsoft의 도움말에 따라 다음과 같습니다.
변환된 참조 형식을 지정하는 XlReferenceType 상수입니다.
이 인수를 생략하면 참조 유형은 변경되지 않습니다.
다섯 번째 인수는 Microsoft 도움말에 따라 다음과 같습니다.
단일 셀을 포함하는 Range 객체를 지정합니다.
이 셀은 상대 참조의 기준점입니다.
Microsoft의 도움말은 여전히 불친절하고 의미가 잘 모르지만,
내용은 변경 전 또는 변경 후의 형식에 R1C1 형식을 지정했을 경우의,
상대 참조의 기점이 되는 셀을 지정하라는 것입니다.
※ 인수를 생략했을 경우는 이하의 실험용 매크로의 결과, 셀 함수로부터 실행되었을 경우는, 셀 함수가 입력되고 있는 셀(Application.ThisCell). 매크로에서 실행되면 ActiveCell이 적용되는 것 같습니다.
즉, 이번 경우에는
네 번째 인수는 생략하여 절대 참조를 절대 참조로 유지하고 상대 참조를 상대 참조로 R1C1 형식으로 변환합니다.
다섯 번째 인수는 변경 후의 형식에 R1C1 형식을 지정했기 때문에 상대 참조시의 기점이 되는 셀(이번 경우에는 수식이 입력되어 있는 셀 그 자체)을 지정합니다.
실험용'*****************************************************************************
'[概要] ConvertFormula()関数の第5引数を省略した場合のR1C1形式の起点となるセルを調査する
'[戻値] R1C1形式の起点となるセルのアドレス
'*****************************************************************************
Public Function RelativeTo() As String
Dim str As String
str = Application.ConvertFormula("A1", xlA1, xlR1C1)
'A1セルからの相対位置の符号を反転 例:R[-1]C[-1] → R[+1]C[+1]
str = Replace(str, "-", "+")
RelativeTo = Application.ConvertFormula(str, xlR1C1, xlA1, , Range("A1"))
End Function
Reference
이 문제에 관하여(동일한 시트에서 동일한 수식을 선택하는 EXCEL 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takahasinaoki/items/9cd0e0cdc76c98382bc6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Public Sub SelectSameFormula()
'ActiveCellの数式と同一の数式のセルを検索の対象とする
Dim strFormulaR1C1 As String
strFormulaR1C1 = ActiveCell.FormulaR1C1
If strFormulaR1C1 = "" Then
Exit Sub
End If
'総当たりするセルの領域を数式の入力されたセルに限定する
Dim objFormulaRange As Range
Set objFormulaRange = Cells.SpecialCells(xlCellTypeFormulas)
Dim Result As Range
Set Result = ActiveCell
Dim objCell As Range
'数式の入力されたセルを総当たりして同じ数式のセルを取得
For Each objCell In objFormulaRange
If objCell.FormulaR1C1 = strFormulaR1C1 Then
Set Result = Application.Union(Result, objCell)
End If
Next
Call Result.Select
End Sub
선택한 수식의 입력 셀을 선택하고
SelectSameFormula() 매크로를 실행하십시오.
같은 수식의 입력된 셀이 모두 선택되면 성공입니다.
활성 셀에 수식이 설정되어 있지 않으면 아무 작업도 수행하지 않습니다.
해설
수식을 R1C1 형식으로 표시한 결과를 보면 일목요연처럼,
R1C1 형식으로 얻은 수식이 동일한 셀을 모두 선택하고 있습니다.
여담
여기에서는 다음 기사를 위한 참고 기사가 됩니다.
조건부 서식을 통합하는 EXCEL 매크로
만약 Range 객체의 프로퍼티에 FormulaR1C1이 없고 Formula밖에 없다면 실현이 불가능할까요?
실은 VBA에는 ConvertFormula라는 함수가 준비되어 있어 A1 형식의 수식을 R1C1 형식으로 변환할 수 있습니다.
위의 소스인 FormulaR1C1을 사용하고 있는 개소를 이하에 재기록하면 같은 결과를 얻을 수 있습니다.
변경 전 strFormulaR1C1 = ActiveCell.FormulaR1C1
변경 후 strFormulaR1C1 = Application.ConvertFormula(ActiveCell.Formula, xlA1, xlR1C1, , ActiveCell)
변경 전 If objCell.FormulaR1C1 = strFormulaR1C1 Then
변경 후 If Application.ConvertFormula(objCell.Formula, xlA1, xlR1C1, , objCell) = strFormulaR1C1 Then
중요한 것은 ConvertFormula() 함수의 네 번째 인수와 다섯 번째 인수입니다.
네 번째 인수는 Microsoft의 도움말에 따라 다음과 같습니다.
변환된 참조 형식을 지정하는 XlReferenceType 상수입니다.
이 인수를 생략하면 참조 유형은 변경되지 않습니다.
다섯 번째 인수는 Microsoft 도움말에 따라 다음과 같습니다.
단일 셀을 포함하는 Range 객체를 지정합니다.
이 셀은 상대 참조의 기준점입니다.
Microsoft의 도움말은 여전히 불친절하고 의미가 잘 모르지만,
내용은 변경 전 또는 변경 후의 형식에 R1C1 형식을 지정했을 경우의,
상대 참조의 기점이 되는 셀을 지정하라는 것입니다.
※ 인수를 생략했을 경우는 이하의 실험용 매크로의 결과, 셀 함수로부터 실행되었을 경우는, 셀 함수가 입력되고 있는 셀(Application.ThisCell). 매크로에서 실행되면 ActiveCell이 적용되는 것 같습니다.
즉, 이번 경우에는
네 번째 인수는 생략하여 절대 참조를 절대 참조로 유지하고 상대 참조를 상대 참조로 R1C1 형식으로 변환합니다.
다섯 번째 인수는 변경 후의 형식에 R1C1 형식을 지정했기 때문에 상대 참조시의 기점이 되는 셀(이번 경우에는 수식이 입력되어 있는 셀 그 자체)을 지정합니다.
실험용'*****************************************************************************
'[概要] ConvertFormula()関数の第5引数を省略した場合のR1C1形式の起点となるセルを調査する
'[戻値] R1C1形式の起点となるセルのアドレス
'*****************************************************************************
Public Function RelativeTo() As String
Dim str As String
str = Application.ConvertFormula("A1", xlA1, xlR1C1)
'A1セルからの相対位置の符号を反転 例:R[-1]C[-1] → R[+1]C[+1]
str = Replace(str, "-", "+")
RelativeTo = Application.ConvertFormula(str, xlR1C1, xlA1, , Range("A1"))
End Function
Reference
이 문제에 관하여(동일한 시트에서 동일한 수식을 선택하는 EXCEL 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takahasinaoki/items/9cd0e0cdc76c98382bc6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
여기에서는 다음 기사를 위한 참고 기사가 됩니다.
조건부 서식을 통합하는 EXCEL 매크로
만약 Range 객체의 프로퍼티에 FormulaR1C1이 없고 Formula밖에 없다면 실현이 불가능할까요?
실은 VBA에는 ConvertFormula라는 함수가 준비되어 있어 A1 형식의 수식을 R1C1 형식으로 변환할 수 있습니다.
위의 소스인 FormulaR1C1을 사용하고 있는 개소를 이하에 재기록하면 같은 결과를 얻을 수 있습니다.
변경 전
strFormulaR1C1 = ActiveCell.FormulaR1C1
변경 후 strFormulaR1C1 = Application.ConvertFormula(ActiveCell.Formula, xlA1, xlR1C1, , ActiveCell)
변경 전 If objCell.FormulaR1C1 = strFormulaR1C1 Then
변경 후 If Application.ConvertFormula(objCell.Formula, xlA1, xlR1C1, , objCell) = strFormulaR1C1 Then
중요한 것은 ConvertFormula() 함수의 네 번째 인수와 다섯 번째 인수입니다.
네 번째 인수는 Microsoft의 도움말에 따라 다음과 같습니다.
변환된 참조 형식을 지정하는 XlReferenceType 상수입니다.
이 인수를 생략하면 참조 유형은 변경되지 않습니다.
다섯 번째 인수는 Microsoft 도움말에 따라 다음과 같습니다.
단일 셀을 포함하는 Range 객체를 지정합니다.
이 셀은 상대 참조의 기준점입니다.
Microsoft의 도움말은 여전히 불친절하고 의미가 잘 모르지만,
내용은 변경 전 또는 변경 후의 형식에 R1C1 형식을 지정했을 경우의,
상대 참조의 기점이 되는 셀을 지정하라는 것입니다.
※ 인수를 생략했을 경우는 이하의 실험용 매크로의 결과, 셀 함수로부터 실행되었을 경우는, 셀 함수가 입력되고 있는 셀(Application.ThisCell). 매크로에서 실행되면 ActiveCell이 적용되는 것 같습니다.
즉, 이번 경우에는
네 번째 인수는 생략하여 절대 참조를 절대 참조로 유지하고 상대 참조를 상대 참조로 R1C1 형식으로 변환합니다.
다섯 번째 인수는 변경 후의 형식에 R1C1 형식을 지정했기 때문에 상대 참조시의 기점이 되는 셀(이번 경우에는 수식이 입력되어 있는 셀 그 자체)을 지정합니다.
실험용
'*****************************************************************************
'[概要] ConvertFormula()関数の第5引数を省略した場合のR1C1形式の起点となるセルを調査する
'[戻値] R1C1形式の起点となるセルのアドレス
'*****************************************************************************
Public Function RelativeTo() As String
Dim str As String
str = Application.ConvertFormula("A1", xlA1, xlR1C1)
'A1セルからの相対位置の符号を反転 例:R[-1]C[-1] → R[+1]C[+1]
str = Replace(str, "-", "+")
RelativeTo = Application.ConvertFormula(str, xlR1C1, xlA1, , Range("A1"))
End Function
Reference
이 문제에 관하여(동일한 시트에서 동일한 수식을 선택하는 EXCEL 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takahasinaoki/items/9cd0e0cdc76c98382bc6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)