- ベストアンサー
Excelのセルに斜線を引くマクロ
- Excel2007を使用しています。画像のように,「印刷」シートと「データ」シートがあります。画像のように,「印刷」シートのAO112~BZ112のセルを結合しています。
- そのセルには,VLOOKUP関数で,「データ」シート10列目のデータを返すようにしています。関数を見てもらえば分かるとおり,もし10列目にデータがなければ(VLOOKUPで値が0なら)””(空白)を返すようにしています。
- 以上のようなシートで,このセルにデータが無い場合,画像のAO113~BZ113のように右上がりの斜線を引きたいのです。もちろん,データが入っている場合は,斜線は消します。マクロに関しては,まだまだ初心者のため,ほとんど分からないので,分かりやすく教えていただけませんでしょうか?お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 次のように変更しました。 If Target.Column = 81 And Target.Row = 2 Then 'Stop myR = Application.VLookup(Range("$CC$2"), Sheets("データ").Range("1:1048576"), 10, False) If IsError(myR) Then Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlContinuous Range("AO113:BZ113").ClearContents Else Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone Range("AO113:BZ113").Value = myR End If
その他の回答 (4)
- mar00
- ベストアンサー率36% (158/430)
横からおじゃまします。 CC2の値が変わった時にマクロが動作するようにすればいいと思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$CC$2" Then Exit Sub If Range("AO112").Value = "" Then Range("AO112:BZ112").Borders(xlDiagonalUp).LineStyle = xlContinuous Else Range("AO112:BZ112").Borders(xlDiagonalUp).LineStyle = xlNone End If End Sub ご希望通りの動作であればよいのですが。
お礼
親切にありがとうございました。 うまくできました。 少しだけマクロの内容も理解できたように思います。 また機会がありましたらよろしくお願いします。
- toshi_2000
- ベストアンサー率30% (306/1002)
No.2です。 AO112には、式が入っているのですから、判断条件には、使えませんね。 マクロの中で式を評価する必要があります。 AO112の式に何が入っているか教えてもらえますか。 画像では見えにくいため。
お礼
ご回答ありがとうございます。 AO112の式は,『データ』シートからVLOOKUP関数でデータを返すようにしています。 このファイルは,Sheet1が『印刷』シートで,Sheet2が『データ』という2つのシートから成っています。 『印刷』シートのAO112は,CC2のセルに入力した数字を基に,VLOOKUP関数を使って 『データ』シートの10列目の値を返すようにしています。 しかし,『データ』シートの10列目は,値が入っていないセルもあるので,その場合は空白""を返すようにしているため,次のような式になっています。 =IF(VLOOKUP($CC$2,'データ'!$1:$1048576,10)=0,"",VLOOKUP($CC$2,'データ'!$1:$1048576,10)) もしかしたら,この式も,もっと簡単にできるのかもしれませんが。。。 いちおう,この式を使うことで,『データ』シートの10列目にデータがあれば,そのデータをAO112に記入し, データが無い場合は,空白のままということになっています。 そこで,今回の質問は,その空白の時に斜線を引きたいということなんです。 文章力がないので,わかりにくいかもしれませんが この説明でいかがでしょうか? よろしくお願いします。
- toshi_2000
- ベストアンサー率30% (306/1002)
以下のコードを標準モジュールではなくワークシートのコードに貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 41 And Target.Row = 112 Then If Range("AO112") = "" Then Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlContinuous Else Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone End If End If End Sub
お礼
早速ご回答ありがとうございました。 私の説明が悪かったようで, AO112にデータが無ければ,AO112に右上がりの斜線を引くようにしたいのです。 (AO113ではありませんでした。すみません) そこで,教えていただいたマクロの >If Range("AO112") = "" Then >.Borders(xlDiagonalUp).LineStyle = xlContinuous >Else >Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone Range("AO113:BZ113")をRange("AO112:BZ112")に変えてみました。 ところが,AO112には,次のような数式が入っています。 =IF(VLOOKUP($CC$2,'データ'!$1:$1048576,10)=0,"",VLOOKUP($CC$2,'データ'!$1:$1048576,10)) すると,数式が入っているので""と思ってもらえなかったのか。。。 斜線が引けませんでした。 この数式を消すと引けるので,もう一歩だと思うのですが。。。 まったくのマクロ初心者のため,さっぱり分かりません。 よろしくお願いします。
- kybo
- ベストアンサー率53% (349/647)
以下でどうでしょうか? Sub macro() With Worksheets("印刷") If .Range("AO112").Value = "" Then Shapes.AddLine .Range("AO113").Left, _ .Range("AO113").Top + .Range("AO113").Height, .Range("BZ113").Left, .Range("BZ113").Top End If End With End Sub
お礼
早速のご回答ありがとうございます。 2点,質問してよいでしょうか? 1.斜線を引くことはできるのですが,「データ」シートからVLOOKUP関数でデータを引用してくるのですが,データが変わる度に,自動でマクロが実行できるようにしたいのですが。。。。連続印刷する時に対応して欲しいのです。 2.新たなデータになったとき,AO112のセルにデータが入っている時は,斜線が消えなければならないのですが,残ったままになっています。 以上の2点をよろしくお願いします。
お礼
何度も親切にご指導くださいまして ありがとうございます。 うまくできました。 勉強になりました。