• ベストアンサー

エクセル VBA リストを参照して 色を変えたい

Sheet1に リストとして       A    B    C    D --+-------+-------+-------+-------+------+-------+------- 1   山田 --+-------+-------+-------+-------+------+-------+------- 2   鈴木 --+-------+-------+-------+-------+------+-------+------- 3   佐藤 --+-------+-------+-------+-------+------+-------+------- 4   内藤 Sheet2に 一覧表として       A    B     C    D --+-------+-------+-------+-------+------+-------+------- 1   山田   赤松   斎藤   内藤 --+-------+-------+-------+-------+------+-------+------- 2   佐藤   清水   鈴木   米田 --+-------+-------+-------+-------+------+-------+------- 3   上田   今川   藤本   越崎 --+-------+-------+-------+-------+------+-------+------- 4   千葉   尾崎   松田   安西 と、作成した場合、Sheet1のリストにある名前のみ フォントカラーを赤にするマクロを組んでいただきたいのですが・・・ 宜しくお願いします。

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

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

短いのを1つ。 Sub test01() Dim sh1, sh2 As Worksheet Dim cl As Range Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = sh1.Range("A1").CurrentRegion.Rows.Count For Each cl In sh2.Range("A1").CurrentRegion For j = 1 To d If sh1.Cells(j, "A") = cl Then cl.Interior.ColorIndex = 6 End If Next j Next End Sub 丸投げ的な質問だが、SetやForEach、CurrentRegionなど及び本番データでどこをどう修正するか判りますでしょうか。

otamasan
質問者

お礼

回答有難うございます。 修正の仕方はわかります。 やりたかったことが目の前で展開されていきました。 丸投げを心より、反省し、それでも答えて下さった皆様に、感謝の気持ちでいっぱいです。 本当に、本当に有難うございました。<m(__)m>

その他の回答 (2)

  • RECARO
  • ベストアンサー率47% (49/103)
回答No.2

確かに丸投げはあんまり良くありませんね。 ちょっと考えてこんな風に書いてみたけどどうですか?というくらいの方が答えが返って来易いと思いますよ。 僕もあまり上手いコードは書けませんが,それなりに動くものを作ってみました。きっともっと効率の良い方法があると思いますが・・・ このコードでは,Sheet2のマトリックスの行,列方向の各最大値を計算するのが面倒だったので(歯抜け等を考え出すときりがないので),1個ずつセルをずらしてセルが空白になるまでリストとの比較をしています。よって,最大値の行列が真四角に全部埋まってないと正常に動きません。 リストの長さ判定と同じように行列の各最大値を求めてFOR文で回しても同じ結果になりますが・・・先に思いついた方でやっちゃいました。眠いのでここまでとします(笑)。 あと,このOKWEBのフォームの仕様上,コードのインデントが全部解除されて見難いですがご勘弁を。 Option Explicit Option Base 1 Sub 名前検索() Dim strNameList() As String 'Sheet1のリスト格納用配列 Dim intListLength As Integer 'Sheet1のリストの長さ Dim i As Integer 'ループ用 Dim strCheckValue As String 'リストと比較されるSheet2のセル内の文字 Sheets("Sheet1").Activate 'Sheet1のリスと最終行の行数(=リストの長さ)を調べる intListLength = Cells(1, 1).End(xlDown).Row ReDim strNameList(intListLength) 'リスト格納用配列の再宣言 'リストの全名前を配列に格納 For i = 1 To intListLength strNameList(i) = Cells(i, 1).Value Next i Sheets("Sheet2").Activate 'アクティブなセルをセル"A1"から右に1つずらしながら 'セルが空白になるまで調査し,リストと一致したらフォントを '赤に変える。 '右端のセルまで調査したら(空白になったら)1行下の左端へ 'ずらして繰り返し。下方向へもセルが空白になるまで繰り返し。 Cells(1, 1).Activate strCheckValue = Cells(1, 1).Value Do Until ActiveCell.Value = "" Do Until ActiveCell.Value = "" strCheckValue = ActiveCell.Value For i = 1 To intListLength If strCheckValue = strNameList(i) Then ActiveCell.Font.ColorIndex = 3 Exit For End If Next i ActiveCell.Offset(0, 1).Activate Loop Cells(ActiveCell.Row + 1, 1).Activate Loop End Sub

otamasan
質問者

お礼

丸投げ、反省しております。<m(__)m> 眠い中、回答頂き有難うございました。 感謝しております。 それぞれ、大変丁寧に記述して頂き、勉強になりました。 今後は質問の書き方も勉強していきます。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

丸投げは如何なモンでしょう? 条件付き書式で出来ますよ。 Sheet1のA列全部に名前を付ける(例)List Sheet2の範囲を全て選択し、A1がアクティブな状態で条件付き書式の数式が =NOT(ISERROR(VLOOKUP(A1,List,1,0)))

otamasan
質問者

お礼

丸投げ、申し訳ありません。<m(__)m> 条件付書式3つは全て使い果たしてしまいまして、 あれこれ試して、時間も無くなり、お願いしてしまいました。 言葉不足をお詫びします。

関連するQ&A

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • Excel VBAで比較させたい。

    sheet1のA1に山田さん、B1に佐藤さんと打ちます。 で、sheet2のA列に山田さんB列に佐藤さんの情報があります。 それを比較する方法を知りたいんですけど。 ちなみに、sheet1のA1に鈴木さん、B1に山崎さんなど色んなパターンが存在します。 A1に山田さんだったらsheet2のA列、B1に佐藤さんだったらsheet2のB列を見に行って それを比較して、一致しない所だけsheet3に表示させる方法などありますか? 当方まったくの初心者で…(^^;

  • ExcelのVBAに明るい方・・・

    Excelの、Sheet1 に 1日目,鈴木くん,点数,・・・ 2日目,佐藤くん,点数,・・・ 2日目,山田くん,点数,・・・ 3日目,佐藤くん,点数,・・・ 3日目,鈴木くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ という、元ダネの一覧表があって、 このデータを日々追加入力していくごとに、自動的に、 Sheet2 には、鈴木くんのみの一覧表のデータ 1日目,鈴木くん,点数,・・・ 3日目,鈴木くん,点数,・・・ ・・・ Sheet3 には、佐藤くんのみの一覧表のデータ 2日目,佐藤くん,点数,・・・ 3日目,佐藤くん,点数,・・・ ・・・ Sheet4 には、山田くんのみの一覧表のデータ 2日目,山田くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ が、自動的に追加入力されるVBAの記述って、 どうすればいいんでしょうか? VBAに明るい方、どうかよろしくお願いします。

  • EXCELの関数の入力の仕方

    私の知識不足の為どうすればいいのか困っています。どうぞお願いします。 シート1に   | A  | B | C | D | --|-----|----|----|----|--- 1 |田中 |   |   |   | --|-----|----|----|----|--- 2 |佐藤 |   |   |   | --|-----|----|----|----|--- 3 |鈴木 |   |   |   | --|-----|----|----|----|--- 4 |山田 |   |   |   | シート2に   | A  | B | C | D |  E |  F    --|-----|----|----|----|----|---- 1 |    | 1  | 2  | 3  | 4   | 5 --|-----|----|----|----|----|---- 2 |田中 |   |   |   |   |   --|-----|----|----|----|----|---- 3 |佐藤 |    |   |    |   |   --|-----|----|----|----|----|---- 4 |鈴木 |    |   |    |   |  --|-----|----|----|----|----|---- 5 |山田 |    |   |    |   | とあったとします。(シート2の横に並んだ数字は日にちです。) (シート1は入力用シート、シート2は印刷用シートとして使います。) 例題として、田中さんは2日と3日が入院。5日が外出すると仮定して、 シート1のB1に"2n"、C1に"3n"、D1に"5g"と入力したら、 シート2のC2に"入"、D2も"入"、F2が"外"と表示させたいの です。 色々試行錯誤しましたが、一向にできず、困っています。 お手すきの時がありましたら、回答お願い致します。

  • エクセルで2つの条件を元に

    エクセル2007で名簿を作っています。 1ヶ月ごとにメンバーの順が変わります。 シート1(番号順に名簿を作りました)   A  B   C  1 1     山田 2 2     木村 3 3 副長 佐藤 4 4     鈴木 5 5 班長 田中 6 6     長田  シート2(こちらがメンバーに配る名簿です)   A   B  C   D 1 班長    1    3 2 田中    山田  鈴木 3 4 副長    2    4 5 佐藤    木村  長田 A2に田中,A5に佐藤を選んでくるのはvlookupで成功しました。 質問したいのは C列D列に上記の番号のようにシート1の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。  

  • Excelでセルを一度だけ参照したい

    例えば、 A1に「鈴木」 B1に「=A1」 C1に「=A1」 … と入力するとします。 この場合、A1を「佐藤」に変更するとB1,C1,D1共に「佐藤」になります。 A1を「佐藤」に変更した時に、B1は「鈴木」のままでC1は「佐藤」と B1に一度だけ参照させる方法はないでしょうか。

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • エクセル 2個セル間の数字があれば、参照する関数を探しています。

    エクセル 2個セル間の数字があれば、参照する関数を探しています。 ■参照部分(参照シート)  A  B  C  1  24  不合格  25 50  再テスト  51 100  合格 ■リスト A  B  C 高橋 79  合格 佐藤 12  不合格  山田 40  再テスト 木下 58  合格 2シートに分かれています。 リストシートのBセルに数字を入れると、自動的にCに合格・不合格が 入るような関数にするにはどうしたらよいのでしょうか。 IFとVLOOKUPの組み合わせでしょうか。 よろしくお願いします。

  • エクセルで別シートを参照していて、参照元のデータを変更した場合

    エクセルで別シートを参照したいのですがうまくいきません。 (1)Sheet1には顧客データが入っています。 【Sheet1】   A   B   C 1 氏名 住所 性別  2 小川 東京 男 3 佐藤 大阪 女 4 鈴木 福岡 女 (2)Sheet2ではSheet1の顧客データの一部+獲得ポイントのデータが入っています。Sheet2のA列とB列に「=Sheet1!A2」とういう風に関数を入れてSheet1を参照しています。C列~は手入力でデータを入力しています。 【Sheet2】   A   B    C    D 1 氏名 住所  12/1 12/15  2 小川 東京  1    5 3 佐藤 大阪  1    5 4 鈴木 福岡  1    5 (3)Sheet1に新たに顧客情報を入れますが、氏名は五十音順にしたいので行を挿入して入力します。(行3に加藤さんを入れました) 【Sheet1】   A   B   C 1 氏名 住所 性別  2 小川 東京 男 3 加藤 沖縄 男 4 佐藤 大阪 女 5 鈴木 福岡 女 (4)私の希望としては、(3)をしたらSheet2は↓のようになってほしいのですが、実際には(2)の状態のままです。 【Sheet2】   A   B    C    D 1 氏名 住所  12/1 12/15   2 小川 東京  1    5 3 加藤 沖縄   4 佐藤 大阪  1    5 5 鈴木 福岡  1    5 (5)Sheet1の変更結果をSheet2に反映することは無理なのでしょうか?

  • エクセルで。。。

    エクセルで。。。 変則的な星取表を作成したいと思っておりますが、いいアイデアが浮かびません。 やりたいことは (例)   A  B  C  D  E  F 1鈴木 山田 2佐藤 佐々木 3鈴木 山本 4佐藤 山田 とした時に、以下のような星取表を作成したいと思っております。    山田  佐々木  山本 鈴木  1        1 佐藤  1    1 要するに、組合せの回数を星取表にペア回数として数字を入れたいのです。 皆さん、いいアイデアをご教示お願い致します。

専門家に質問してみよう