- 締切済み
エクセルマクロでプログラミングを勉強しています。
エクセルマクロでプログラミングを勉強しています。 ■ ■ ■■ ■ ■ を 101 110 101 と2次元配列化するプログラムについて教えて下さい。 また、もしよろしかったら 1 311 11■ ■ 2■■ 11■ ■ と表されるプログラムについても教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
対象範囲の全セルの値を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)
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)
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