• 締切済み

ある条件の時、対象のセルの色を付ける

私はサイロ会社に勤務しており、サイロの在庫管理について効率的に実施したいと考え質問いたします。 在庫表をエクセルにて作成しました。1つのブックにサイロビンごとの在庫表とそれをマップ化したシート2種類作成してあります。マップ化したシートには、品種名や在庫数量などをサイロビンごとの在庫表のシートから引用しています。 質問事項 (1)マップ表シートの品名セルに、サイロビンごとの在庫表のシートの中で、品名を表示するセルが『とうもろこし』だった場合、黄色にする。というマクロを組みたい場合はどうしたらよいか? (2)(1)へ、複数条件で、『とうもろこし』以外の品名であった場合もそれ相当の色を付けるマクロ文は? (3)(1)、(2)の条件をすべてのサイロビンに反映させるには? 以上のマクロの組み方を教えてください。

みんなの回答

noname#144013
noname#144013
回答No.5

こんにちは。 #3です。 マクロ(VBA)による方法での、シート設定例、サンプルコードなどを上げてみました。 概要としては、品種名別の表示色(文字色、背景色)を設定した「色設定表」を別に作成 しておき、その色設定表を元に、「マップ表」側の入力データが更新されたら、自動的に 設定された色で品種名などを表示する、というものです。 注)以下の例は、Excel 2000 での設定例です。他のExcelバージョンでは操作手順、機能名   などが異なっているかもしれません。その際は、対応する同機能などに置き換えて下さい。 1)まず、前提として【マップ表】があるシートの構成が以下のようなものだったと仮定します。  <【マップ表】シートの設定例>          A         B           C    1  サイロビンNo.   品種名        在庫数(t)    [再計算]    2     1       とうもろこし      1000        ↑    3     2       大豆          300        コントロールボタンを    4     4       小麦          350        を配置する    5     3       大麦          500    6     6       菜種          650    7     :         :           :    :     :         :           :    :     :         :           :  ◎ここで、A列の「サイロビンNo.」のデータは手入力するものとし、その他の列の   データは、サイロビンNo.を元に「在庫表」シートなどの他のセルより参照され、   自動で表示される形式になっているものとします。   【補足】    自動表示の方法は、例えば、VLOOKUP関数などを使用して、サイロビンNo.を    検索キーとして「在庫表」の中から連係するデータを抽出するというようなものです。  ◎[再計算]ボタンは、下記に述べる「色設定表」側の設定色を変更した際に、   「マップ表」側の表示色を更新するために設けています。  ◎[再計算]ボタンは、以下のような手順でシートへ貼り付け&設定して下さい。   (1) メニュー: [表示] → [ツールバー] → [コントロール ツールボックス]     を選択して、「コントロール ツールボックス」を表示させる。   (2) 「コントロール ツールボックス」の[コマンドボタン]のアイコンをクリックする。     ・これで、マウスカーソルが+(十字の表示)になると思います。   (3) ボタンを貼り付けたい位置にマウスを移動して、左クリックする。     ・これで、ボタンが貼り付けられると思います。   (4) 貼り付けたボタン上で、右クリックして表示されたメニューの「プロパティ」を     クリックする。     ・これで、プロパティ設定画面が表示されると思います。   (5) プロパティ設定画面で下記項目の確認&変更を行う。     オブジェクト名 : CommandButton1  ←このようになっているのを確認します。                              ※名前の最後の番号(1とか2など)は既に                               ワークシートに他のボタンがあった場合                               などにより変わります。     Caption     : 再計算        ←Caption(ボタンの表示名)を、このように                              変更します。                              ※デフォルトではオブジェクト名と同じ名前                               になっていると思います。   (6) コントロールボタンのプロパティ編集などが終了したら、 プロパティ設定画面を閉じ、     ツールバーの[デザイン モードの終了]のアイコンをクリックして、デザインモードを     終了させて下さい。     ※再度、ボタンの編集を行う場合は、ツールバーの[デザイン モード]のアイコン(上記の      [デザイン モードの終了]のアイコンと同じもの)をクリックした後、コントロールボタンを      選択して下さい。 2)次に、空きのセル枠、または、新たなシートを挿入し、品種名別に表示色(文字色、背景色)   を設定する「色設定表」を作成しておきます。  <色設定表の設定例>   ※別シート:【色設定】シートに作成した場合。          A      1  品種名    2  とうもろこし   ←セルの「書式設定」でフォントの色(文字色)と、パターンの色(背景色)                  を設定しておく。(※以下、他の品種名も同様に設定しておく)    3  大豆        4  大麦        5  小麦        6  マイロ       7  菜種        8  その他       :    :     :    :    ※ここで設定した色が、【マップ表】側の表示に反映されるようにしています。   ※こうすることで、表示色を変更したい場合に、マクロ(VBA)側を変更しなくても    対応できるようにしています。 3)VBAエディター「Visual Basic Editor」を起動して、【マップ表】があるシートのコード   画面を表示して、下記のサンプルコードを記述します。   ※シートのコード画面は、【マップ表】があるシートのタブ部分を右クリックして、    「コードの表示」をクリックすると「Visual Basic Editor」が起動され、コード画面が    表示されると思います。   ※下記コードは、あくまで一例です。     不都合な点などがあれば、ご自身で修正・追加等を行ってみて下さい。   注)下記コード部分には、インデントの為、全角スペースを入れています。     このコードをコピー&ペーストする場合は、全角スペースをタブまたは、     半角スペースに置換して下さい。 ■VBAサンプルコード  【マップ表】シートのコード画面(コードモジュール)に記述するコード  注)コード内のセル範囲を表す文字列("A2:A7"、"A2:B7"など)と、セルの行番号、    列番号などの設定値、及びシート名などは、ご使用のワークシートの構成・環境    に合わせて適宣、置き換えて下さい。 '//// ↓ここから ///////////////////// '== [再計算]ボタンのクリックイベントの処理 Private Sub CommandButton1_Click()   '←※この関数名の"CommandButton1"                           ' の部分は、コンロトールボタンの                           ' オブジェクト名と同じ名前にして下さい。   Dim rg As Range   '「マップ表」の[サイロビンNo.]の再設定を行う   '※これでセルデータの更新イベントを発生させる   '注)このサンプルでは「マップ表」の[サイロビンNo.]のセル範囲を"A2:A7"   '  としています。   For Each rg In Range("A2:A7")  'セル範囲のセルの数だけ繰り返し     rg.Value = rg.Value     '同じデータで上書きして更新イベントを発生させる   Next rg End Sub '== セルデータの更新イベントの処理 Private Sub Worksheet_Change(ByVal Target As Range)   Dim bChk As Boolean   Dim y1 As Long, x1 As Long   Dim y2 As Long, x2 As Long   Dim c1 As Long, c2 As Long   Dim d1 As Variant, d2 As Variant   Dim strWk$   '「マップ表」の対象セル範囲(サイロビンNo.と品種名のセル枠)の   'データ更新でなかった場合は処理を抜ける。   '注)このサンプルでは「マップ表」のセル範囲を"A2:B7"としています。   If Intersect(Range("A2:B7"), Target) Is Nothing Then     Exit Sub  'ここで処理を抜ける   End If   '今回変更されたセルのセル位置より、[サイロビンNo.]と[品種名]を取得   y1 = Target.Row   'y1 = データ更新されたセルの行番号   x1 = 1       'x1 = ↑の行のデータ範囲の先頭の列番号   d1 = Range(Cells(y1, x1), Cells(y1, x1)).Value     'd1 = [サイロビンNo.]   d2 = Range(Cells(y1, x1 + 1), Cells(y1, x1 + 1)).Value 'd2 = [品種名]   '取得したデータ(サイロビンNo.、品種名)がエラー値、または、空きデータ   'かチェックする   bChk = False    'チェックフラグをリセット   If (IsError(d1) = True Or IsError(d2) = True) Then     bChk = True   'エラー値ならチェックフラグをON   ElseIf (d1 = "" Or d2 = "") Then     bChk = True   '空きデータならチェックフラグをON   End If   'チェックフラグがONだったら、表示色を標準にして処理を抜ける   If bChk = True Then     '(y1)行の(x1)列~(x1+2)列のセル範囲の文字色と背景色を標準にセット     Range(Cells(y1, x1), Cells(y1, x1 + 2)).Font.Color = RGB(0, 0, 0)     Range(Cells(y1, x1), Cells(y1, x1 + 2)).Interior.Color = RGB(255, 255, 255)     Exit Sub  'ここで処理を抜ける   End If   '[色設定]シートの「色設定表」より、今回更新された品種名の   '表示色(文字色、背景色)を取得   On Error GoTo L_ERR1  '検索失敗時のエラー処理を有効化   With Sheets("色設定")  '[色設定]シートを操作対象とする     'ワークシート関数の'MATCH関数'を使用して色設定表より、対象品種の     'セル位置(行番号=y2、列番号=x2)を取得     '注)このサンプルでは色設定表のセル範囲を"A2:A8"としています。     y2 = Application.WorksheetFunction.Match(d2, .Range("A2:A8"), 0)     x2 = 1   '列番号は1固定     '色設定表より、対象品種の文字色と背景色を取得     '注)このサンプルでは色設定表のセル範囲の左上セルを"A2"としています。     c1 = .Range("A2").Offset(y2 - 1, x2 - 1).Font.Color   '文字色     c2 = .Range("A2").Offset(y2 - 1, x2 - 1).Interior.Color '背景色   End With   On Error GoTo 0     'エラー処理を解除   '「マップ表」の対象セル範囲の文字色と背景色を変更   '※(y1)行の(x1)列~(x1+2)列のセル範囲の文字色と背景色を取得した色にセット   Range(Cells(y1, x1), Cells(y1, x1 + 2)).Font.Color = c1   '文字色   Range(Cells(y1, x1), Cells(y1, x1 + 2)).Interior.Color = c2 '背景色   Exit Sub L_ERR1: '** エラー処理(主にMATCH関数の失敗時のエラー表示対策) **   strWk$ = "品種名の表示色取得に失敗しました。" & vbLf & vbLf   strWk$ = strWk$ & "【色設定表】の設定値を確認して下さい。"   MsgBox strWk$, (vbOKOnly Or vbExclamation) End Sub '////// ↑ここまで ///////////////////// 以上のような設定で、【マップ表】のデータ(今回の例ではサイロビンNo.)を追加・変更 した際に、自動的にそのデータがある行(VBAで設定しているセル範囲)の表示色が 変更されるようにしています。 また、【色設定表】側の設定色を変更した際に、【マップ表】側の表示色を更新させる ために、[再計算]ボタンを付けています。 [再計算]ボタンをクリックすることで、【マップ表】側の表全体の再表示を行い表示色を 更新するようにしています。 【マップ表】側のセル枠を増やす場合、あるいは、【色設定表】側のセル枠を増やす場合 は、それぞれのセル枠を拡張し、マクロコード側のセル範囲指定、行番号、列番号などの 設定値を適宣、変更して下さい。 ※参考までに、上記の設定&マクロを使用したワークシートのキャプチャ画像を添付  しています。 宜しければ試してみて下さい。 もしも、お使いの環境で上手くいかなかった場合は、すみません。

  • a987654
  • ベストアンサー率26% (112/415)
回答No.4

NO1です。 後だしの追加質問はルール違反ですよ。 あくまで初回の質問では3条件だけでした。 したがって”条件付き書式”を提案した訳です。 質問方法はご自分の知りたいことを的確に記載願います。 マクロをつかう方法についてもNO2の方がお答えしています。 4つ以上の場合if文を追加するだけのことです。 マクロの記載法穂が判らなかったら、”マクロ記録”をつかって できたコードをコピーしてつかえば簡単です。

noname#144013
noname#144013
回答No.3

こんにちは。 #1さん、#2さんが言われているように、マクロではなく、ワークシートの「条件付き書式」 の設定で可能かと思われます。 ■「条件付き書式」の設定方法  ※下記は、あくまで一例です。  ※下記は、Excel 2000 での設定例ですので、他のExcelのバージョンでは操作方法   が異なるかもしれません。 その際は、同機能の操作に置き換えてみて下さい。 1)条件で色を設定したいセル範囲を選択します。   セル範囲が飛び飛びになっている場合は、[Ctrl]キーを押しながら、マウスでそれぞれ   のセル範囲をドラッグすれば選択できます。 2)メニューで、 [書式] → [条件付き書式] を選択して下さい。 3)「条件付き書式の設定」のダイアログ画面が表示されますので、この画面で「条件」   と「書式」を設定して下さい。   ※Excel 2000では、条件は3つまでですが、最近のバージョンのExcelでは3つ以上    の条件が設定できるようになっているかもしれません。   <条件・書式の設定例>    ※[追加]ボタンのクリックで「条件」の追加ができます。    条件1: [ セルの値が ]   [ 次の値に等しい ]   [ ="とうもろこし" ]         ※この場合は、対象のセルの値が、"とうもろこし" という文字列だったら          という条件になります。    条件2: [ セルの値が ]   [ 次の値に等しい ]   [ ="大豆" ]         ※この場合は、対象のセルの値が、"大豆" という文字列だったら          という条件になります。    条件3: [ 数式が ]      [ =AND(B2<>"",B2<>"とうもろこし",B2<>"大豆") ]         ※この場合は、対象のセルが、            「空白でない」かつ「"とうもろこし"でない」かつ「"大豆"でない」          という条件になります。         ※条件式の B2 は対象のセルのアドレスですが、相対アドレスでの形式に          していますので、範囲選択している他のセルも同様な条件になります。    書式 : 各条件の[書式]ボタンのクリックで表示された「セルの書式設定」ダイアログ          の「フォント」、「罫線」、「パターン」のそれぞれのタブ上で、表示色などの          設定を行います。    ※各条件・書式の設定が終わったら、[OK]ボタンのクリックで設定を完了して下さい。    ※「条件付き書式」設定の詳細については、Excelのヘルプなどをご覧下さい。 ◎添付画像は、上記例の設定を行ったExcel画面をキャプチャしたものです。  ※画面上のシート名、セルのラベル名、データ項目、数値などは素人判断で適当に設定   したものです。 以上です。参考になれば幸いです。

ten_0601
質問者

補足

ありがとうございます。 確かに3つまでならこの条件付書式で行けますが、3つ以上の場合は? それはプログラムしないと無理ですよね?サイロマップ上には、様々な品種が、複数個あります。なので、マップ上から、この品種を探し出して、そのセルに指定した色を付ける。これを繰り返したいのです。また、そのセルを含む、四角形範囲を選択して、同じ色を付けたい場合も教えてください。

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

●質問文の早いうちにVBAの質問だと言うことを表示すること。 >上のマクロの組み方を教えてください。 ●課題を文章に書いて、マクロのコードを回答者に書いてくださいと、このコーナーに出すのは、このコーナーの規約違反です。 ヒントをもらい、自分で勉強するのが筋です。 ヒントを生かせないレベルの質問者だと、コードを前部書いてくれないと、解決しないと言うことになりかねない。 VBAの基礎を勉強して、それから課題解決を考えるべきだ。 ●質問者の仕事に密着した、質問の書き方になっているため、一般読者には分かりにくい。 (例)マップ化など何のことか具体的に良くわからない ●抽象化して、エクセルの論点に絞って質問を書いてください。 ●簡単な実(模擬)を挙げて質問してください。 ーーーー 条件付書式でできるのではないか、考えましたか。 == VBAではデータが変わったとき、セルの色を変化させることは結構難しい。VBAでイベントの考えをわかっていますか。 今有るデータが(当分)変わらないものとして考えるなら、労もろこしのある品名列の全セルを対象にトウモロコシかどうかIF文で聞いて トウモロコシならセルに色を着ける。 セルに色をつけるなどはマクロの記録をとれば直ぐコードがわかる。 それさえもやってないのでは。 ーー B列でトウモロコシのセルを見つける。 Sub test01() For Each cl In Range("B:B") If cl = "トウモロコシ" Then MsgBox cl.Row & "行にトウモロコシあり" 'ここにセルや行に色を着けるコードを入れる End If Next End Sub >複数条件で、『とうもろこし』以外の品名であった 複数条件ではないでしょう。別の品目の場合は、別の色を着けるということだろう。そういうのは複数条件では無く、A列がX、C列がYの行を見つけると言うのが複数条件。 これは品目ごとに、品目と色コードの対応表をプログラムかシートに持って、表を引きしかない。VBAでも中級以上のスキルだ。

  • a987654
  • ベストアンサー率26% (112/415)
回答No.1

マクロは不必要です。 「条件付き書式」だけでできますよ。 細かな操作は敢えて書きません。 「条件付き書式」の例題は過去にも沢山ありますから 一度検索してみたらいかがですか?

関連するQ&A