ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。
セル範囲はA1:C7で、A1とB1には常にデータが入っています。残りのセルに、以下のような感じで斜線を引きたいのです。(黒丸はデータが入っているセルを、白丸は空白セルを表しています)
(最初の状態)
A B C
1 ● ● ○ → C1セルの左上隅から右下隅にかけて斜線
2 ○ ○ ○ → A2セルの左上隅からC7セルの右下隅にかけて
3 ○ ○ ○ 1本の斜線
4 ○ ○ ○
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○
(データを追加した状態:ア)
A B C
1 ● ● ● → C1セルの斜線は消える
2 ● ● ○ → C2セルの左上隅から右下隅にかけて斜線
3 ○ ○ ○ → A3セルの左上隅からC7セルの右下隅にかけて
4 ○ ○ ○ 1本の斜線
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○
(データを追加した状態:イ)
A B C
1 ● ● ● → C1セルの斜線は消える
2 ● ● ●
3 ○ ○ ○ → A3セルの左上隅からC7セルの右下隅にかけて
4 ○ ○ ○ 1本の斜線
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○
以下、データ入力が進むにつれて、斜線が自動的に引き直されてほしいです。また、いったん入力したデータを削除したら、斜線は復活してほしいです。データをとびとびに入力したり削除したりすることはありません。
わかりにくい説明で恐縮ですが、よろしくお願いいたします。
No.1
- 回答日時:
当方、Excel2002を使用しています。
ご質問の内容から判断すると、条件付き書式機能を使うのが
一番てっとり早いと考えたのですが、条件付き書式では斜め罫線を
引く機能はありませんでした。
上位バージョンではサポートされているかもしれません。
それ以外では、マクロを書けば実現できます。
具体的な記述はひとまず避けますが、指針としては、該当ワークシートの
Worksheet_Changeイベントにご質問の仕様を記述すればいいのかと。
もしサンプルコードが必要であれば、追記いたします。
この回答への補足
早速のご回答ありがとうございます。マクロの記述に挑戦しようとしたのですが、私、記録マクロ程度しかわからないことに気付きました(^^; かなり無謀なことを望んでいるようですね。
お手間をおかけいたしますが、サンプルコードをお教えいただけますでしょうか。よろしくお願いいたします。
ちなみに、私が使っているExcelも2002でした。
No.2
- 回答日時:
VBAのイベントプロを使わざるを得ないでしょう。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then
Target.Borders(xlDiagonalUp).LineStyle = xlContinuous
Target.Borders(xlDiagonalUp).LineStyle = xlThick
Else
Target.Borders(xlDiagonalUp).LineStyle = xlLineStyleNone
End If
End Sub
入力される可能性のあるセルに、斜線をセル(範囲)に引いておく。
を例えばSheet1のシートモジュールのChangeイベントに貼り付ける。
データを入れると斜線が消えデータが入る。
DELキーでデータ値を消すと斜線がでる。
ほかに上記効果を効かす範囲限定をVBAに組み込む必要があるかも。
ーー
条件付書式は、罫線を左右するは、カバーしていない。
まして関数は無力、値のみ左右させられる。
この回答への補足
ご回答ありがとうございます。お教えいただいたコードを試してみました。xlDiagonalUpは右下がりの斜線を引く命令だと思いますが、実行してみると右上がりの斜線が引かれました。原因がお分かりになられましたらお教えいただけますでしょうか。
>ほかに上記効果を効かす範囲限定をVBAに組み込む必要があるかも。
A1:C7以外のセルも別の入力に使いますので、この方法もぜひお教えください。
あと、もうひとつわがままなお願いをさせていただいてよろしいでしょうか。お示しいただいたコードですと各セルごとに斜線が引かれますが、A2:C7やA3:C7のように矩形になった部分には一気に1本の右下がりの線が入ってほしいのです。そのようなコードをお教えいただければ大変有り難く存じます。
あつかましいお願いで申し訳ありませんが、よろしくお願いいたします。
No.3
- 回答日時:
まとめて1本の斜線にこだわるとしたら、直線を描いてサイズを随時変更していくことになると思います。
やはりVBAになります。この回答への補足
ご回答ありがとうございます。
>まとめて1本の斜線にこだわるとしたら
そうなんです。A2:C7など、矩形になるところは1本の線で引くように指定されているんです。
No.4
- 回答日時:
シートにオートシェイプで右下がりの直線を二本引いて、それぞれShortLine、LongLineと名前を付けておきます(コード内の表記と一致していればなんでもいいです)。
その後、以下のコードをシートモジュールに貼り付けてください。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Integer
Dim n As Integer
Dim numR As Integer
Dim numC As Integer
numR = 7 '行数
numC = 3 '行数
If Target.Row <= numR And Target.Column <= numC Then
LastRow = Cells(numR + 1, 1).End(xlUp).Row '最終行
n = numC - Application.WorksheetFunction.CountBlank _
(Range(Cells(LastRow, 1), Cells(LastRow, numC))) '最終行の入力セル数
With ActiveSheet.Shapes("LongLine") '長い斜線の設定
.Left = 0
.Top = Cells(LastRow + 1, 1).Top
.Height = Cells(numR + 1, 1).Top - .Top
If LastRow = numR Then
.Width = 0
Else
.Width = Cells(1, numC + 1).Left
End If
End With
With ActiveSheet.Shapes("ShortLine") '短い斜線の設定
If n = 3 Then
.Height = 0
Else
.Height = Cells(LastRow, 1).Height
End If
.Top = Cells(LastRow, 1).Top
.Left = Cells(1, n + 1).Left
.Width = Cells(1, numC + 1).Left - .Left
End With
End If
この回答への補足
丁寧なご指導ありがとうございます。オートシェイプで線を描いてから、上のコードをSheet1(Sheet1)に貼り付けて試してみたのですが、データを入力しても変化がありません。どのようにすればよろしいでしょうか。何度も恐縮ですが、ご指導よろしくお願いいたします。
補足日時:2007/01/13 19:42No.5
- 回答日時:
No.4です。
最後のEnd Subが抜けていました。すみません。
直線に名前は付けましたか?左上の名前ボックスにて変更できます。
Worksheet_Changeは他に重複していませんか?
実行したときはなにかエラーが出ませんでしたか?
この回答への補足
動きました!新しいブックにコードを貼り付けて、End Subを付け加えると、期待通りの動作をしてくれました。すばらしいです!ありがとうございます。
…もうひとつだけお教えいただけないでしょうか。
A1:C7のセル範囲ということでお教えいただいたのですが、これをB2:D8やD14:F20というようにセル範囲の開始位置が違う表に適用する場合、コードのどこを変えればよろしいのでしょうか。コード中の数字を色々さわってみたのですが、結局わかりませんでした。なにとぞよろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
ちょっと変えてみました。
もっとすっきり書けると思うのですが・・・。Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Integer
Dim n As Integer
Dim TopR As Integer
Dim LeftC As Integer
Dim numR As Integer
Dim numC As Integer
TopR = 3 '先頭の行
LeftC = 3 '先頭の列
numR = 7 '行数
numC = 3 '列数
If Target.Row >= TopR And Target.Column >= LeftC _
And Target.Row <= TopR + numR - 1 And Target.Column <= LeftC + numC - 1 Then
LastRow = Cells(TopR + numR, LeftC).End(xlUp).Row '最終行
n = numC - Application.WorksheetFunction.CountBlank _
(Range(Cells(LastRow, LeftC), Cells(LastRow, LeftC + numC - 1))) '最終行の入力セル数
With ActiveSheet.Shapes("LongLine") '長い斜線の設定
.Left = Cells(TopR, LeftC).Left
.Top = Cells(LastRow + 1, 1).Top
.Height = Cells(TopR + numR, 1).Top - .Top
If LastRow = TopR + numR - 1 Then
.Width = 0
Else
.Width = Cells(1, numC + 1).Left
End If
End With
With ActiveSheet.Shapes("ShortLine") '短い斜線の設定
If n = 3 Then
.Height = 0
Else
.Height = Cells(LastRow, 1).Height
End If
.Top = Cells(LastRow, 1).Top
.Left = Cells(1, LeftC + n).Left
.Width = Cells(1, LeftC + numC).Left - .Left
End With
End If
End Sub
.Top :セルや図形の左上のy座標
.Left :セルや図形の左上のx座標
.Height :セルや図形の高さ
.Width :セルや図形の幅
これらをセル位置に応じて設定しています。
Cells(行番号, 列番号)
以下を適宜変更してください。
TopR = 3 '先頭の行
LeftC = 3 '先頭の列
numR = 7 '行数
numC = 3 '列数
完璧です!素晴らしいマクロをお教えいただき、本当にありがとうございます!目的のシート作成に当たって、レイアウトの自由度がものすごく上がりました。
私も教えていただくだけでは申し訳ないと思い、昨夜と今日半日、ネットや手元の本を漁ってみましたが、付け焼き刃でどうなるものでもなく、改めて、自在にマクロを組める方は凄いと思いました。
お教えくださったマクロを勉強させていただいて、もっともっと知識を深めたいと思います。この度は本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Excel(エクセル) 日本語向きの“ダブルクオーテーション”の入力 1 2022/10/16 11:33
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) 同じExcelのBOOK内で 1枚目のシートのA1のセルにデータを 入れると2枚目のシートのC1のセ 1 2022/10/25 09:40
- Excel(エクセル) vba セルの罫線について教えてください 2 2022/12/28 17:14
- Excel(エクセル) WORKDAY関数 4 2023/06/08 13:23
- Excel(エクセル) Excelのマクロを教えていただけないでしょうか? 1 2023/07/06 19:56
- Excel(エクセル) Excel 関数 数式 について 2 2022/09/02 21:45
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセルの質問です。条件によってセルに斜線を引きたいのですが。
その他(OS)
-
Excelの関数について、特定の文字を入れると斜線や線を入れることは出来ますか?
Excel(エクセル)
-
vlookupで返された値が空白だったら斜線をひく
会計ソフト・業務用ソフト
-
-
4
条件付き書式で自動で斜線の罫線を引く
Excel(エクセル)
-
5
「B列が日曜の場合」C列に/(斜線)が入るようにならないものでしょうか?
Excel(エクセル)
-
6
Excel VBA 条件に一致した言葉の下セルに斜線をひきたい
Visual Basic(VBA)
-
7
excel 空白セルに自動で斜線をひきたいです
Excel(エクセル)
-
8
Excel(VBA)データ入力に応じて複数範囲のセルの上に1本の斜線を引きたい
Excel(エクセル)
-
9
セルの内容の条件に応じて図形の表示をしたりしなかったりする
Excel(エクセル)
-
10
エクセルでデータがある部分だけ罫線で囲いたいです。
Excel(エクセル)
-
11
手入力をしても数式が消えないようにするには?
Excel(エクセル)
-
12
エクセルVBA 条件判断(斜線)
Excel(エクセル)
-
13
エクセルで入力のあるセルのみ別シートに表示したい
Excel(エクセル)
-
14
エクセルの色も=イコールできますか?
Windows Me・NT・2000
-
15
エクセルで空白に自動で文字を入れる
Excel(エクセル)
-
16
エクセルでオブジェクトを常に表記する
Excel(エクセル)
-
17
エクセルでセルに文字が入力されたらマクロを実行
Excel(エクセル)
-
18
IF関数1と6なら「〇」それ以外は「×」0は「-」
Excel(エクセル)
-
19
エクセルでセルに何も入力していないときに【 ー 】を表示したい
Excel(エクセル)
-
20
複数のセルのいずれかに数字がある場合に表示する関数
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのチェックボックスの使い...
-
エクセルで指定したセルのどれ...
-
対象セル内(複数)が埋まった...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
エクセルのセルの枠を超えて文...
-
Excelで数式内の文字色を一部だ...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
複数のセルのいずれかに数字が...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
セルをクリック⇒そのセルに入力...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excelで住所を2つ(町名迄と番...
-
excelの特定のセルの隣のセル指...
-
枠に収まらない文字を非表示に...
-
エクセル “13ヶ月”を“1年1ヶ月...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
excelのCOUNTIF関数で、『範囲=...
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
(Excel)数字記入セルの数値の後...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excel2003 の『コメント』の編...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
複数のセルのいずれかに数字が...
-
枠に収まらない文字を非表示に...
-
excelの特定のセルの隣のセル指...
おすすめ情報