• ベストアンサー

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

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

  • kazh
  • お礼率89% (60/67)

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

  • ベストアンサー
  • 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/17068)
回答No.1

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

kazh
質問者

お礼

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

関連するQ&A

  • ビットマップファイル拡大したい

    ビットマップファイル「250×250pix」のファイルを、縦横倍にして「500×500pix」の画像にしたいのですが、自動的に変換する方法はありますでしょうか? 1ドットが4ドットになって、色はそのまま単純な拡大画像がほしいのですが・・・。 ペイントは使えるのかなぁ・・・初心者ですが、どうか教えて下さい。

  • bmp画像の加工について

    大昔いた人が建物平面図に色塗りしたビットマップ画像が残っています。 建物レイアウトが変わったことから色塗り部位の色の変更や範囲などを再加工したいのですが、ロックされているようで色塗りを消したりできません。 「ペイント」では画像自体の切抜きや回転、さらに線を引く程度しかできません。 ヒントだけでもいただければ幸いです。 ペイントで一部切り抜いた画像を添付します。

  • ペイントで画像が出なくなりました(jpgが出て来ない)

    超PC初心者なのですが、間違ってエクセル、ワードを削除してしまいました。ペイントで開く→としてもビットマップファイルしか選択出来なくなり困っています。 このような場合どうしたら良いのでしょうか?

  • エクセルでの検索について

    初めて質問させていただきます。 エクセルシートに1万個程度の番号が 縦(行)に並んでいます。なお、番号はそれぞれ異なります。 あるフォームに日付と10個の異なる番号を入力すると、 エクセルシートから合致する番号を検索し、 エクセルシートの一行目に日付が自動的に入力され、 その行を色塗りしたいと考えております。 これをVBA(マクロ)にて作成したいのですが、 初心者なのでどのようにやればよい分かりません。 どうか教えていただけないでしょうか。 よろしくお願いします。

  • エクセルシートの塗りつぶしをVBAでやるには?

    エクセルのセル塗りつぶしについて(VBA) いつもお世話になっています。 エクセルシートで、任意のセルに数値を入力したとき、入力したセルから右側に向けて、その数値分、自動で塗りつぶすようにしたいのですが、どのようにすれば良いのでしょうか? 色は何でも構いません。 画像添付します。

  • エクセル VBAで色塗りについて教えてください

    VBA初心者です。 例えばB列2行目から下に(1)~(7)までの番号を不規則に入力することにより F列11~17行目に1セルずつ右へ色塗りをしていくにはどうプログラムをかいたらよいでしょうか? 番号によって、色塗りの行と色は決まっています。 (1)→11行目、黄色 (2)→12行目、青色 (3)→13行目、赤色 (4)→14行目、緑色 (5)→15行目、白色 (6)→16行目、黒色 (7)→17行目、茶色 また色塗りはF列からBD列までで終了です。 番号の入力回数の多いものが色塗りを早く終了できることになります。 VBAの本をみながら試行錯誤していましたが、うまくできず… どなたか詳しい方、お力を貸してください。

  • ビットマップの画像処理について自由度を得る最適方法

    以下、長文かつ具体性に欠ける質問で済みません。画像処理についてやりたいことは決まっているのですが、やり方がわからなくて長年困っています。 【やりたいこと】:ビットマップ形式による写真画像があります。その画像上に例えば、何らかのデータに基づいて線を引いたり、写真画像を数値化して計測したり、自由に加工したりするものです。そのためにはビットマップファイルを自由に操作出来なければなりません。 【これまでにやったこと】 ○Windows VC++ 6.0, Borland C++, Visual Basicなどの勉強 WindowsAPIなど。 ○既成ソフトでの操作(Adobe系,ImageMagik,など) ○科学技術系ソフト(Matlab, Octaveなど) どれも何となくイメージと違うのです。画像ファイルというのはバイナリで、ヘッダ部とデータがあり、(500×500)などの2次元ラスターファイルに過ぎないと私は考えています(色もあるのでさらにそれが何枚かあるのかも知れませんが、基本構造は同じ?)。WindowsAPIなど勉強していると難しいクラスの説明ばかりですが、もっと簡単に処理できるだろうと思っています。画像処理ソフトでは、感覚に頼って見た目に応じてマウスで処理するので正確ではありません。どうしても数値のデータとして処理したいのです。 テキストとして取り出されたビットマップファイル(500×500)の処理はループを回してアレコレ処理すればよい(自由度無限大、だからいろいろあって難しいが)わけですね。要するにビットマップファイルを数値データとして自由に読み書きできるスキルを最も最速で習得するにはどうしたらよいかということなのです。 前提となる画像フォーマットはWindows Bitmapです。そうでないものはペイントショップなどで(質はともかく)変換できるので、その問題はクリアしています。 やはり、WindowsAPIの勉強が不可欠なのでしょうか。 プログラムのスキルとしてはFortranによる科学技術計算プログラムを10年以上作成しています。Fortran95ぐらいだったらポインタなどもあるようなのでビットマップのエディットはひょっとしたら簡単なのかも知れませんが。 以上、長文で失礼します。よろしくお願いします。

  • 手描きイラストをPHOTSHOPで着彩する時

    Mac OSX 、PHOTOSHOP CS5(学校),6(自宅)を使用しています。 手描きのイラストをスキャンし、PHOTOSHOPで着彩しています。 塗り絵のような絵柄なので、塗りたい範囲を自動選択ツールで選択し、 選択範囲を3pixcel拡張し、「塗りつぶし」で色をつけています。 その上での疑問です。 1.原画のレイヤーは乗算にし、その下に色塗りの為のレイヤーを作っています。  CS5では、色塗りのレイヤーが選択された状態で色を付けたい部分を自動選択ツールで  クリックするとちゃんと塗りたい線の内側が選択されるのですが  自宅のCS6で同じ事をしようとすると、絵全体が選択されてしまいます。  色塗り用レイヤーは、原画のような線で囲まれていないのでそうなるかな…と  思うのですが、なぜCS5では色塗りレイヤー選択状態でもちゃんと線画が選択されるのか  疑問です。  この場合、いちいち線画レイヤーと色レイヤーを行き来しなくて良いのでとてもやりやす いのですが…。 2.今、自宅でCS6で作業していますが、突然塗りつぶしができなくなりました。  線画レイヤーで自動選択し、色レイヤーで塗りつぶしをクリックしても変化しません。  線画レイヤーで塗りつぶしを行ってみたら、塗りつぶせました。  今朝まで使えていたのですが。 説明がややこしいとは思いますが、理由がお分かりになる方、 よろしくお願いいたします!

  • スキャナで読み込んだ画像の余白を透明にしてエクセルの表に置きたい

    会社のマークをスキャナで読み込みました。(白地に黒色のマーク) ビットマップ形式でペイントに落ちるようになっています。 このマークをエクセル上で作成した資料(地図と表が一緒になったもの) の一部に挿入しようとしましたが、マークの周りが白色のままで挿入され てしまいます。 ペイントの処理だけでマークだけを挿入することは可能でしょうか。 何か他のグラフィックソフトを使用しないとだめなのでしょうか。 ちなみに当方のPCにはHOTSHOTはインストールしてあります。 緊急に教えていただければありがたいのですが...。 宜しくおねがいいたします。

  • ペンタブ お絵描きについて

    つい最近ペンタブを 買った初心者です。 メイキングなどをみて レイヤーの作り方や 影の付け方は分かるようになりました。 しかし、保存するときに 分からないことがあります。 初心者向けの絵のサイトで、 線画と色塗りを 日に分けてゆっくり行うのも いいと思いますと 書かれてあったので 私もそうしようと 部分ごとに分けた線画だけ書いて保存しました。(今までは一日に線画描いて色を塗ってた) その次の日、楽しみに 開くとレイヤーが 全部くっついていて 色も塗れませんでした…… 複数のレイヤーを残したまま 保存するにはどうしたらよいのでしょうか。 この手の質問は全然 ネットには載っていなくて…

専門家に質問してみよう