2

Excelでマクロを作成する方法はほとんどわかりません。

4

7 に答える 7

5

Google で多くの例を見つけることができます。

一番最初の結果は、David Gainer のブログからの投稿で、Conway の Game of Life を使用して循環参照式と反復について教えています (VBA は関係ありません)。

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

于 2009-02-04T16:08:09.377 に答える
4

これはずっと前に行うべきだったのですが、これが私のバージョンのコンウェイの人生の 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 メソッドを実行します。

于 2009-03-08T22:49:39.053 に答える
3

2つのマクロが必要になります。最初のものは、セルが正方形になるようにゲームシートをフォーマットする必要があります。

ユーザーにこのマクロを実行してもらいます。その後、彼女は生きているセルごとに1を入力する必要があります。条件付き書式を使用して、セルを完全に黒にします(値!= 0の場合は背景=黒)

次に、バックグラウンドシート(​​別のシート)の次のステップを計算する2番目のマクロがあります。相対セル配置(ActiveCellに対して相対)と2つのネストされたループを使用します。これが完了したら、すべての値をバックグラウンドシートからゲームシートにコピーします。

于 2009-02-04T15:45:59.857 に答える
0

Excel が間違った選択であると言うのはなぜですか?

これを解決するには、Excel が最適な方法だと思います。

Excel はこれを 1 行で解決します: IF(OR(SUM(B2:D4)-C3=3,AND(SUM(B2:D4)-C3=2,C3=1)),1,0)

*上記は、セル C3 の次世代値を返す式です。

デモは次のとおりです: https://docs.google.com/open?id=0B4FcWULw3iQidlZSdG9GRDh0TXM

この種のものをゼロから実装しなければならない状況にある場合は、関数型プログラミングが最善の方法です。それ以外の場合、Excel は非常にうまく機能します。なんで?Excelは、純粋な関数のみを入力することを強制するシステムだからです。おわかりのように、このライフ ゲームをシミュレートする鍵は、細胞の各状態が前の状態の純粋な機能であることを理解することです。Excel では、当然、このように考える必要があります。

于 2012-11-24T19:13:41.963 に答える
0

それを検索して、コードを見てください。多くの人が Excel で完全なゲームを作成することを趣味にしています。

例: http: //www.geocities.jp/nichikada/pac/

于 2009-02-04T15:36:27.537 に答える
-1

Excel での循環参照に関する別のチュートリアルがここにあります: http://chandoo.org/wp/2009/01/08/timestamps-excel-formula-help/

これは、循環参照を使用してタイムスタンプを挿入する方法を説明しています。

于 2009-02-05T02:42:14.167 に答える
-2

この種の問題に対して Excel を選択するのは間違いなく間違っています。それがどのように可能になるかについては、まずライフ ゲームについて学び、次にExcel で使用するビジュアル ベーシックについて学びます。

于 2009-02-04T15:36:43.060 に答える