• ベストアンサー

文字の色も参照 VLOOKUP

VLOOKUPを使って、シート1に有るデータベースから 必要なデータを参照して、シート2に表示させています。この時シート1のデータの中には、いくつか 文字の色がついていて 目立つようにしているものがあります。これをVLOOKUPのように、同じくデータベースから参照して、抽出先データに反映させたいのですが、関数では出来ないようで、VBAでコントロールをする必要があるようで、調べたところ下記の様な、質問が過去にあり、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=968962 これを試してみましたが、あまり詳しく書かれていなく、私の解釈で作るとまったく動作しませんでした。 どなたか、わかる方もう少し補足情報をいただけませんか? よろしくおねがいします。

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

どうしてもVBAでというなら僕の回答は読み飛ばしてください。 VLOOKUPと条件付書式でやる方法を思いつきました。 シート1に1列追加し、色付きなら1、色付きじゃなければ空白とします。 で、シート2の方では項目を参照するVLOOKUPの右の列に、先程追加した色付きか否かのフラグ列を参照するVLOOKUPを書きます。 最後に、項目を参照した列を選択して、書式→条件付書式 数式が:=D1=1 (色つきか否かの列がDの場合) これで、シート1で色付きの項目を参照した場合はシート2でも色つきにはなります。 頑張ってくださいヽ(^。^)ノ

shinarin
質問者

お礼

GET.CELLでセル番号を取って、それをVLOOKで参照し、条件書式したらうまくいきました。再計算(F9)をさせないと変更が更新されないので、これを自動でするマクロを入れようと思います。 大変参考になりました。 有難う御座います。

その他の回答 (3)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.4

例えば商品テーブルとして、Sheet1 に     E    F    G 1  番 号  品 名  単 価  2  S10  みかん  100 3  S20  りんご  200 4  S30  ばなな  300 があり、同じくSheet1のA列に番号を入力して、 この商品名テーブルを参照し、B列に品名を表示する場合。 強調の為の色は品名に付けてあるとする。 番号がない場合はOn Errorでこの処理を抜ける。 これはあくまでもワークシート関数を使用する場合であり、またこのような場合ワークシート関数はVLookUpではなくMATCH関数が適しています。 VBEを開き、Sheet1に以下を書くかコピペ。 Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Long On Error GoTo JumpSub If Target.Column = 1 Then R = WorksheetFunction.Match(Target, Range("E1:E4"), 0) With Target.Offset(0, 1) .Value = Range("F" & R).Value .Font.ColorIndex = Range("F" & R).Font.ColorIndex End With End If JumpSub: End Sub 上記のコードの場合、MATCHの範囲は、 E1:E4 です。 E2:E4 と勘違いしないように。 また、上記のコードのような場合はApplication.EnableEventは必要ありませんが、大事なことですので、どういうときに必要になるのかはちょと勉強してみてください。  

shinarin
質問者

お礼

返事おそくなりました。 ご丁寧に解説有難う御座います。 コピペをしてみたのですが、うまく動かなく、 あまり手取り足取り質問するのも申し訳ないので、 今回はもう少し低めのハードルに挑戦します。 有難う御座いました。

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

上記過去質問の回答者です。 例題ちして、E1:G3に 1 東京 6 2 大阪 8 3 名古屋 22 をいれ、表を作ります。 G列は色コードです。 Sheet1のChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False Target.Offset(0, 1) = WorksheetFunction.VLookup(Target, Range("e1:g3"), 2, False) Application.EnableEvents = True Target.Offset(0, 1).Interior.ColorIndex = _ WorksheetFunction.VLookup(Target, Range("e1:g3"), 3, False) End If End Sub をコピーします。 ワークシート1に戻り A列に1,2,3のどれかを入れると、B列にそれに対応した文字列が入り、B列セルに色がつきます。 但し、VBAが少し判っていただいてないと、頓挫するかも知れない気がします。 (1)Changeイベントのクセ (2)途中でエラーに成ったとき、標準モジュールの Sub test01() Application.EnableEvents = True End Sub で普通状態に戻す (3)本番では Target.Column = 1の部分の、入力列に合わせた修正 "e1:g3"),の部分の表の大きさ(項目数の多さ)による 修正 などが必要です。

shinarin
質問者

お礼

簡単なVBAしかわからなく挫折してしまいました。 ご丁寧に解説有難う御座います。 もう少し力をつけてからVBAに切り替えさせていただきます。お返事おそくなってすみません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

VBAでやる場合、 例えば、 マクロの記録で 書式のコピー(ハケのボタン)を使って どっかの書式付けされたセルをコピーしてみて下さい。 その時のマクロの記録を参考に、 該当セルの書式をコピーすればいいと思います。

shinarin
質問者

お礼

アドバイス有難う御座います。 参考にさせていただきます。

関連するQ&A