Page 674 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼EXCELで 表の中の異なる領域 を数える方法 だん 03/1/30(木) 14:35 ┗Re:EXCELで 表の中の異なる領域 を数える方法 JuJu 03/1/30(木) 18:27 ┗Re:EXCELで 表の中の異なる領域 を数える方法 だん 03/1/30(木) 21:51 ┗Re:EXCELで 表の中の異なる領域 を数える... JuJu 03/2/3(月) 12:40 ┗Re:EXCELで 表の中の異なる領域 を数える... だん 03/2/4(火) 17:32 ─────────────────────────────────────── ■題名 : EXCELで 表の中の異なる領域 を数える方法 ■名前 : だん ■日付 : 03/1/30(木) 14:35 -------------------------------------------------------------------------
EXCELで 表の中の異なる領域 を数える方法 環境: Excel2000(win98se) タイトルのことを EXCEL VBA をつかってやりたいのですが、 どのようにプログラムを組むとできるのかが 考えつきません。どなたか助けて頂けますか? 下のような 5行*10列 の表に数字が記入されている状態です。 1234567890 ------------ 1 | 1112111311 2 | 1112211311 3 | 1122211311 4 | 1111111122 5 | 1444441122 # 領域の種類を表す数字: 1,2,3,4 この表を VBA を使って以下のような計算結果を出力するには どのようにすればよいでしょうか? 領域の種類(数字)別の個数: 1: 2つ 2: 2つ 3: 1つ 4: 1つ 領域の数の合計: 6つ よろしくお願いします。 だん |
だんさん、こんにちはぁ >タイトルのことを EXCEL VBA をつかってやりたいのですが、 >どのようにプログラムを組むとできるのかが >考えつきません。どなたか助けて頂けますか? > >下のような 5行*10列 の表に数字が記入されている状態です。 > > 1234567890 > ------------ >1 | 1112111311 >2 | 1112211311 >3 | 1122211311 >4 | 1111111122 >5 | 1444441122 > ># 領域の種類を表す数字: 1,2,3,4 ラベリングですか? もしそうであれば、画像処理のアルゴリズムを集めた本を一冊買っておくと便利ですよ。 方法はいくつもあるので、一例です。 (塗りつぶしのアルゴリズムを使用しています) Sub Macro1() Dim x As Long, y As Long Dim Data(1 To 10, 1 To 5) As Long Dim n(1 To 4) As Long Dim v As Long ' データを配列に格納(A1:J5にあるのを仮定) For x = 1 To 10 For y = 1 To 5 Data(x, y) = Cells(y, x).Value Next Next ' 個数格納用配列の初期化 For v = 1 To 4 n(v) = 0 Next ' 個数の検索 For x = 1 To 10 For y = 1 To 5 v = Data(x, y) ' 値あり? If v <> 0 Then '' 同じ番号を塗りつぶし FillData x, y, Data() n(v) = n(v) + 1 End If Next Next ' 結果表示 For v = 1 To 4 MsgBox v & " は " & n(v) & "ヶ所です" Next End Sub ' 同じ番号を塗りつぶす Sub FillData(ByVal x As Long, ByVal y As Long, ByRef Data() As Long) Dim v As Long v = Data(x, y) If v <> 0 Then Data(x, y) = 0 ' 左 If x > LBound(Data(), 1) Then If v = Data(x - 1, y) Then FillData x - 1, y, Data() End If ' 右 If x < UBound(Data(), 1) Then If v = Data(x + 1, y) Then FillData x + 1, y, Data() End If ' 上 If y > LBound(Data(), 2) Then If v = Data(x, y - 1) Then FillData x, y - 1, Data() End If ' 下 If y < UBound(Data(), 2) Then If v = Data(x, y + 1) Then FillData x, y + 1, Data() End If End If End Sub ではではぁ |
【お礼】Re:EXCELで 表の中の異なる領域 を数える方法 JuJu さん ありがとうございました。 JuJu - 03/1/30(木) 18:27 - > ラベリングですか? > もしそうであれば、 > 画像処理のアルゴリズムを集めた本を一冊買っておくと便利ですよ。 > 方法はいくつもあるので、一例です。 > (塗りつぶしのアルゴリズムを使用しています) 画像処理に使うアルゴリズムが使えるとは、 想像もしていませんでした。 このような処理はラベリングというのですね。 覚えておいて面白いアルゴリズムだと思いました。 時間が出来次第、画像処理アルゴリズム関係の本を見てきます。 PS. もし手元に「この本はおすすめ!」という本があれば、 タイトルなどを教えていただけますか? まだ画像処理に触れようともしていなかった自分が、 果たして良い本が良い本だと気付けるか、少し不安なので、 よろしくお願いします。 |
だんさん、こんにちはぁ ちょっと体調不良のため、回答が遅れました。ごめんなさい。 >画像処理に使うアルゴリズムが使えるとは、 >想像もしていませんでした。 >このような処理はラベリングというのですね。 >覚えておいて面白いアルゴリズムだと思いました。 ラベリングについては、私は説明下手なので、こんな感じのキーワードで検索してみてね。 http://www.google.co.jp/search?q=%22%E3%83%A9%E3%83%99%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%22+%E7%94%BB%E5%83%8F&lr= >もし手元に「この本はおすすめ!」という本があれば、 >タイトルなどを教えていただけますか? 画像処理の本ですか? 画像処理だとどうしてもC言語になってしまうのですが、お勧めならこれです。 http://www.ari-web.com/books/tech/img-4785631244.htm 結構お高めで入門書なのに難易度も高いので、じっくり立ち読みでもしてご検討ください。 ではではぁ |
【お礼】Re:EXCELで 表の中の異なる領域 を数える方法 JuJu さん 重ね重ね、ありがとうございました。 さっそく おすすめの本 を見に行ってくることにします。 |