• ベストアンサー

セルの値によって隣のセルに斜線を自動で引く方法

エクセル2007ですが、あるセルに数値を入力するのですが、その数値が0、または、空欄だった場合、そのセルの右隣の2セルに右上りの斜線を自動的に引かれる設定にしたいのですが、条件付き書式だと斜線が選べず困っております。 マクロやVBEでも結構ですが、何かいい方法があれば教えて頂けますか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>あるセルに数値を入力する ご相談のサンプルで「金額」列に,「生数字を入力している」のか実は他のセルの数字で「計算する数式が記入されている」のかで,具体的なヤリ方は違ってきます。 ご相談ではあなたの実際のエクセルの状況に基づいて,情報提供してください。 一応ご相談は正しくて,B列に「実際に生数字を記入している」とすると。 手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("B:B"))   h.offset(0, 1).resize(1, 2).borders(xldiagonalup).linestyle = iif(h.value = 0, xlcontinuous, xlnone)  next end sub ファイルメニューから終了してエクセルに戻る B列に実際に数字を記入したり削除したりすると,その行のC,D列に斜線が入ったり消えたりする。 #参考 上述の手順はこれからB列に数字を書いたり消したりする用です。 既に記入済みのB列に対して斜線を入れたいときは,オートフィルタで絞ってC,D列に斜線を設定した方がカンタンです。

gxtsf295
質問者

お礼

ご教授ありがとうございます。 私の質問の説明が足らなくてすみません。 B列へは生数字を入力します。 教えて頂いたコードを設定したところ、斜線が出る様になりました。 助かりました。 ありがとうございました。

その他の回答 (3)

回答No.4

多少強引ですが、VBAを使わない方向で。 見たところ、シートの表示形式から「枠線」を非表示にしているようですので都合よいです(笑) 下準備として、印刷範囲外に ・空白のセル(塗りつぶしも罫線も無し、仮にF1セルとします) ・斜線を引いたセル(塗りつぶし無し、斜線。仮にG1セルとします) を作ります。もちろん、違うシートでもOKですよ。 とりあえずここでは「Sheet1」に作ったものとして進めます。 これで下準備完了。 2007でも同じだったと思うのですが、 リボンの数式タブ⇒名前の定義 で「新しい名前」ダイアログを出します。 「名前」に PIC (お好きな文字列でどうぞ。数値はNGです) 「範囲」は ブック のまま。 「コメント」は適宜どうぞ。 「参照範囲」には   =IF(Sheet1!$A$2="",Sheet1!$G$1,Sheet1!$F$1) という式を入力し、「OK」します。 どこでも良いので、適当な空白セルをコピー、 適当な場所に形式を選択して貼り付け⇒リンクされた図 で貼り付けます。 罫線も塗りつぶしも無いセルがベストです。 貼られた図にフォーカスを合わせ、 数式バーに「=PIC  (←先程つけた名前)」と入力、Enterします。 この図を表示したいセルに合わせて移動してやって、完了です。 数が多いとコレは逆に不便ですね。 失礼しました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 既に記入済みのB列に対して斜線を入れる事が出来る方法です。 (但し、A列に何らかの値が入力されている最後の行の処までに限ります)  まず、VBEのウィンドウを開いて、「プロジェクト - VBAProject」欄の中に並んでいるシートモジュールの中から、御質問の様な設定をしたいシートを選択してダブルクリックして下さい。  次に、VBEのウィンドウの右側にある広い欄に下記のVBAの構文を入力して下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Const FirstRow = 2 'データの入力欄の中で最も上にあるセルの行番号 Const NameColumn = "A" '「名称」が入力されている列の列番号 Const AmountColumn = "B" '「金額」が入力されている列の列番号 Const BorderColumn = "C:D" '罫線を入れたり消したりする列の列番号 Dim myRange As Range, c As Range, LastRow As Long LastRow = Range(NameColumn & Rows.Count).End(xlUp).row If LastRow < FirstRow Then Exit Sub With Application .ScreenUpdating = False .Calculation = xlManual End With For Each c In Range(AmountColumn & FirstRow & ":" & AmountColumn & LastRow) With Intersect(Rows(c.row), Range(BorderColumn)).Borders(xlDiagonalUp) .ColorIndex = RGB(0, 0, 0) .TintAndShade = 0 .Weight = xlThin If c.Value = 0 Or c.Value = "" Then .LineStyle = xlContinuous Else .LineStyle = xlNone End If End With Next c With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub  次に、VBEのウィンドウの[上書き保存]ボタンをクリックするか、又は[Ctrl]キーを押しながら[S]キーを押して、そのVBAの構文を保存して下さい。  その上で、そのマクロを登録したシート上にあるセル(B列でなくとも良い)の内どれか1つの値を変更しますと、B列の値に応じてC列~D列の2行目以下のセルの斜線が引かれたり、消去されたりします。  尚、 >0、または、空欄だった場合、そのセルの右隣の2セルに右上りの斜線を自動的に引かれる設定にしたい という条件でしたので、B列に数値データではない文字列データが入力された場合には、「0でも空欄でもない」ため斜線が消える様にしております。  又、今回は >B列へは生数字を入力します。 との事ですが、上記のVBAのマクロはB列にワークシート関数が入力されていて、そのシート内のセルのデータが手入力によって変更された場合には、ワークシート関数の出力結果によってB列の値が変わった場合においても、斜線の引き直しが行われる様になっております。

gxtsf295
質問者

お礼

どうもありがとうございます。 こちらも一度試してみたいと思います。

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

確かに条件付き書式は、罫線のセル囲い資格はあるものの、車線がグレイアウトして使えない。 ーー それでVBAしかないと思いやってみた。 ==>勘違いに注意 すでにデータが入力済みの場合の処理ではない。 ーー Sheet1のWorksheet1のChangeイベントとして下記を張り付ける。(標準モジュールに貼りつけるのではない) Private Sub Worksheet_Change(ByVal Target As Range) EnableEvents = False If Application.Intersect(Target, Range("A3:A100")) Is Nothing Then Else If Target = "欠席" Or Target < 20 Then Target.Offset(0, 1).Borders(xlDiagonalUp).LineStyle = xlContinuous Target.Offset(0, 2).Borders(xlDiagonalUp).LineStyle = xlContinuous Else Target.Offset(0, 1).Borders(xlDiagonalUp).LineStyle = xlNone Target.Offset(0, 2).Borders(xlDiagonalUp).LineStyle = xlNone End If End If EnableEvents = True End Sub ーーーーー 使用制約 (!)A列の一部に限る (2)これからA列にデータを入れる場合に限る。 すでにデータが入力済みの場合の処理ではない。 (3)車線を引くのは「欠席」と入れた場合と「20以下の数値」を入れた場合とDeleteで空白に戻した場合など。よくチェックしてみる必要は残っているとおもう。 (4)即時反応する (5)「出席」の文字があって、上から「欠席」に入力しなおすと、車線を引く。 ーーー すでに出ている回答と違いがあればよいが。 小生は、日ごろからシートのイベントを使うのは、むつかしいと思っている(ユーザーが思わぬ入力操作をするかもしれない。Canceキーや複数セル選択など。) ある程度テストをよくして使うべきとおもう。

gxtsf295
質問者

お礼

どうもありがとうございます。 こちらも一度試してみます。

関連するQ&A

  • 条件付き書式で自動で斜線の罫線を引く

    例えば、A1に『×』と入力された場合、B1のセルに斜線の罫線を自動的にひくような条件付き書式の設定をしたいのですがうまくいきません。マクロは難しいので条件付き書式で対応したいと考えておりますが、どなたか方法をご教示いただけませんでしょうか。 ちなみにExcel2007を使用しています。 以上、よろしくお願いいたします。

  • Excel データ入力に応じて自動的に斜線を引きたいのですが

    Excel データ入力に応じて自動的に斜線を引きたいのですが ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。 AC66:AJ67のセルが結合されていて、それが下にAC88:AJ89まで計11あります。 AC66:AJ67に数値が入った場合はその下のセルからAC88:AJ89までを一本の斜線(右上から左下の線)を引き、同じように2段目まで数値が入っている場合は2段目から一番したの段までを斜線を引きたいと思っています。 2段目に数値が入っている場合は必ず1段目にも数値が入っている状況です。 またその結合されたセルはIF関数が入っていて、他の入力用シートにリンクしています。入力用シートに数値が入っていない場合は空白で表示される状況です。 VBAを使って自動的に斜線を入れたいと思っています。 分かりにくい説明ですみませんが、添付の画像を見てください。 どなたかわかる方がいらっしゃいましたらお願い致します。

  • 複数セルに一本の斜線を引く

    こんにちは。エクセル2000を使用しています。 斜線を引くにはセルの書式で設定するか、オートシェイプを使えばできますが、複数のセル(例A1:C2)に一本の斜線をひく場合オートシェイプを使わずにひく方法はないでしょうか?オートシェイプだとセルの幅や高さを変更するとズレてしまいます。なにかよい方法はありませんか。よろしくお願いします。

  • ある操作後に自動的にセルに斜線を入れるには?

    Excelで、管理表、対応表という2つのシートを作成していますが、T列に処理という欄を設けて、ここに入力規制のリストで○か×かを選択するようにしているのですが、ここの処理のある行のセルに○が入ると、その行にあるM列からU列までのセルに斜線もしくは-が、自動的に入るようにしたいのですが、マクロ処理でできますでしょうか?できるのであれば、教えて下さい。

  • Excelでセルの色づけを自動に行いたいです。

    Excelでセルの色づけを自動に行いたいです。 入力した数値と同じ数のセルに、自動で色をつける事は可能でしょうか? 例えば、A1のセルに「5」と入力すると、隣のセルB1~F1までの5つのセルが 塗りつぶされるというようなことをしたいと思っています。 条件付書式、またはVBAで方法があれば教えて下さい。

  • EXCELの条件付き書式で斜線を引くには?

    "○"の入力されたセルに自動で斜線の罫線を引きたいのですが, 条件付き書式では斜線の罫線を引くことができません。 どなたかアドバイスをお願いします。

  • ダイアログボックスに自動的にセルの値を入れるには

    エクセルのマクロを実行したときに、「番号を入れてください」のダイアログボックスが出てくるのですが、その値がB1セルの値だとわかっているので自動的にB1セルの値を入れるようにするマクロ(VBEコード)がわかる方教えてください

  • エクセルで、あるセルを参照に空白のセルを塗りつぶす方法

    仕事で毎時間の各商品の売れ具合を、エクセルで日々表にしています。表は多い(多)普通(普)少ない(少)無し(無)と数段階に区切って表示して、それぞれに(多)なら赤、(普)なら黄~とそのセルを塗りつぶしています。表内のセルには、条件付き書式をかけているのでA商品の売り上げ9時台が「普通」なら、対象のセルに普と入力すると、そのセルは自動的に黄色で塗りつぶされるようにしています。 そして、9時台が「普通」で、同じ商品の10~14時台まで同じ「普通」の売り上げが続き、15時に「多い」になったら、10~14時台のセルを9時台と同じ状態が続いたということで、セルの中には何も入力せず、色だけ黄色で塗りつぶしています。 (一つの商品は時間毎に右のセルに移動して、始めから終わりまで同じ行で表示しています。) 前置きが長くなってしまいましたが、質問させていただきたいのは、 あるセル(例:セルA2)に「普」と入力し、塗りつぶしも(条件付き書式で自動的に)黄色になった場合に、そのセルの右隣のセル(例:セルB2)に何も入力されていなければ、同じ色(黄色)に塗りつぶし、さらにその右隣のセル(例:セルC2)にも何も入力されていなければ、これも同じ色(黄色)に塗りつぶす~という作業を、同じ行の右隣のセルに何か入力されるまで繰り返す。という指示をエクセルに与えることは可能でしょうか?(ソフトはエクセル2000を使用しています) 自分で関数で色々試してみましたが、出来ずに困っています。 これは、マクロ(VBA?)というもので、出来るのでしょうか? 私はマクロを全然使ったことが無いのですが、もしマクロで出来る場合、マクロ初心者の私では難しいでしょうか? 長々とした、わかりづらい質問で申し訳ありません。 宜しくお願いいたします。

  • excel_特定のセル範囲で同じ文字列が有ったら色

    マクロ初心者です。 excel2002マクロ_特定のセル範囲で同じ文字列が有ったらその数によりセルを色分けしたい 特定のセル範囲で文字列が入っているところと空欄のところがあります。 空欄のところには、後から文字列が入るところと空欄のままのところがあります。 その範囲内で同じ文字列があった場合、2個の時、3個の時、4個の時、5個、6個、7個、8個、9個、10個以上の時に、それぞれ決めておいた色でセルを色分け表示したいです。 文字列の順番はランダムです。 excel2002なので、3種類までなら条件付き書式で設定できるのですが、それを超える場合は設定できません。 それで、これをマクロで設定できるでしょうか。 条件付き書式で設定した場合は、文字列を入力した時点でセルの色はすぐに反映されますが、マクロの場合もそのようにすることは可能でしょうか。 よろしくお願いします。

  • 【Excel VBA】空白の結合セルに右上り斜線を引く

    Excel VBAは初心者です。 仕事で必要なため、アドバイスをいただけると非常に助かります。 よろしくお願いします。 【VBAで実現したいこと】  下記のようなセルで構成されている簡単な  申請書を作成しております。    結合セル1:ABCD列と4行目で結合されたセルで、氏名を入力します。  結合セル2:EFGH列と4行目で結合されたセルで、氏名を入力します。  結合セルA:ABCD列から5678行で結合されたセルです。  結合セルB:EFGH列から5678行で結合されたセルです。  ※結合セル1、2~10まで存在し、結合セルA、B~Jまで存在します。  結合セルAは結合セル1を参照し、結合セル1が空欄の場合  結合セルAに右上りの斜線を引きます。結合セル1が空欄でない場合、  何もしません。  結合セルBは結合セル2を参照し、結合セル2が空欄の場合  結合セルBに右上りの斜線を引きます。結合セル2が空欄でない場合、  何もしません。  同様な処理を、結合セルJ、結合セル10まで行います。 【教えていただきたいこと】  1.結合セルA~J、結合セル1~10全てが空欄だった場合、   空欄の結合セルは右上りの斜線を引きます。   下記のプログラムを作成しましたが、右上りの斜線が   引けません。   どのようにしたら良いでしょうか。     2.上記「VBAで実現したいこと」を行うためには、   下記のプログラムにどのような追加を行えば良いでしょうか。 【作成したプログラム】 Private Sub worksheet_change(ByVal target As Range) Dim i As Range For Each i In target If i.MergeArea.Value = "" Then i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlContinuous Else i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlNone End If Next i End Sub 以上、よろしくお願いします。

専門家に質問してみよう