- ベストアンサー
Excel 空白セルに自動で斜線をひきたい方法とは?
- Excel2007を使用して、印刷シートの特定の結合セルに空白セルがある場合に自動で斜線を引きたい場合、その方法を探しています。
- 過去の質問や連続印刷への対応も考慮しつつ、斜線を引く方法を模索しているが、上手くいかない。
- 結合セルの範囲に印刷シートを連続印刷するマクロも作成済みであり、その中で斜線を引く機能を追加したい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すでにNo1さんが回答されてはいますが、 J14セルの数式で、名簿に番号が無かった場合のエラー対策を一応入れています。 あと、(おそらく)印刷範囲外の行数分(10行)だけ、ご質問内容と画像の状態がずれています。 どちらに合わせて作成するか判断しかねますので、統一性を持たせてください。 >印刷シートのセルAJ33:AR37の結合セルに 画像ではAJ43:AR47と見受けられます。 >=IF(VLOOKUP($J$4,名簿!$A$2:$G$383,7)="","","印") 個の数式で参照している「$J$4」は画像では「$J$14」ですよね? 下記コードは画像の状態として作成しています。 「AJ33」に「"印"」や「""」が表示されるのであれば 『Set myRng = Range("AJ43")』を変更してください。 ■注意 印刷開始マクロに斜線の切換コードを追加したコードが「VBAコード(1)」になります。 既存の印刷開始マクロと差し換えて利用してください。 ただし、 名前「番号」の範囲A1:C3の手入力時にも斜線を切り替えたい場合は 印刷するシート名を右クリック→コードの表示 最下の「VBAコード(2)」を貼り付けたうえで、 現在の印刷開始マクロはそのまま『変更せずに』利用してください。 ■VBAコード(1) Sub 印刷開始() Dim myRng As Range Set myRng = Range("AJ43") Range("番号") = Range("自") Do While Range("番号") <= Range("至") If IsError(myRng.Value) Then Exit Sub With myRng.Borders(xlDiagonalDown) If myRng.Value = "" Then .LineStyle = xlContinuous Else .LineStyle = xlNone End If End With Sheets("印刷").PrintOut Range("番号") = Range("番号") + 1 Loop End Sub ■VBAコード(2) Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range Set myRng = Range("AJ43") If IsError(myRng.Value) Then Exit Sub With myRng.Borders(xlDiagonalDown) If myRng.Value = "" Then .LineStyle = xlContinuous Else .LineStyle = xlNone End If End With End Sub
その他の回答 (2)
- eden3616
- ベストアンサー率65% (267/405)
No2のものです。 申し訳ありません。 数式エラーの場合コードを終了していましたので 印刷が途中で停止してしまいます。 『VBAコード(1)』を修正致します。 ■VBAコード(1) Sub 印刷開始() Dim myRng As Range Set myRng = Range("AJ43") Range("番号") = Range("自") Do While Range("番号") <= Range("至") With myRng.Borders(xlDiagonalDown) If IsError(myRng.Value) Then .LineStyle = xlContinuous Else If myRng.Value = "" Then .LineStyle = xlContinuous Else .LineStyle = xlNone End If End If End With Sheets("印刷").PrintOut Range("番号") = Range("番号") + 1 Loop End Sub
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! >このセルが空白ならば斜線を引きたいのですが、なかなかうまくできません。 詳しく検証していませんが・・・ Sub 印刷開始() Range("番号") = Range("自") Do While Range("番号") <= Range("至") With Range("AJ33") If .Value = "" Then .Borders(xlDiagonalUp).LineStyle = xlContinuous Else .Borders(xlDiagonalUp).LineStyle = xlNone End If End With Sheets("印刷").PrintOut Range("番号") = Range("番号") + 1 Loop End Sub こんな感じをご希望なのでしょうか?m(_ _)m
お礼
お礼が遅くなってしまいすいません。 希望通りの動きを再現でき、とても勉強になりました。 ありがとうございました。
お礼
お礼が遅くなってすいません。 そして、質問と画像の行数のズレ、ご指摘通りです…今後気をつけたいと思います。 ありがとうございます。 本題ですが、今回はコード(2)の方を使用させて頂きました。 名前「番号」の範囲A1:C3に手入力し、画面上で情報を確認することがありますので、非常に助かりました。 本当にありがとうございました