゚Д゚)こんばんは、こんにちは、おはようございます。以前作成した56色の色パレットに表示されている色の情報を取得して、違うセルにその色の情報をコピーすることが出来ないかなって思いながら、お絵かきソフトを作ってみました。ちなみに1セル対応のみです。InputBoxを使っての背景色の取得とコピーをするには、どうしたらいいのか!そんな感じで見てもらえれば、うれしいです。参考になるコードがあればどうぞお使いください。以下は動作確認動画になります。ExcelのVBAでセルの背景色をコピーしてみることにした。以前56色をセルに配色したときに使用したのは、ColorIndexプロパティを用いて行いました。今回は、Colorプロパティを用いて色の選定をしてみます。色は「Red」「Green」「Blue」のそれぞれの色の割合で作成されているのですが、その色の割合をRGB関数を用いて取得しようという試みです。RGB関数の引数は、長整数型(Long)になります。構文RGB(Red,Green,Blue)Red,Green,Blueのそれぞれの引数の値は0~255の整数で設定できます。セルの色を取得したあとにRGBの引数へ変換するコードを作成してみます。Colorプロパティがセルから取得するときの値は、Long型の長整数です。その値をRed,Green,Blueにそれぞれ配分する計算方法が次のようになります。256)例えばColorIndexでの2は赤色なのですが、RGBではRGB(255,0,0)になります。=RGB(255,0,0)でセルの背景色を設定できます。いうことは変数を宣言してその中にセルの色情報を代入すれば取得できることになります。Range(“A1”).Interior.Colorそして、代入された値を一度RGB関数に変換します。Typeでユーザー定義型を作る。Typeこちらは標準モジュールへ記述してみましょう。RGBのそれぞれR・G・Bの変数宣言のデータ型はByte型になります。0~255までの整数が代入できます。真偽の判断も宣言しておきます。MATUKOの変数宣言は、データ型はBoolean型になります。TrueかFalseが代入できます。次にRGBに変換するためのコードをFunctionプロシージャでC_RGBを作成します。Function先ほどセルから色の値を代入したCNBをC_RGB(CNB)と記述して計算をします。導き出された値を変数TNB(ユーザー定義型RGB_S)に代入します。With文を用いてRed,Green,Blueに値を代入します。BBB)で引き渡すことが可能になります。元の色を取得する!取得した色を引き渡す!Application.InputBoxを使って、元のセルと引き渡し先のセルの位置を取得します。今回のコードを記述する場所ワークシート上の選択範囲が変更された場合に呼び出すことが出来るメソッド「Worksheet_SelectionChange」になります。「SelectionChange」は、選択範囲が変更されたときにイベント発生させるプロシージャになります。今回の色の取得や再配置の行う場合、選択範囲の変更が有効活用できますので使用したいと思います。プロシージャーの作成方法は、VBA「(Alt)キーと(F11)キーを押して起動させるアプリケーション」のプロジェクトウインドウ内のシートのいづれか(Sheet1など)をダブルクリックしてください。次にオブジェクト欄で「Worksheet」を選択します。Range)が作成されます。Sub内に書いたコードはシートオブジェクトが選択されるたびに反応しますので、記述の際はどこかの空きセルに判断キーを設置し、さらにコードで判断するようにすると反応しなくなる方法がございます。今回は、Functionプロシージャも同様のシートオブジェクトにコードを書いてみましょう。Typeでユーザー定義型は標準モジュールを作成し、その中に記述しmしょう。プロシージャをボタンで動かしたい!Excelシート上にボタンを設置して押してみませんか?ポチって!その方法になります。Excelシートのリボン内の開発タブにあるデザインモードを左クリックしてみましょう。次に、その左側にある挿入を左クリックするとフォームコントロールとActiveXコントロールの選択メニューがあらわれます。ActiveXコントロールのコマンドボタンを選択しましょう。マウス+ポインタをExcelシート上の任意の場所に移動させて、左ボタンを押しながらドラッグ(例えばマウスを右下へ動かしてみる)してみましょう。CommandButton1と書かれたものが出現したと思います。今回は、これがシート上でプロシージャをポチって動かすことが出来るボタンになります。Subの間に記述しましょう。コマンドボタンに表示されている”CommandButton1”は変更可能です。プロパティのCaptionの部分を変更してみましょう。オブジェクト名を変更するとコードを記述する時に判断しやすくなります。ExcelのVBAでセルの背景色をコピーしてみることにした。以下、作成したコードすべてになります。変換してしなくてもいいコードもありますが、初心者向けの新しい発見をしていただくためのコードです。コマンドボタンのオブジェクト名やCaptionも変更しております。Application.InputBox("初期化します。Application.InputBox("セルを選択してOKを押してください。Application.InputBox("初期化します。Application.InputBox("セルを選択してOKを押してください。Typeでユーザー定義型も必要なので忘れないでください。簡単な説明書になります。コマンドボタンなどシートに対し同様に設置した場合の使用法になります。1ファイルを開いた時は、お絵かきをするもしくは色を選択しない限り動かないコード(セルA1に”END”が表示されていると停止状態にしている)になっています。2どちらかを押すと”END”が消えます。色の選択が出来て、違うセルに色のコピーが出来るようになります。3色ボタンやお絵かきをするボタンを押した場合4お絵かき範囲の左上のセルを選択するようにしています。5お好きな色を56色の色の部分から選択して左クリックしていただくと、InputBoxが表示され色の選択のYorNを聞いてきますので、「OK」か「キャンセル」で答えてください。OKなら6のように「OK」ボタンを左クリックしてください。すると7のようにA1セルが初期値の状態でダイアログが表示されます。8選択した色を使いたいセルを選択して「OK」ボタンをクリックしてみてください。9のように最初にパレットで選択した色が、コピーされましたね。10は作業を終了したいときに、11は最初から書き直したいとき用に作ってみました。11は押してもYorNで聞いてくるようにしています。Nの場合は、作成した画像は消えませんがYは消えてしまいます。そんなコードになりますが、何かのヒントになればいいかな!長い文章になりました。目を通していただきまして誠にありがとうございます。まとめ今日は、Typeステートメントとファンクションプロシージャとコマンドボタンをを作成してお絵かきソフトもどきを作ってみました。コードの組み合わせ次第で何でも出来るんだなって思っていただければうれしいです。型枠が決まっていると、後は中身を変更するだけなので便利です。VBAは難しく考えず、短く綺麗に、コードウインドウにありがとうねって声をかけながら作ってみると、案外うまく出来るかも。