• 締切済み

エクセルマクロでプログラミングを勉強しています。

エクセルマクロでプログラミングを勉強しています。 ■ ■ ■■ ■ ■ を 101 110 101 と2次元配列化するプログラムについて教えて下さい。 また、もしよろしかったら     1   311 11■ ■  2■■  11■ ■ と表されるプログラムについても教えて下さい。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

対象範囲の全セルの値を0にする。   0のセルをどこかに作り、そのセルをコピー   形式を選択して貼り付け  値  編集ー置換でパターン色黒色+値0のセルを1に置換   検索する文字列 0  書式 黒色   置換後の文字列 1  書式  なし   全て置換   これで黒色のセルの値は1、黒色で無いセルは0となる。   ここで全てのセルのパターン色を「色なし」にすれば、状態がよく読み取れるが。 ーー その後下記を実行。セルの状態を配列に反映する。ほぼそのまま反映すれば仕舞い。 A1:C4範囲の例 Sub test01() Dim h(100, 100) Set a = Range("a1:c4") r = a.Rows.Count c = a.Columns.Count For k = 0 To r - 1 For l = 0 To c - 1 If a.Cells(k + 1, l + 1) = 1 Then h(k, l) = 1 If a.Cells(k + 1, l + 1) = 0 Then h(k, l) = 0 Next Next '--結果をシートセルで確認 Range("a11:C14") = h '---配列の中身1つづつ順次表示 For k = 0 To r - 1 For l = 0 To c - 1 MsgBox h(k, l) Next Next End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

 A B C 1 ■  ■ 2 ■ ■ 3 ■  ■ を 101 110 101 Sub Test()   Dim v As Variant, c As Range, i As Long   v = Range("A1:C3").Value   For Each c In Range("A1:C3")     v(c.Row, c.Column) = (c.Interior.Color = vbBlack) * -1   Next   '作成した2次元配列Vを確認   Range("A5").Resize(UBound(v, 1), UBound(v, 2)).Value = v End Sub

  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

Public Sub f() Dim r As Range Dim row As Integer, col As Integer Dim d() As Integer Dim x As Integer, y As Integer Set r = Sheet1.Range("b3:d5") row = r.Rows.Count col = r.Columns.Count ReDim d(row - 1, col - 1) For y = 1 To row For x = 1 To col If r.Cells(y, x).Interior.Color = VBA.ColorConstants.vbBlack Then d(y - 1, x - 1) = 1 Else d(y - 1, x - 1) = 0 End If Next Next For y = 0 To row - 1 For x = 0 To col - 1 Debug.Print d(y, x), Next Debug.Print Next End Sub 実行結果 f 1 0 1 1 1 0 1 0 1

関連するQ&A