문제

저는 Excel에서 매크로를 만드는 방법을 거의 모릅니다.

도움이 되었습니까?

해결책

오래 전에이 일을 했어야했지만 여기에 Conway의 Life in Excel 버전이 있습니다.

코드의 해킹은 다음과 같습니다. 완벽한 솔루션 (이것에 나이를 보내지 않았 음)은 결코 나이를 소비하지 않았지만 약간의 비트를 골라 낼 수 있습니다.

Private arrGrid(100, 100) As Boolean
Private arrGridNextGeneration(100, 100) As Boolean

Private Sub PopulateParentArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

If Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color Then

    arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) = True
Else
    arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) = False
End If
DoEvents
Next
End Sub

Private Sub ApplyParentArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

If arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) Then

    Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color
Else
    Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("B1").Interior.Color
End If
    DoEvents
Next

End Sub

Private Sub ApplyNextGenerationArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

    If arrGridNextGeneration(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) Then

        Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color
    Else
        Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("B1").Interior.Color
    End If
    DoEvents
Next

End Sub

Private Function GetNeighbourCount(ByVal pintRow As Integer, ByVal pintColumn As Integer) As Integer

Dim intCount As Integer

intCount = 0

For r = pintRow - 1 To pintRow + 1

For c = pintColumn - 1 To pintColumn + 1

If r <> pintRow Or c <> pintColumn Then
If arrGrid(r, c) Then

    intCount = intCount + 1
End If
End If
Next c
Next r

GetNeighbourCount = intCount

End Function

Private Sub PopulateNextGenerationArray()

Dim intNeighbours As Integer

For r = 0 To 100
For c = 0 To 100

If r > Sheet1.Range("C2:AM20").Rows(0).Row Then
If r <= Sheet1.Range("C2:AM20").Rows(Sheet1.Range("C2:AM20").Rows.Count).Row Then
If c > Sheet1.Range("C2:AM20").Columns(0).Column Then
If c <= Sheet1.Range("C2:AM20").Columns(Sheet1.Range("C2:AM20").Columns.Count).Column Then



 intNeighbours = GetNeighbourCount(r, c)
If arrGrid(r, c) Then
    'A1 cell
    If intNeighbours < 2 Or intNeighbours > 3 Then
        arrGridNextGeneration(r, c) = False
    Else
        arrGridNextGeneration(r, c) = True
    End If

Else
    'B1 cell
    If intNeighbours = 3 Then
        arrGridNextGeneration(r, c) = True
    Else
        arrGridNextGeneration(r, c) = False
    End If
End If
End If
End If
End If
End If
DoEvents
Next c
Next r

End Sub

Private Sub ActionLogic()


'Application.ScreenUpdating = False

PopulateParentArrayData
PopulateNextGenerationArray
ApplyNextGenerationArrayData

'Application.ScreenUpdating = True
End Sub

이것을 작동시키기 위해 셀 A1 검은 색의 배경을 만들어 셀 B1 흰색의 배경을 만들고 범위 C2 : AM20에 검은 배경을 추가하고 ActionLogic 메소드를 실행하십시오.

다른 팁

Google을 통해 많은 예제를 찾을 수 있습니다.

첫 번째 결과는 David Gainer의 블로그의 게시물로 Conway의 Life Game of Life를 사용하여 순환 참조 공식 및 반복에 대해 가르치고 있습니다 (VBA 관련 없음).

http://blogs.office.com/2007/11/02/iteration-conways-game-of-life

두 개의 매크로가 필요합니다.첫 번째는 게임 시트의 형식을 지정하여 셀이 정사각형이 되도록 해야 합니다.

사용자에게 이 매크로를 실행하도록 하세요.그 후에는 살아있는 각 세포에 대해 1을 입력해야 합니다.조건부 서식을 사용하여 셀을 완전히 검은색으로 바꿉니다(값이 != 0인 경우 배경 = 검은색).

이제 배경 시트(다른 시트)에서 다음 단계를 계산하는 두 번째 매크로가 있습니다.상대 셀 위치 지정(ActiveCell 기준)과 두 개의 중첩 루프를 사용합니다.이 작업이 완료되면 배경 시트의 모든 값을 게임 시트에 복사합니다.

그것을 검색하고 그들의 코드를보십시오. 많은 사람들이 Excel에서 전체 게임을하는 것을 취미로 만들었습니다.

전: http://www.geocities.jp/nchikada/pac/

왜 Excel이 잘못된 선택이라고 말합니까?

Excel이 이것을 해결하는 가장 좋은 방법이라고 생각합니다.

Excel은 이것을 1 라인으로 해결합니다 : if (sum (sum (b2 : d4) -c3 = 3 및 (sum (sum (b2 : d4) -c3 = 2, c3 = 1)), 1,0)

*위의 여기서 위는 셀 C3의 차세대 값을 반환하는 표현입니다.

데모는 다음과 같습니다.https://docs.google.com/open?id=0b4fcwulw3iqidlzsdg9grdh0txm

이런 종류의 물건을 처음부터 구현 해야하는 상황에 처한 경우 기능 프로그래밍이 가장 좋은 방법입니다. 그렇지 않으면 Excel은 정말 잘 작동합니다. 왜요? Excel은 순수한 기능 만 입력하도록하는 시스템이기 때문입니다. 알다시피,이 삶의 게임을 시뮬레이션하는 열쇠는 세포의 각 상태가 이전 상태의 순수한 기능이라는 것을 인식하는 것입니다. Excel은 자연스럽게 이런 식으로 생각하도록 강요합니다.

Excel의 원형 참조에 대한 또 다른 튜토리얼은 다음과 같습니다. http://chandoo.org/wp/2009/01/08/timestamps-excel-formula-help/

이것은 원형 참조를 사용하여 타임 스탬프를 삽입하는 방법을 설명합니다.

Excel은 분명히 이런 종류의 문제에 대한 잘못된 선택입니다. 그것이 어떻게 가능한지 : 먼저 삶의 게임 그리고 시각적 기본 Excel에서 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top