• ベストアンサー

EXCELでビットマップ画像を操作できますか?

初心者なのでチョット無謀な質問かも知れませんが、よろしくお願いします。 白地図のようなビットマップ画像があるとします。たとえばある市の集落を線画で描いたようなもの。これにある数値に応じて色を付けようと思っています。 Win付属のペイントで一つ一つ色を付けていけば良いのでしょうが、できれば、エクセルで数値を計算し、その結果で自動的に色が付かないかと思っています。無理でしょうか? たとえば、ビットマップの色を付けたい範囲のある座標と色のコードがエクセルに準備できているとして、自動色塗りはできるのでしょうか。 WINは98、エクセルは2000を使用しています。VBAの知識はほとんど無いに等しいです。(多分VBAを使わないと実現しないと思いますが・・・) 初心者だからできる大胆発言かも知れませんが、大量の色塗りに困惑しているのでどうか助けてください。要領を得ない質問で済みません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

例として、図形が2つの場合です。 コードにちょっとだけコメント入れましたので、増やし方が、考え付くかと思います。 A1に対応する図形が、"Freeform 1"、A2に対応する図形が、"Freeform 2"の 場合です。 それぞれのセルに1000~6000の数字をいろいろ入れてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rw As Long Dim ValData Dim ShapeName As String If Target.Column <> 1 Then Exit Sub ' A列以外無視 rw = Target.row ValData = Val(Target.Value) Select Case rw   Case 1 ' 1行目の時、色を塗るオートシェープの名前指定     ShapeName = "Freeform 1"   Case 2     ShapeName = "Freeform 2"   Case Else ' その他の行は、無視     Exit Sub End Select With ActiveSheet.Shapes(ShapeName).Fill.ForeColor   Select Case Target.Value     Case Is <= 1000 ' 1000以下、赤       .SchemeColor = 2     Case Is <= 2000 ' 2000以下、緑       .SchemeColor = 3     Case Is <= 3000 ' 3000以下、青       .SchemeColor = 4     Case Is <= 4000 ' 4000以下、黄       .SchemeColor = 5     Case Else ' その他、白       .SchemeColor = 1   End Select End With End Sub ---------------------- オートシェープ図形の名前を調べる方法は、その図形をアクティブにして イミディエイトウィンドウに ? Selection.ShapeRange.Name<Enter> 色をRGB関数で指定するときは ActiveSheet.Shapes("Freeform 2").Fill.ForeColor.RGB = RGB(255, 255, 0)

kazh
質問者

お礼

丁寧な回答、ありがとうございました。 2つの図形の着色ができました。3つにも挑戦してみましたが成功!! 感激です。本当にありがとうございました。 でも、VBAというものが便利だとわかりました。今後少し勉強してみようかな。 なんて、初心者にしては大胆な計画を・・・・。無理かな? 今後ともよろしくお願いします。

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

VBAを使えば、簡単に出来ます。 オートシェーブのフリーフォームで、地図区画図形を必要分作ります。 例えば、そのひとつの区画の名前が、"Freeform 1"とします。 セルA1に入力した数値が、1000未満のとき、この区画の色が、赤に塗り潰し、 1000以上のとき、青に塗り替わるコードです。 使用しているシート名を右クリックして「コードの表示」で開いたコード ウィンドウに記述します。(これは手法を簡単に示したもので実際は、 もとっとVBAの知識が、必要です。) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value > 1000 Then   ActiveSheet.Shapes("Freeform 1").Fill.ForeColor.SchemeColor = 4 Else   ActiveSheet.Shapes("Freeform 1").Fill.ForeColor.SchemeColor = 2 End If End Sub

kazh
質問者

お礼

ありがとうございました。 エクセルの機能の中で実現すれば良いのですね?オートシェープを使うなんて考えもしませんでした。早速、挑戦してみようと思います。

kazh
質問者

補足

早速、やってみました。チョット感動ものです! ただ、1つのオートシェーブを塗る事はできたのですが、同じワークシートに2つ目のオートシェーブを用意して、コードのIf以降を追加し If Target.Address <> "$A$2" Then Exit Sub  とかえてA2セルで数値を入力しても2つ目の色が変わりません。 やはり、(これは手法を簡単に示したもので実際は、もっとVBAの知識が、必要です。)の部分なのでしょうか? もし、許されるなら教えていただけませんでしょうか。

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

(1)エクセルVBAは基本的に、エクセルの操作で出来る事を、自動化するプログラムを組めるものだと思います。決められたことを自動再現する、人間より動作が速い 、そのバリエーションで繰り返し演算等が早く出きるなどのメリットが生きます。(2)一方エクセルは文字・数字の値を扱うものです。例外はグラフがある、色がつくと言われるかもしれないが、基底は値の処理です。セルや文字に色がつくだけです。(3)操作を助けるためにコントロールと言う四角形的なウインドウの部品に関する操作が出来ますが、文字情報の入力出力がほとんどです。ピクチュアーと言うコントロールもありますが表示だけという面が強い。 (4)従って不定形な・構造のない図と計数を結びつけるのは、VBAでは超えています。VBと言う本家がありますが、そちらも通常の処理の範囲を越えています。 (5)むしろエクセルなどではなく、カーナビなどのソフトを作る業者に、どれぐらい難しい(技術力が要り、大掛かりで、コストがかかるものか)、易しいのか聞いてみると参考になると思います。 (6)私の10年以上前の経験では、地図情報システム(市区町村ではなく、その下の町字丁目レベル)を作ってもらうのに、SUNの当時のSparcコンピュタを使い1億ぐらいの作成料で1年ぐらいかかるという話だったと記憶します。その後コンピュタの処理スピードも各段に速くなり、同種のソフトを開発し、市販している会社があるかも知れません。しかし会社の仕事でするならシステム部門が扱うマターでしょう。パワーポイントのようなソフトが数万円で手に入るご時世ですから、素人でも扱える、地図色分けソフトがないとも断言できませんが。構造のない平板なビットマップ画像を、単位に(たとえば町)に分けると言うのが、そもそも難しいと思う。やるなら町の単位にビットマップ画像を分け、その隙間ない集合で地図が出来るというイメージでしょうか。(ただこの点素人です) メッシュ地図式にするとやや易しくなるでしょうが。 (7)WEBページなどで「クリッカブルマップ」を言う 仕組みがあります。段々と不整形図形位置を捉えられる時代が近づいて来ているように思いますので、写真をクリックすれば、色を変えたり、変形させたり、関連情報計数を表示したりが簡単に出来る時代がくる(来ている)かも知れません。動的なグラフィックとでも言うんでしょうか。 (8)ただエクセル(VBA)にそれを求めるのは「木に依りて魚を求む」ことになるでしょう。

kazh
質問者

お礼

詳しい説明ありがとうございました。 やはり、素人の考えだったようですね。素人はコンピュータは何でもできる? と思ってしまうようです。仕組みや理屈も判らず、あんな事こんな事できるんだろうと簡単に考えがちです。反省しました。 これに懲りずに、今後ともよろしくお願いします。