짝수와 확률 분리 (Microsoft Excel)
Dimitris는 A 열에 일련의 정수 값을 가지고 있습니다. 그는 B 열의 홀수 값과 C 열의 짝수 값을 표시하는 방법을 원합니다. 그는 값이 공백없이 연속 된 셀에 있고 또한 오름차순으로. Dimitris는 이러한 방식으로 데이터를 처리하기 위해 매크로가 필요한지 궁금합니다.
짧은 대답은 실제로 매크로에 의존하지 않고도이 작업을 수행 할 수 있다는 것입니다. 그러나 이러한 유형의 처리를 많이 수행해야하는 경우 실제로 매크로를 사용하는 것이 더 유용 할 수 있습니다.
먼저 비 매크로 접근 방식을 살펴 보겠습니다. 원하는 경우 열 A의 값이 홀수인지 짝수인지 확인하고 열에 적합한 경우 값을 복사하는 간단한 수식을 열 B와 C에 작성할 수 있습니다. 예를 들어, B 열에 다음을 포함 할 수 있습니다.
=IF(ISODD(A1),A1,"")
C 열에서 ISODD를 ISEVEN으로 바꾸면됩니다. 이러한 수식을 아래로 복사하면 B 열에는 홀수 값만 포함되고 C 열에는 짝수 값만 포함됩니다. 물론 문제는 결과가 Dimitris가 찾고있는 것과 일치하지 않는다는 것입니다. 그는 연속 셀 (공백 없음)에있는 값을 원하고 오름차순으로 원합니다.
물론 원하는 결과를 얻기 위해 추가 단계를 수행 할 수 있습니다. 예를 들어 B 및 C 열의 결과를 복사하고 값을 다시 붙여 넣은 다음 (수식이 제거되도록) 결과를 정렬 할 수 있습니다. 이렇게하면 작업에 추가 단계가 추가됩니다.
단순히 배열 수식을 사용하여 훨씬 “깨끗한”결과를 얻을 수있는 방법이 있습니다. 값이 A1 : A100 셀에 있다고 가정 해 보겠습니다. B1 : B100 셀을 선택한 상태에서 수식 입력 줄에 다음을 입력합니다.
=IFERROR(SMALL(IFERROR(INDEX($A$1:$A$100,SMALL( IF(MOD($A$1:$A$100,2)=1,ROW($A$1:$A$100)),ROW( $A1:$A$100))),""),ROW()),"")
이것은 모두 단일 공식이라는 것을 기억하십시오. 배열 수식으로 설계되었으므로 Ctrl + Shift + Enter를 입력하여 종료합니다. 결과적으로 B 열의 연속 셀에 오름차순으로 홀수 값이 있습니다. C 열에 짝수 값을 가져 오려면 먼저 B1 : B100을 C1 : C100에 복사합니다. 그런 다음 C1 : C100 범위를 선택합니다. F2 키를 눌러 편집 모드로 들어가 공식 중간에있는 “= 1″을 “= 0″으로 변경합니다.
다시 Ctrl + Shift + Enter를 눌러 수식을 종료합니다.
A1 : A100 범위에 공백이 있거나 범위에 텍스트 값이 있으면이 수식이 제대로 작동하지 않습니다. 공백이 작동하지 않는 이유는 공식적으로 0으로 처리되고 0이 짝수로 간주되어 C 열에 표시되기 때문입니다. 홀수 값을 결정하는 대체 공식 (B 열)은 다음 배열 공식을 사용하는 것입니다. B1 셀 :
=IFERROR(SMALL(IF(MOD($A$1:$A$100,2)>0,$A$1: $A$100,"x"),ROW()),"")
잠재적 인 “빈 셀”문제를 처리하기 위해 셀 C1에서 다음 배열 수식을 사용할 수 있습니다.
=IFERROR(SMALL(IF((MOD($A$1:$A$100,2)=0)*NOT( ISBLANK($A$1:$A$100)),$A$1:$A$100,"x"),ROW()),"")
결과를 얻기 위해 필요한만큼의 셀 아래로 B1 : C1을 복사합니다.
앞서 매크로를 사용하여 가치를 처리하는 것이 더 유익 할 수 있다고 언급했습니다. 이유는 간단합니다. 필요한 경우 중복 값을 쉽게 제거 할 수 있고 공백 and 텍스트 값을 무시할 수 있습니다. 이러한 매크로를 개발할 수있는 방법에는 여러 가지가 있습니다. 처리 할 셀을 선택하고 해당 셀의 오른쪽에있는 두 열을 지운 다음 해당 열에 승산과 짝수를 입력해야하는 접근 방식을 선택했습니다.
Sub OddsEvens() Dim rSource As Range Dim c As Range Dim sTemp As String Dim iVal As Integer Dim bGo As Boolean Dim sCols As String Dim vMsg As Variant Dim lOddCol As Long Dim iOddPtr As Integer Dim lEvenCol As Long Dim iEvenPtr As Integer Dim iOdds(999) As Integer Dim iEvens(999) As Integer Dim J As Integer Set rSource = Selection If rSource.Columns.Count = 1 Then lOddCol = rSource.Column + 1 lEvenCol = rSource.Column + 2 sCols = Chr(lOddCol + 64) & ":" sCols = sCols & Chr(lEvenCol + 64) sTemp = "The contents of columns " & sCols sTemp = sTemp & " will be deleted. Ok to proceed?" vMsg = MsgBox(sTemp, vbYesNo, "Odds and Evens") If vMsg = vbYes Then Application.ScreenUpdating = False Range(sCols).Clear iOddPtr = 0 iEvenPtr = 0 For Each c In rSource bGo = True ' Is the cell empty? If IsEmpty(c.Value) Then bGo = False ' Does the cell contain non-numeric value? If Not IsNumeric(c.Value) Then bGo = False If bGo Then iVal = c.Value If Int(iVal / 2) * 2 = iVal Then ' Even number ' Check to see if duplicate For J = 1 To iEvenPtr If iEvens(J) = iVal Then bGo = False Next J If bGo Then iEvenPtr = iEvenPtr + 1 iEvens(iEvenPtr) = iVal End If Else 'Odd number ' Check to see if duplicate For J = 1 To iOddPtr If iOdds(J) = iVal Then bGo = False Next J If bGo Then iOddPtr = iOddPtr + 1 iOdds(iOddPtr) = iVal End If End If End If Next c ' Stuff values into proper columns For J = 1 To iOddPtr Cells(rSource.Row + J - 1, lOddCol) = iOdds(J) Next J For J = 1 To iEvenPtr Cells(rSource.Row + J - 1, lEvenCol) = iEvens(J) Next J ' Sort values in Odd column sTemp = Chr(lOddCol + 64) & rSource.Row & ":" sTemp = sTemp & Chr(lOddCol + 64) & rSource.Row _ + iOddPtr - 1 Range(sTemp).Select Selection.Sort key1:=Range(Chr(lOddCol + 64) _ & rSource.Row), Order1:=xlAscending ' Sort values in Even column sTemp = Chr(lEvenCol + 64) & rSource.Row & ":" sTemp = sTemp & Chr(lEvenCol + 64) & rSource.Row _ + iEvenPtr - 1 Range(sTemp).Select Selection.Sort key1:=Range(Chr(lEvenCol + 64) _ & rSource.Row), Order1:=xlAscending rSource.Select Application.ScreenUpdating = True End If End If End Sub
매크로는 선택한 셀의 값을 두 배열 (iEvens 및 iOdds) 중 하나로 채워 작업을 수행합니다. 이것은 매크로가 값의 중복을 쉽게 확인할 수 있도록 수행됩니다. 셀이 비어 있지 않은 경우에만 숫자가 포함되고 해당 숫자가 중복되지 않은 경우 값이 적절한 배열에 추가됩니다. 그런 다음 값이 두 열에 다시 채워지고 해당 값이 정렬됩니다.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (6767)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.