• 締切済み

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

私はサイロ会社に勤務しており、サイロの在庫管理について効率的に実施したいと考え質問いたします。 在庫表をエクセルにて作成しました。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/17068)
回答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

  • エクセルの複数条件 並び替え・表示

    在庫管理をしています。 在庫表のようなものを作りたいのですが、うまく行かなくて困っています。よろしくお願いします。 うまく表現できないのですが、たとえば、シート1に、 品名   数量 いちご  10 もも   20 いちご  30 りんご  20 もも   15       と、あるものを、 品名 いちご  10 いちご  30 もも   20 もも   15 りんご  20 と、計算式で並び替えて別のシート(シート2)に一覧表にしたいと思っています。 今、品名の個数をカウントしていちごの1個目、いちごの2個目・・と、 やろうとしているのですが、うまく行かず行きません。 在庫は常に変化するので、何かよい方法がないものかと思っています。 品名に番号をつけて品名の数をカウントとしてみましたが、そこでとまっています。 「シート1」の「品名」の「★カウント」を表示できるような関数というのはあるのでしょうか? よろしくお願いします。

  • Excel 条件付書式で、セルに色を付けたいのですが

    エクセルで、チェック表を作成しました。 1行目には日付を2行目には曜日が入るようになっています。 A列には、各チェック項目が入ります。 この様な表を作成し、1ヶ月単位でチェックを行います。 作成した表を、1ヶ月ごとに曜日と日付を更新する必要があります。 土日のみ自動的にセルに色がつくようにしたいのですが、上手くいきません。 現在、条件付書式にて、曜日の欄には色がつきます。 また、他のセルは、「次の場合に等しくない」で曜日の欄が土日の場合に、色がつくようにはなりました。 しかし、日付の欄や、セルに予め文字が入っている場合、この条件付書式が上手く機能しません。 何か良い手はありますか?(文字を消すと上手く機能します)

  • Excelマクロであるセル条件を検出、他の決められたセルに色を付けたい

    Excelマクロであるセル条件を検出、他の決められたセルに色を付けたい その2 例えば、エクセルのあるセルに"A"が書かれていた場合、次にその列のセルに"A"書かれているまでは、続く列のセルには色をつけるようにしたいのですが、良い方法を教えて頂けないでしょうか? 対象となるシート(列方向)に、今回のパターンが複数存在し、 それぞれにこの処理を実施することを想定しております。 (イメージ画像を添付します)

  • Excelのセルの色が変更できない

    Excel2010を使用しております。 申告用のデータですが、日付のセルの色を変えようとするのですが、色が変わりません。 B列に日、C列に曜日が入っており、土日はセルの色が自動的にピンクになります。 自動的なのですが、表の上に期間を選ぶドロップリストがあり、期間を選ぶと自動でその 日付と曜日が入力されるようになっています。(リスト用にカレンダーのシートが別にあり、そのシートに色の指定等は特にありませんでした。) 色が変わらないと言いましたが、実際には色が変わっており、リストから違う月を選ぶと 曜日が変わり、塗りつぶしを行った箇所が休日でなければ塗りつぶした色になっています。 おそらくマクロも入っていると思われますが、詳しいものがおらずどこを確認すれば良いか わからない状態です。 このデータが最初に作られたのは2001年ということで13年前のデータになります。 構成は2シート、申告用のシートとカレンダーシートになります。 条件付書式を疑ってみましたが、セルを選択しても条件付き書式はグレーのままでした。 1、使用しているのはExcel2010です 2、セルの塗りつぶしは出来ますが、その上に更に色が乗っているような状態です。 3、条件付書式にはなっていないようです。 4、作成した年月は2001年2月です。 必要とする情報がわかっておりません。 これはどうなっているか等あれば、答えるようにいたします。 よろしくお願いいたします。

  • excelで、セルの色を他のシートのセルと同じにする。

    EXCELで、Sheet2のセルA1の色を、関数か条件付書式を用いて自動的にSheet1のセルA1と同じにできますか? マクロは使いません。 Winxp & excel2003 です。宜しくお願いします。

  • あるセルに色を付けた時、別のセルにも同じ色が付く

    表1と表2が有って、表1のセルに色をつけると、表2の同じ内容のセルにも同じ色が付くようにしたいのですが、 良い方法は無いでしょうか? 表1         表2 aaaa  |  bbbb cccc dddd bbbb  |  cccc aaaa gggg cccc  |  aaaa bbbb cccc ・ ・ 表1のbbbbに色つけると表2の複数のbbbbにも同じ色が付くようにしたいです。 セル1つずつに条件付書式を設定しても良いですし、関数で一括でもかまいません。 エクセル2000です。

  • エクセルでセルまたはセル内文字の色を条件によって変えたい

    エクセルで、論理条件によってセルまたはセル内文字の色を変えたいのですが、マクロ知らずの初心者でも出来ますでしょうか? よろしく教示方お願いします。

  • 条件付き書式でいろをつけたセルに図形を重ねるマクロ

    お世話になります。 G7~AK24のセルの中で条件に該当するセルに条件付き書式で色をつけました。(G7とG8、H7とH8、AK23とAK24のように縦2つのセルが結合されています。) その色のついたセルに、あらかじめ図形で作成しておいた〇(Oval1という名前)を結合したセルの中心に重ねて、見た目でセルの中の文字が〇に囲まれているようにしたい思います。(結合したセルの中には、一文字のみ入力されています。) そういうことがマクロで可能でしょうか? また、できれば条件付き書式で範囲内のいろいろなセルに色がついているため、たとえば赤色をつけたところを判定して〇を重ねるようにしたいです。 よろしくお願いします。

  • 3つの条件を満たすセルに色をつけたい

    A~ATで10,000行を超える表の中で、 1つ目がI列で同一の英数字であること 2つ目がL列で同一のの英数字であること 3つ目がP列で同一の英数字であること 上3つの条件を満たす場合 I列の条件付き書式設定で、下の行のセルに色をつけたい 数式を満たす場合 の後に、COUNTIF($I$2:I2,I2)>1を入れています。2つ目と3つ目の条件 どのように入れたら良いのでしょうか?

  • エクセル 複雑な条件によってセルの色分けをしたい

    画像のようなエクセルのデータサンプルがあります。 シート1に品名(タイプ+商品名) 数量 単価が予め入力されています。 シート2(価格表)には商品名と単価が表示されています。 あい,かき,さしがタイプ abab acac adadが商品名です。 今回の例では、基本次のような単価になっています abab 20 acac 30 adad 40 シート1の判定の欄を次のルールで入力を行いたいのですが、数百行あるデータに対して、どう入力していけばいいでしょうか? 。 基本的には、価格表の単価とシート1の値が同じかどうかをチェックします。 その際、数量が50以下の場合は価格表の単価+5した値が正しいデータとします。 ・シート1の単価が正しく入力されている→何もしない ・シート1の単価が、数量の+5忘れによって、正しい値と5ずれた値になっている→判定のセルの背景を黄色に変更 ・それ以外の完全に間違った値は判定のセルの背景を赤に変更 実際にはこの他にもいくつかのルールが加わったデータなのですが、今回は上の3つのルールだけで色分けを行いたいです。 そのため、何故こんなことをするのか?と違和感を感じる方もいるかもしれませんが、その点は気にしないで頂いて結構です。 エクセルにお詳しいかたよろしくお願いします。 使用しているエクセルは2013です