본문 바로가기

엑셀 & VBA

1-5. 숫자야구 - 같은 숫자가 있는지 확인하기

 A5 부터 A14까지 1부터 10까지의 숫자를 적어두겠습니다. 게임을 할때 B5부터 B14에다가 예상하는 숫자를 적으면 C5 에서 C14까지 예측값이 정답과 어떤 관계인지 알려주는 것을 만들어 보겠습니다.

 예시의 숫자는 297이므로 B5에다가 123으로 찍게 되면 C5에는 숫자 한개가 맞고 위치는 맞지 않으니 0S1B라고 출력이 되어야 합니다.

 

 저렇게 표시가 되는 시스템을 만들기 위해서 예측을 한 B에 있는 숫자를 D부터 F에다가 분해해보겠습니다. 분해하는 것은 https://yijh0611.tistory.com/6 이 글에 있는 방법과 동일합니다.

 

 엑셀에는 아주 좋은 기능이 있어서 C1에서 E1까지 드래그후 복사 D5에다가 붙여넣기 하면 바로 숫자가 분해됩니다. 이전에 만들어둔 함수를 그대로 복사해주는 기능입니다.

함수 복사

 

함수 붙여넣기

 그리고 아래 사진과 같이 오른쪽 네모를 아래로 드래그 하면 동일하게 아래에 있는 숫자들까지 함수가 복사되어 분해가 됩니다.

아래로 드래그 하면 함수 복사

 이제 분해된 숫자를 정답과 비교를 해보겠습니다. 결과는 0S0B 부터 3S까지 총 10가지의 경우가 있습니다. 이 모든 경우를 IF문만 이용해서 구분을 하려면 IF 문이 많이 필요합니다. 그래서 이번에도 1-4 중복된 숫자 확인할때 사용했던 점수를 이용하려고 합니다. 숫자와 위치까지 맞으면, 1점을 주고 숫자만 맞아도 1점을 주도록 하겠습니다. 이 점수를 따로 더해서 S와 B의 개수를 파악해보겠습니다.

 

 이제 점수를 구하기 위해 함수를 입력하겠습니다. G 부터 I 셀까지는 숫자와 자리까지 일치하는 1점을 주는 함수를 적겠습니다. G5셀에 =if(D5=C$1,1,0) 이라고 입력합니다. C1에 $를 중간에 넣는 방법은 함수를 입력할때 C1셀을 누르면 C1이라는 글자가 자동으로 입력이 되는데, 이때 키보드 F4키를 두번 누르면 됩니다. 이렇게 하는 이유는 드래그해서 함수를 복사하기 위함인데, $표시는 함수를 복사하더라도 위치를 고정한다는 의미입니다. 이제 네모를 아래 사진과 같이 드래그 해주면 함수가 다 복사되어 1점인지 아닌지 알 수 있습니다.

함수 복사
함수 복사

 B5셀에 205같은 숫자를 입력해보면 1점이 잘 나오는 것을 알 수 있습니다. J부터 L의 셀에는 우리가 예측했던 숫자를 가지고 있는지 판단하고 1점을 추가해주는 함수를 넣어보겠습니다. 이번에는 SEARCH 함수와 ISNUMBER 함수를 사용하겠습니다. SEARCH 함수는 검색하고자 하는 값이 몇번째에 있는지 숫자로 알려주는 함수입니다. 예를 들어 123안에 2라는 숫자가 있는지 알아보기 위해 =SEARCH(2,123)이라고 함수를 입력하게 되면 2는 123중에 두번째 이므로 2라는 값이 출력됩니다. 만약에 찾으려고 하는 값이 없다면 #VALUE!라는 값을 반환합니다. 예를 들어서 2가 345안에 있는지 확인하기 위해 해당 함수를 사용한다면 =SEARCH(2,345)라는 함수를 입력하면 되고, 2는 345안에 없으므로 #VALUE!라는 결과가 나오게 됩니다.

 

 다음으로 사용할 함수는 ISNUMBER입니다. ISNUMBER은 숫자인지 아닌지를 알려주는 함수입니다. 숫자면 TRUE 숫자가 아니면 FALSE이라는 값이 나옵니다. 예를들어 =ISNUMBER(1)이라고 입력하게 되면 1은 숫자이므로 TRUE라는 값이 나옵니다. 앞의 함수와 결합하게 되면 #VALUE!라는 값이 나오면 FALSE가 나오고, 위치 값인 2라거나 3과 같은 1이 아닌 숫자를 알려주더라도 모두 TRUE가 나오게 됩니다. 이때 IF 함수를 사용하여 TRUE이면 1이라는 값을 저장하게 하면 1점의 점수를 줄 수 있게 됩니다.

 

 J5에 숫자가 있으면 1을 입력하는 함수를 입력하겠습니다. 함수는 다음과 같습니다. =IF(ISNUMBER(SEARCH(D5,$A$1))=TRUE,1,0) 이렇게 함수를 입력하게 되면 우리가 원하는 결과를 얻을 수 있습니다. 이제 이 함수를 드래그 해서 J5 부터 L14까지 복사해줍니다.

 

 이제 G부터 I까지 더한 값은 S의 값이 되고, J부터 L까지 더한 값에서 G부터 I까지 더한 값을 빼면 B의 값을 알 수 있습니다. 여기서 숫자를 빼는 이유는 위치가 맞는 경우인 S의 경우가 숫자만 맞는 B의 경우를 포함하기 때문입니다. 예를 들어 답이 297이고, 205라고 찍었을때 2는 자리와 숫자가 동시에 맞으므로 1점을 줬는데, 뒤에서 숫자가 맞으니까 1점을 중복해서 주게 됩니다. 하지만 결과는 1S0B가 나와야 되므로 값을 빼서 0으로 만들어줘야됩니다.

 

 M5에는 =SUM(G5:I5)를 입력하고, N5에는 =SUM(J5:L5)-M5를 입력해주면 S와 B의 개수를 알 수 있게 됩니다. 이 함수 또한 드래그 해서 14번째 행까지 채워줍니다. 이제 문자열을 합쳐서 결과를 C에 출력해주기만 하면 됩니다. 문자열 합치기는 &를 사용하면 됩니다. C5에 =M5&"S"&N5&"B"이라고 입력해주면 우리가 원하는 결과가 출력됩니다. 이때 S와 B에 " "을 해줘야 되는데, 이는 문자열이라는 의미입니다. 이 큰따옴표를 입력하지 않으면, 오류가 나게 됩니다. 하지만 =M5&"S"&N5&"B" 이렇게만 입력하게 되면 숫자를 찍지 않았을때는 000을 입력한것이나 마찬가지가 되는데, 이에 해당하는 결과가 나오게 되어 답을 미리 알려줄 수도 있게 됩니다. 이런 문제를 방지하기 위해 IF문을 사용하겠습니다. C5에 =IF(B5>122,M5&"S"&N5&"B","")이라고 입력해주겠습니다. 이렇게 되면 힌트를 미리 알려주지 않게 됩니다.

숫자야구.xlsx
0.02MB