Excel 을 사용하여 반복 계산을 수행하는 방법
스도쿠는 논리적 수수께끼로 알려져 있습니다. (3 년 전 저는 완전히 빠져들었습니다.) 숫자 1-9 를 일정한 규칙에 따라 칸에 넣으라고 요청합니다. (더 많은 스도쿠 자료는 인터넷에서 찾을 수 있습니다.)
한 연구원이 엑셀 팀에 있을 때 Coridan 은 Excel 의 공식을 사용하여 스도쿠 게임을 해결하고 인터넷에 제공한다고 썼습니다 (여기). 댄의 스프레드시트는 매우 훌륭해서 많은 비디오 게임으로 해결되었다. VBA 또는 기타 스크립트를 사용하여 문제를 해결하는 대신 반복 계산 기능이 있는 Excel 에 의존합니다. 이것은 상당히 냉정하고 인기 있는 다운로드가 되었지만, 스프레드시트에 대해 내가 개선할 수 없다면 얼마나 복잡한지 보고 싶다. 사실, 각 셀에는 고유한 공식이 있습니다. VBA 가 유지 관리하고 디버깅하는 VBA 는 이러한 모든 다른 공식을 작성하지 않기 때문에 VBA 가 작성한 공식을 사용해야 합니다. 자동 방법은 불가능합니다.
Dan 의 스프레드시트를 보면, 내 자신의 버전의 스도쿠 해석기는 공식을 푸는 데 쓰이는 것이 아니라 공식이 비교적 이해되는 곳이며, 몇 가지 독특한 공식이 있다고 생각한다. (윌리엄 셰익스피어, 햄릿, 독서명언) 말할 필요도 없이, 그것은 구축 하기 어려운 되고있다, 하지만 난이 같은 반복 모델을 만들기 위해 다른 방법을 시도에 대 한 지식을 많이 배운 것 같아요, 모델은 잘 수행 하 고 합리적인 유지 보수 및 이해 되었습니다. 제 생각에는 Excel 공식 언어를 고려하는 합리적이고 유익한 추상 공식을 배우는 방법도 있을 수 있습니다. 저는 항상 블로그에 이 스프레드시트를 만드는 과정과 반복 공식을 사용하여 Excel 공식 언어의 강력한 기능을 보여 주고 싶었습니다. 왜냐하면 유용한 순환 참조와 반복 계산을 보여 주기 때문입니다. 그리고 저는 여기서 그것을 매우 흥미롭게 만들 필요가 없다고 생각했기 때문입니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 예술명언) 많은 사람들이 더 강력한 해결자, 많은 스프레드시트, 공식만 사용했지만, 솔루션을 만드는 방법을 설명하고 싶습니다. 몇 가지 공식을 공유하고자 합니다. 사람들이 유용하다는 것을 알게 될 것입니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 성공명언)
전제 조건
스도쿠가 엔트리 레벨 스프레드시트가 아닌 스프레드시트를 해결하기 위해 스프레드시트를 작성합니다. 좋은 공식 외에도 반복의 개념을 이해해야 한다. Chris 는 그의 초기 post iteration 과 Conway 의 life game 에서 이 주제를 잘 설명했기 때문에 반복하고 싶지 않습니다. 반복에 대해 이미 알고 있다고 가정하겠습니다. 둘째, 우리는 이름 지정 범위를 매우 많이 사용하고 나를 위해 뭔가를 해야 합니다. 새로운 이름 관리자는 매우 유익합니다 (공식 구조 개선 4 부: 관련 책의 이름 정의 참조). 또한 업무와 범용 이름 지정 범위에 대한 지식을 감당해야 합니다. (그러나 나는 새로운 경험 공식이 될 수 있는 기술을 보여 주어야 한다. 심지어 사용자에게도) 마지막으로, 너는 적어도 Excel 의 배열 기호에 익숙해야 한다.
감사위원회를 설립하다
지지 않은 것에 대해, 나는 일련의 마더보드를 만들기 시작할 준비가 되어 있다. 정말 단코: 9x9 의 보드 투자, 9x9 의 보드 솔루션, 상자당 27x27 보드의 가능한 가치. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 실패명언) 저는 행 높이, 열 폭, 글꼴, 비율 등을 변경하여 그렇게 했습니다. 모든 셀은 작은 정사각형이며 테두리와 채우기로 다음과 같은 결과를 얻습니다.
입력 및 합리적인 솔루션 보드는 직관적입니다 (입력 보드는 왼쪽 위 모서리에 있으며, 여기서 해결할 문제를 입력할 수 있습니다. 해결 방법은 보드가 표시하려는 정답입니다). 판자가 가치가 있을 수도 있어요. RMS 국에 전화했는데 좀 번거로워요. 각 상자는 RMS 보드의 3x3 셀에 배치되고 해결되기 때문에 27x27 입니다. 각 9 셀이 숫자 1-9 를 나타내는지 여부는 여전히 해당 솔루션의 실제 값이며, 특정 셀의 입력/해석 셀에 사용할 수 있는 일련의 값은 빈 3×3 "큰 셀" 에 속하지 않는 모든 숫자의 모음입니다. 그렇지 않다면, 이 위원회의 목적/용도는 나중에 분명해야 한다. 이제 위의 각 큰 셀에 8: 59 부터 가능한 모든 값을 채워 보겠습니다.
유효값 국을 기입하다
우리는 단일 공식을 만들어 다양한 숫자 1-9 를 채우고 싶다. 이를 바탕으로 연속 열 공식을 찾은 다음 숫자가 유효하지 않은 논리적 공백을 추가합니다. 이 공식은 스프레드시트의 일반 공식보다 좀 복잡하기 때문에 먼저 전체 공식을 분해합니다. 이렇게 생겼습니다.
= 국방부 (열 (A 1)-1, 3)+ 1+ 국방부 (열 (a1
입력 왼쪽 위 셀의 RMS office 인 경우 전체 RMS office 가 로드되므로 결과는 다음과 같습니다.
당신이 해야 할 일은 선택적 붙여넣기 | 공식 또는 CTRL 입력입니다. 그렇지 않으면 모든 아름다운 형식이 엉망이 될 수 있습니다.
이 공식을 깨고 행과 열이 행 또는 열에 대한 참조를 반환하고 일부 참조를 전달합니다. 이 함수 상자 A 1 을 통해 이 공식에서는 상승으로 시작하는 숫자를 줄 것이기 때문입니다. 첫 번째 섹션의 수식은 모듈러 함수를 사용하여 숫자 열을 0-2 의 숫자로 변환한 다음 1 결과 1-3 을 추가합니다. 이를 위해 0, 3 또는 6 을 추가하여 행 함수에서 사용하는 모듈 함수의 결과에 따라 행 번호를 결정합니다.
둘째, gnarly 공식과 비슷하기 때문에 어디서든 사용할 수 밖에 없습니다. 이 공식을 빌려서 셀 밖으로 옮겨서 명명된 범위로 옮기겠습니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 스포츠명언) 이를 통해 모든 논리 공식을 간단하고 이해하기 쉬운 이름으로 추상화할 수 있습니다. 더 좋은 이름이 없기 때문에, 나는 그것을' 일케톤알칼리' 라고 부르고, 같은 정확한 공식을 가지고 있는데, 이것은 우리가 방금 세운 것이다. 상대 참조의 배경 (즉, 현재 셀인지 여부) 은 명명된 범위를 생성할 때 있는 셀로 구성되기 때문에 처음에 A 1 셀을 선택한 다음 새 명명된 범위를 만들어 대차대조표 전체에서 공식이 유효하도록 하는 것이 중요합니다.
이것이 우리가 싱크대의 3 열 주위의 모든 널빤지를 허용하는 이유이다.
이제, 우리는 우리의 새로운 이름을 국에 넣어 테스트할 수 있습니다. 이렇게 말이죠.
여기서 CTRL+ 를 누르는 것이 수식의 모든 셀에 유효한 값을 설정하는 가장 쉬운 방법입니다. 먼저 전체 게임을 선택한 다음 공식에 입력하십시오. 키를 누르지 않고 Ctrl+Enter 를 두 번 누르면 방금 입력한 모든 셀을 수식에 채울 수 있습니다 (형식을 혼동하지 마십시오).
결산국을 건립하다
우리는 기본 RMS 가 상자를 남겼다는 것을 고려할 것입니다. 우리의 현재 솔루션은 입력이 아닌 것처럼 보이지만 이를 위해서는 회로 기판을 해결하기 위해 무언가가 필요합니다. 첫째, 최소한 솔루션에는 입력국의 모든 상자가 포함될 것입니다. 먼저 가장 간단한 방법으로 이것을 하고 빈 상황을 따라잡아라. 해판에서 모든 셀을 동일하게 만들고 입력 셀이 비어 있지 않으면 해당 셀 입력 보드에 상대 참조를 사용하면 됩니다. 가장 쉬운 방법은 다음 공식을 사용하는 것입니다 (표시된 테이블에서 D 16 셀).
= If (개인 재산, 개인 재산, "")
마찬가지로 Ctrl+Enter 를 사용하여 해당 셀을 채웁니다. 이제 명명 범위를 더 재사용 가능하고 의미 있게 사용할 수 있는 기본 작업이 생겼습니다.
우리 이름 onetonine 처럼 추상적인 개념이 세포에서 세포를 올바르게 입력하는 용액을 가리켜 위원회를 이름으로 만들 수 있도록 한다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 예술명언) 우리는 어떤 점에서 모든 보드와 비슷한 일을 해야 하기 때문에 각 보드에 대해 이름 지정 범위 (in_board, sol_board, val_board 선택) 를 만든 다음 해판 (in _ cell _ froard) 에서 D4 클래스 그런 다음 이 변경 공식을 사용하여 = if (in_cell_from_sol, in_cell_from_sol, "") 입니다. 이를 위해서는 D 16 이 필요합니다.
물론, 지금까지, 우리는 단지 우리의 공식을 더 이상 만들지 않을 뿐이지만, 나를 믿어라, 이 개념은 이미 생활 절차가 되었다. 같은 RMS 유닛으로 보드 유닛을 해결하는 것은 유일하게 번거로운 일이다. Sol_cell_from_val 이름은 다음과 같습니다.
= 지수 (sol_board, 끊기 (열 (main! A1)-1)/3)1,인터럽트 (열 (주! A1)-1)/3)+1)
이것은 반드시 세포의 P4 에 의해 결정되어야 한다. 이 수식에서는 27x27 이닝의 현재 셀 변환 좌표를 연산자 및 INT 와 함께 9x9 판에 줄을 붙인 다음 색인을 사용하여 셀 sol_board 에 해당하는 좌표를 얻습니다.
두 공식을 테스트하는 방법은 서로 다른 셀의 RMS 국에서 참조 상자에서 이름 관리자를 클릭하는 것입니다. 당신이 있는 세포에 따르면, 다른 세포의' 춤추는 개미' 를 볼 수 있습니다. 세포는 그에 상응하는 해결책을 원합니다.
이제 우리를 실제 난제에 빠뜨릴 수 있는 몇 가지 기초지식이 있습니다. 입력을 해판과 인민폐로 확산시키는 것에 대한 정보를 참고하시기 바랍니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 성공명언) 이것은 혼란 스럽습니다. 우리는 다음을 사용할 것입니다:
그것을 입력하세요, 솔루션 보드는 이렇게 해야 합니다. 평방제곱근이 작동하도록 모든 유효한 판 셀에 대해 다음 공식을 사용합니다.
= If (sol _ cell _ from _ val
즉, 기존 스토리지 단위는 해당 셀이 해결되고 해당 값이 현재 단항 값이 아닌 경우 기존 값으로 가려집니다.
이를 통해 다음과 같은 이점을 얻을 수 있습니다.
이제 우리는 실제로 게임의 규칙과 전략에 따라 해결책을 제시하는 데 도움이 되는 몇 가지 일을 하려고 합니다.
일부 노선의 해국을 조사하다.
게임의 주요 규칙은 어떤 행, 열 또는 3x3 상자에서도 두 개의 동일한 숫자를 가질 수 없다는 것입니다. 규칙을 추가하기 시작합니다. 즉, 행에 두 개 이상의 숫자가 있을 수 없으며 열과 큰 상자에 있습니다. 예를 들어 첫 번째 행의 두 번째 큰 셀에서 숫자 4, 2, 7 또는 9 는 모두 이 규칙 때문이 아닐 수 있습니다. 이렇게 하면 임의 셀의 빈 RMS 를 1) 로 설정할 수 있습니다. 이는 솔루션에 존재하지 않습니다 (이것이 바로 최종 Onetone RMS 셀의 공식), 2), line 의 해석에는 현재 가치 Onetone 과 같은 위원회가 포함되어 있습니다. 조건 # 1 은 과거의 onetonine 디스플레이 (즉, 현재 큰 셀을 해결할 방법이 없음) 이므로 우리가 할 수 있는 것은 논리 # 2 를 넣는 것입니다. 이 논리는 다음과 같이 표현할 수 있습니다.
= If (COUNTIF (sol_row_from_val, Onetone) "0, ",Onetone)
여기서 sol_row_from_val 은 다음과 같습니다.
= 지수 (sol_board, 끊기 (열 (main! A65438+a1)-1)/3)1+0,0)
마찬가지로 P-4 에서 입력해야 합니다.
그래서, 이것들을 조합하면, 우리는 다음과 같은 것을 얻을 수 있습니다.
= If (sol _ cell _ from _ val
그 중에서도 간단하지 않고, 적어도 이해할 수 있는 것이 아니라, 당신에게 효과적인 가치국을 제공할 수 있습니다. 이렇게 보입니다.
열 및 (3x3) 큰 상자로 확장합니다.
"한 열에 같은 숫자가 두 개 없다" 와 "큰 상자 하나에 같은 숫자가 두 개 없다" 는 규칙을 구매할 때 같은 방법으로 1 이라는 두 가지 문제가 발생합니다. 인덱스는 영역의 한 셀, 한 행 또는 열 또는 전체 영역과 2 만 반환하므로 sol_bigbox_from_val 직접 사용 인덱스를 생성할 수 없습니다. 이것은 이달 말부터 세 가지 번거로운 COUNTIFs 또는' D 공식을 모두 함께 만들 것이다.
첫 번째 문제를 해결하기 위해 오프셋 인쇄를 사용할 수 있습니다. 오프셋 인쇄를 사용하여 다른 참조를 만들 수 있기 때문입니다. 그러나 오프셋 인쇄가 불안정하기 때문에 도로에서 성능 문제가 발생할 수 있습니다. 더 좋은 해결책은 인덱스에서 두 번 언급한 alliance (Excel-colon 의 alliance 연산자 사용) 를 꺼내어 3x3 범위를 얻는 것입니다. P-4 의 입력인 sol_bigbox_from_val 에 대한 다음 공식을 제공합니다.
= 지수 (sol_board, 끊기 (열 (main! A1)-1)/9) * 3+1,인터럽트 (열 (주! 그리드 a1)-1)/9) * 3+1): 지수 (sol_board, 인터럽트 ( A 1)-1)/9) * 3 +3, 인터럽트 (열 (주! A 1)-1)/9) * 3 +3)
이제 우리는 그것을 제외하고는 이 공식을 선택할 수 있다. 인터럽트, 회로 및 부분 분할은 9 개의 회로마다 RMS 국에서 3 개의 회로 블록을 아래로 이동하여 해당 국을 해결한다는 것을 의미합니다. 같은 단어를 완성하는 비슷한 표현식 열이 있다. 두 번째 참조는 첫 번째 참조와 정확히 동일하지만 두 열 사이에서 두 줄 아래로 오프셋되어 3x3 정사각형이 됩니다.
이 경우 onetonine 값이 이미 행, 열 또는 큰 상자에 있는지 여부를 포함한 큰 공식을 작성할 수 있습니다. 그러나 여기서 다시 추상화를 사용하여 기본 공식의 유효 값을 더 쉽게 만들 수 있습니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), Northern Exposure (미국 TV 드라마) "솔루션 셀과 내 전화 번호에 행, 열 또는 큰 상자가 있습니까?" 라는 이름으로 solution_in_rcb 라는 새 이름을 만들어 보겠습니다 이 이름은 참 또는 거짓 (실험의 일환으로 조건 # 2 는 단락이 아님) 만 반환합니다. 짧지는 않지만 실제로는 매우 간단합니다.
= or (COUNTIF (sol_row_from_val, ONETONINE) "0 0,countif (sol _ col _ from _ val)
이 새 이름을 사용하여 새 공식을 유효한 셀로 만듭니다.
= If (sol _ cell _ from _ val
이것은 이 공식보다 더 쉽게 이해할 수 있을 뿐만 아니라, 몇 가지 명확한 점을 이끌어 낼 수 있습니다. 단 하나의 가능한 해결책이 있습니다.
그래서 우리는 몇 가지 해결책을 볼 수 있지만, 관건은 이 위원회의 해결책을 그들에게 먹이는 것이다. 이것이 반복의 유용성이다. 다음에는 반복과 몇 가지 공식 기술을 사용하여 스도쿠를 해결할 것이다.