ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。

 セル範囲は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 ○ ○ ○

 以下、データ入力が進むにつれて、斜線が自動的に引き直されてほしいです。また、いったん入力したデータを削除したら、斜線は復活してほしいです。データをとびとびに入力したり削除したりすることはありません。

 わかりにくい説明で恐縮ですが、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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 '列数
    • good
    • 0
この回答へのお礼

完璧です!素晴らしいマクロをお教えいただき、本当にありがとうございます!目的のシート作成に当たって、レイアウトの自由度がものすごく上がりました。

私も教えていただくだけでは申し訳ないと思い、昨夜と今日半日、ネットや手元の本を漁ってみましたが、付け焼き刃でどうなるものでもなく、改めて、自在にマクロを組める方は凄いと思いました。

お教えくださったマクロを勉強させていただいて、もっともっと知識を深めたいと思います。この度は本当にありがとうございました。

お礼日時:2007/01/14 15:28

No.4です。


最後のEnd Subが抜けていました。すみません。

直線に名前は付けましたか?左上の名前ボックスにて変更できます。
Worksheet_Changeは他に重複していませんか?

実行したときはなにかエラーが出ませんでしたか?

この回答への補足

動きました!新しいブックにコードを貼り付けて、End Subを付け加えると、期待通りの動作をしてくれました。すばらしいです!ありがとうございます。

…もうひとつだけお教えいただけないでしょうか。

A1:C7のセル範囲ということでお教えいただいたのですが、これをB2:D8やD14:F20というようにセル範囲の開始位置が違う表に適用する場合、コードのどこを変えればよろしいのでしょうか。コード中の数字を色々さわってみたのですが、結局わかりませんでした。なにとぞよろしくお願いいたします。

補足日時:2007/01/13 22:00
    • good
    • 0

シートにオートシェイプで右下がりの直線を二本引いて、それぞれ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:42
    • good
    • 0

まとめて1本の斜線にこだわるとしたら、直線を描いてサイズを随時変更していくことになると思います。

やはりVBAになります。

この回答への補足

 ご回答ありがとうございます。

>まとめて1本の斜線にこだわるとしたら

 そうなんです。A2:C7など、矩形になるところは1本の線で引くように指定されているんです。

補足日時:2007/01/13 11:55
    • good
    • 0

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本の右下がりの線が入ってほしいのです。そのようなコードをお教えいただければ大変有り難く存じます。

 あつかましいお願いで申し訳ありませんが、よろしくお願いいたします。

補足日時:2007/01/13 11:52
    • good
    • 0

当方、Excel2002を使用しています。


ご質問の内容から判断すると、条件付き書式機能を使うのが
一番てっとり早いと考えたのですが、条件付き書式では斜め罫線を
引く機能はありませんでした。
上位バージョンではサポートされているかもしれません。

それ以外では、マクロを書けば実現できます。
具体的な記述はひとまず避けますが、指針としては、該当ワークシートの
Worksheet_Changeイベントにご質問の仕様を記述すればいいのかと。
もしサンプルコードが必要であれば、追記いたします。

この回答への補足

 早速のご回答ありがとうございます。マクロの記述に挑戦しようとしたのですが、私、記録マクロ程度しかわからないことに気付きました(^^; かなり無謀なことを望んでいるようですね。

 お手間をおかけいたしますが、サンプルコードをお教えいただけますでしょうか。よろしくお願いいたします。

 ちなみに、私が使っているExcelも2002でした。

補足日時:2007/01/13 09:25
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q斜線制限の基本型は隣地斜線

斜線制限の基本型は隣地斜線であって、隣地が北側の場合の北側斜線や、隣地が道路の場合の道路斜線はその特則ということなのでしょうか?
例えば、隣地が境界に沿って位置指定道路を設置する場合で、道路斜線の方が隣地斜線より緩い
場合でも道路斜線が適用されて隣地斜線を満たす必要はなくなるのでしょうか?

Aベストアンサー

概ね、道路斜線の方がきつい。
隣地は、5mとか10m、20mとかの立ち上りがあってから勾配がつくけど、
道路は1m以上の段差が無い限り、せいぜい後退緩和ぐらいです。

ここで、わからない記述は、
>隣地が境界に沿って位置指定道路を設置する場合
なんですが、その前の
>隣地が北側の場合の北側斜線や、隣地が道路の場合
と合わせると、
隣地が位置指定道路になるってことですかね。

位置指定をとったら、前面道路として道路の反対側から地域に適合した勾配を上げることになります。
そこの所有者さんとなんら接点が無くてもそうしたことになります。

QVBA コピーモード中の左上隅セルを、画面の左上の位置にスクロールした

VBA コピーモード中の左上隅セルを、画面の左上の位置にスクロールしたい!


Windows XP Home Edition
SP3
Office XP Personal 2002
Excel 2002

「 現在、コピーモード中になってる左上隅セル ( A20 ) 」 の 「 3つ上のセル ( A17 ) 」を
Window画面の左上の位置に、スクロールしたいのですが、どおすればよろしいでしょうか?

何卒、ご教示のほどをお願い致します。

Sub スクロール()
 Range(A20:B30).Copy
 Application.Goto reference:=ActiveWindow.Range(VisibleRange.Item(1).Address), Scroll:=True
End Sub

Aベストアンサー

Gotoメソッドが出てますので、もっと単純に考えましょう。

Goto(移動先,スクロールの有無)

ですが、移動先はRangeオブジェクトでもかまいません。ですので、OffsetプロパティーとWithステートメントを追加すると以下のような構文で解決可能です。

With [コピー範囲]
 .Copy
 Application.Goto .Cells(1).Offset(-3,0), True
End With

[コピー範囲]は任意のRangeオブジェクトにしてくださいね。質問文の場合だと
With Range("A20:B30")
になります。


キーポイントは.Cells(1)と.Offset(-3,0)になります。
.Cells(1)というのはWithで指定したセル範囲の左上のRangeオブジェトを返すものです。
.Offset(-3,0)は指定したセルから指定したセル移動した先のRangeオブジェクトを返すものです。
Offset(行移動数,列移動数)と指定します。今回は上に3個なので(-3,0)です。

Offsetプロパティーは良く使うので覚えておくとすごく役に立つでしょう。

Gotoメソッドが出てますので、もっと単純に考えましょう。

Goto(移動先,スクロールの有無)

ですが、移動先はRangeオブジェクトでもかまいません。ですので、OffsetプロパティーとWithステートメントを追加すると以下のような構文で解決可能です。

With [コピー範囲]
 .Copy
 Application.Goto .Cells(1).Offset(-3,0), True
End With

[コピー範囲]は任意のRangeオブジェクトにしてくださいね。質問文の場合だと
With Range("A20:B30")
になります。


キーポイントは.Cells(1)と.Offset(-3,0)になります。
....続きを読む

Q平均GLと斜線制限について

教えてください。
平均GLと北側斜線 平均GLと道路斜線の関係です。
平均GLが設計GLよりも下がってくる時

1.北側斜線はその平均GLからですか?
2.高低差が大きい時その平均GL毎に北側斜線を計測するのですか?
図面上で2本の北側斜線のラインが出るって事ですか?

3.道路斜線は平均GLじゃなくて道路高さからですか?
(その物件は高低差はほとんどないんですが
平均GLは1m以上下がります)

よろしくお願いします。

Aベストアンサー

こんにちは
>1.北側斜線はその平均GLからですか?
そうです平均地盤面からです。
ただし、隣地が平均地盤より1m以上高ければ(h-1)/2だけ緩和されます。

>2.高低差が大きい時その平均GL毎に北側斜線を計測するのですか?
>図面上で2本の北側斜線のラインが出るって事ですか?
そうです平均地盤ごとです。

>3.道路斜線は平均GLじゃなくて道路高さからですか?
道路中心の高さよりの計算になりますので平均地盤は関係ありません。
道路が敷地より1m以上下がっていれば他の斜線と同じく緩和があります。

Qセルの左上隅が黒い・・・

エクセル2000で作ったデータをエクセル2002で開けたら、ところどころのセルの左上隅が黒くなっているんですが、これはどうすれば消えますか?

Aベストアンサー

緑、では?
「ツール」→「オプション」→「エラーチェック」タブの「バックグラウンドでエラーチェックを行う」のチェックを外してください。

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

 ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。

 セル範囲は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 ○ ○ ○

 以下、データ入力が進むにつれて、斜線が自動的に引き直されてほしいです。また、いったん入力したデータを削除したら、斜線は復活してほしいです。データをとびとびに入力したり削除したりすることはありません。

 わかりにくい説明で恐縮ですが、よろしくお願いいたします。

 ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。

 セル範囲はA1:C7で、A1とB1には常にデータが入っています。残りのセルに、以下のような感じで斜線を引きたいのです。(黒丸はデータが入っているセルを、白丸は空白セルを表しています)

(最初の状態)
  A B C
1 ● ● ○ → C1...続きを読む

Aベストアンサー

ちょっと変えてみました。もっとすっきり書けると思うのですが・・・。

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 '列数

ちょっと変えてみました。もっとすっきり書けると思うのですが・・・。

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
L...続きを読む

Qエクセルのセルの左上隅につく緑色の三角形は何の意味?

エクセルのセルの左上隅につく緑色の三角形は何の意味でしたでしょうか。(良く調べずに質問しており申し訳ありません。)

Aベストアンサー

エラーインジケータです。

[ツール]-[オプション]-[エラーチェック]を参照してください。

Qエクセル セル内に斜線をいれたいのですが。

体重表を作って毎日記録しているのですが、記録を忘れてしまった
日などセル内に斜線をいれたいのですが(/)セル内の右上の角から
左下の角まで斜線をいれたいのに「斜線」と入力すると/は出てくる
けれど、セル内の真ん中に斜線が小さくはいるだけでセル内
いっぱいには入力する事ができません。

どうするばセル内いっぱいに斜線を引く事ができるのでしょうか?

インターネットを検索した遊ぶぐらいでエクセルやワードなどは
さっぱり使いこなせない初心者です。

すみませんが、どなたかご存知の方いらっしゃったら教えて頂けますか?
よろしくお願いいたします。

Aベストアンサー

(1)斜線を入れたいセル内で右クリック。
(2)セルの書式設定→罫線を選択
(3)入れたい罫線を選択→OK。

どうでしょうか?

Q条件付書式 C3セルに何らかの文字が入る時、A1:C3を色付きセルに。

エクセル2003
いまいち設定方法が分かりません。
よろしくお願いします。

条件付書式の設定方法で、
【例】C3セルに何らかの文字が入る時、(ブランク以外の状態)A1:C3を色付きセルにする。

どうすればよいのでしょう?

Aベストアンサー

A1:C3 を選択して

[数式が][=$C$3<>""  ]

で良いのでは?

Qprintf("文字列\n")が円マークなんです!!斜線がでない!!

うちのノートパソコン(IBM)OSはTurbolinux Personalと、デスクトップ(NEC)OSはWindows2000でC言語のプログラミングをすると文字が変なんです。

printf("文字列\n");

と改行のエスケープシークエンス?を入力すると円マーク(\)なんです!!

右下がりの斜線のキーを押してるのに円マーク(\)しかでないんです。二つのPCどちらでやってもです。C言語のテキストでは右下がりの斜線とnで改行のエスケープシークエンス?になっているので見ていて気持ちが悪いです・・・。

ちゃんと右下がりの斜線は出せないものでしょうか。ちなみにキーボードには右下がりの斜線が書いてあります。

プログラミング上も\nで右下がりの斜線と同じ、改行の意味で理解されているらしく、ちゃんと改行されます。

でも右下がりの斜線じゃないと気持ち悪い・・・。直せませんか?

Aベストアンサー

日本語環境だと、\で正解です。
同じ意味(文字コード)です。


\(の半角)は バックスラッシュといいます。
日本語フォントでは、歴史的な原因で \ の文字コードと同じものが割り当てられていますので、日本語フォントで表示している限り、 ¥(半角)が表示されます。


歴史的背景をここで解説すると文字数足りなくなりますので。
ここ
http://ja.wikipedia.org/wiki/%5C
や、ここ
http://ja.wikipedia.org/wiki/%E5%86%86%E8%A8%98%E5%8F%B7
を読んでください。

Qexcel2003 選択セル内データ→1個のセルにカンマ区切りデータ

excel2003で、複数の選択セル内データを1個のセルにカンマ区切りデータに変換する操作をご教示願います。
具体的には、
「データ」メニューの「区切り位置」で、1つのセル内にカンマ区切りされた複数データを、データ数分のセルに変換可能ですが、これと逆の変換方法を知りたいのです。
可能であれば、VBA以外の方法が良いのですが・・・
ご教示よろしくお願い致します。

Aベストアンサー

Wordを使ってもいいのなら、
データを選択して、Wordに貼り付けます。
貼り付けた表を選択して、
罫線-変換-表の解除-文字列の区切りでカンマを選択してください。

その後、
編集-置換
検索する文字列に「^13」を入力
置換後文字列に「,」を入力
オプションであいまい検索のチェックを外すと、
改行が削除されて、カンマ区切りだけのデータになります。
これをコピーしてExcelのセルに貼り付ければできます。

参考URL:http://blog.goo.ne.jp/ek5555ek/e/49f1c184ef4be2c368e17abcab4e7e6d


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報