普通はオートシェイプを使えばできますよね。
しかし,伝票のような表があるとします。
表の上の行から順にデータが入力されていきますが,
表によっては,下の何行かはデータが入ってないようなこともあります。
このデータの入っていない行を抹消する意味で斜線を引くとすると,
何か特別なマクロで可能でしょうか?
(つまり,ページによっては20行の表のうち,10行までデータが入っているのでA11~E20のセルに一本の斜線を引いたり,あるページはデータが19行まで入っているのでA20~E20のセルに一本の斜線を引いたりします)
ちなみに,この場合,データが入っていないと言いましたが,
vlookup関数などでデータを持ってきているのでエラー表示の部分は
色を変えたりして表示していないようにしているだけです。
No.4ベストアンサー
- 回答日時:
「特別」なものではありませんが。
例えば
・表の範囲 : A1:E20
・調べる列 : 表の第1列(A列)
・判定方法 : セルの値がエラー値か否か
・斜線の向き: 右上がり
・起動方法 : 手動
の場合。
'---------------↓ ココカラ ↓---------------
Sub Sample()
Dim myRng As Range
Dim myCol As Range
Dim myTmp As Object
Dim myCnt As Integer
'表の範囲を指定
Set myRng = ActiveSheet.Range("A1:E20")
'調べる列を指定
Set myCol = myRng.Columns(1)
'古い斜線を消す
For Each myTmp In ActiveSheet.Shapes
If myTmp.Name = "myLine" Then myTmp.Delete
Next myTmp
'「データが無い行」を数える
For Each myTmp In myCol.Cells
If IsError(myTmp.Value) Then myCnt = myCnt + 1
Next myTmp
'「データが無い行」が無ければ抜ける
If myCnt = 0 Then Exit Sub
'最初の「データが無い行」の位置を調べる
myCnt = myCol.Cells.Count - myCnt + 1
'右上がりの斜線を引く
With ActiveSheet.Shapes.AddLine( _
myRng.Cells(myCnt, myRng.Columns.Count).Offset(0, 1).Left, _
myRng.Cells(myCnt, myRng.Columns.Count).Offset(0, 1).Top, _
myRng.Cells(myRng.Rows.Count, 1).Offset(1, 0).Left, _
myRng.Cells(myRng.Rows.Count, 1).Offset(1, 0).Top)
'(消すときのために)名前をつけておく
.Name = "myLine"
End With
End Sub
'---------------↑ ココマデ ↑---------------
以下のようにしてシートモジュールに記述すれば全自動になります。
(再計算時に描画更新)
※運用方法によっては重くなるかもしれません。
'---------------↓ ココカラ ↓---------------
Private Sub Worksheet_Calculate()
Dim myRng As Range
Dim myCol As Range
Dim myTmp As Object
Dim myCnt As Integer
Set myRng = ActiveSheet.Range("A1:E20")
Set myCol = myRng.Columns(1)
For Each myTmp In ActiveSheet.Shapes
If myTmp.Name = "myLine" Then myTmp.Delete
Next myTmp
For Each myTmp In myCol.Cells
If IsError(myTmp.Value) Then myCnt = myCnt + 1
Next myTmp
If myCnt = 0 Then Exit Sub
myCnt = myCol.Cells.Count - myCnt + 1
With ActiveSheet.Shapes.AddLine( _
myRng.Cells(myCnt, myRng.Columns.Count).Offset(0, 1).Left, _
myRng.Cells(myCnt, myRng.Columns.Count).Offset(0, 1).Top, _
myRng.Cells(myRng.Rows.Count, 1).Offset(1, 0).Left, _
myRng.Cells(myRng.Rows.Count, 1).Offset(1, 0).Top)
.Name = "myLine"
End With
End Sub
'---------------↑ ココマデ ↑---------------
以上ご参考まで。
ご回答ありがとうございました。
まず手動の方を実行してみたところ
バッチリうまくいきました。
その後,自動の方を実行してみて
とても感動しました。
まさに思っていた通りのものでした。
本当にありがとうございました。
No.3
- 回答日時:
斜線を引きたい範囲を選択し
下記の何れかを実行
Sub 右下がり()
Dim LineSTop As Single
Dim LineSLeft As Single
Dim LineETop As Single
Dim LineELeft As Single
With Selection
LineSTop = .Cells(1, 1).Top
LineSLeft = .Cells(1, 1).Left
LineETop = .Cells(.Rows.Count, .Columns.Count).Top + .Cells(.Rows.Count, .Columns.Count).Height
LineELeft = .Cells(.Rows.Count, .Columns.Count).Left + .Cells(.Rows.Count, .Columns.Count).Width
End With
ActiveSheet.Shapes.AddLine(LineSLeft, LineSTop, LineELeft, LineETop).Select
End Sub
Sub 右上がり()
Dim LineSTop As Single
Dim LineSLeft As Single
Dim LineETop As Single
Dim LineELeft As Single
With Selection
LineSTop = .Cells(.Rows.Count, 1).Top + .Cells(.Rows.Count, .Columns.Count).Height
LineSLeft = .Cells(.Rows.Count, 1).Left
LineETop = .Cells(1, .Columns.Count).Top
LineELeft = .Cells(1, .Columns.Count).Left + .Cells(.Rows.Count, .Columns.Count).Width
End With
ActiveSheet.Shapes.AddLine(LineSLeft, LineSTop, LineELeft, LineETop).Select
End Sub
No.2
- 回答日時:
>普通はオートシェイプを使えばできますよね。
>データの入っていない行を抹消する意味で斜線を引く
普通は斜線を引いた方が簡単かと存じますね。
で、
>マクロで可能でしょうか?
お示しの手作業を [新しいマクロの記録] で記録してみられたら、何が不明なのかはっきりすると存じますが、
・「斜線を引く」範囲
をどう指定するかではなかろうかと存じます。
例えば、下記のようなことで似たようなことができますので、いろいろと試行錯誤なさってみてください。
Range("A2:E20").Borders(xlDiagonalDown).LineStyle = xlNone
For Each myRng In Range("A2:E20")
Select Case myRng.Text
Case "#N/A", "", 0
~~~
ご回答ありがとうございました。
う~ん
まだまだ私はマクロ初心者な者ですから
内容が分かりかねます
すみません。
もう少し 基本的なことから勉強し直してきます。
No.1
- 回答日時:
>何か特別なマクロで可能でしょうか?
多分可能です。 でも特別なマクロというほどでもないでしょう。
(多分というのは、要求がはっきりとはわからないので「多分」です)
◆罫線の斜線を利用する方法
1)対象範囲を調べる
2)斜線を引く範囲のセルを結合して、斜線の罫線を設定する。
(実験したところ、間に非表示行があっても大丈夫みたいです)
◆オートシェイプの線を利用する方法
1)対象範囲を調べる
2)斜線を引くセル範囲の「左上のセル」と「右下のセルの斜め右下のセル」の(top、left)間に線を引く
などが考えられますが、もとの表に罫線が設定されている場合は、最初の方法だと、結合すると罫線が消えてしまうので、2番目の方法のほうが良いかも知れません。
表にデータなどを付け加えたときに、再度マクロを実行させるようなことがある場合は、以前に設定してある罫線やオートシェイプを一度削除しなければなりません。
この処理もマクロで処理することを考えると、罫線利用の場合は斜線だけ解除すればよさそうですが、オートシェイプ利用の場合は他にもオートシェイプがあるかも知れないので、削除して良い線であることを判定できるような一工夫が必要かと思われます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) セルの上書き禁止について 5 2022/04/02 10:09
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) エクセルでINDEXとMACTHで出てきたデータの数を数えるには? 1 2023/04/25 10:21
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excel(VBA)データ入力に応じて複数範囲のセルの上に1本の斜線を引きたい
Excel(エクセル)
-
複数セルに一本の斜線を引く
Excel(エクセル)
-
エクセルの質問です。条件によってセルに斜線を引きたいのですが。
その他(OS)
-
-
4
vlookupで返された値が空白だったら斜線をひく
会計ソフト・業務用ソフト
-
5
Excelの関数について、特定の文字を入れると斜線や線を入れることは出来ますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを上書きする...
-
エクセルで複数のセルに一本の...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
A1セルに入力したら、入力時間...
-
エクセルの複数のセルを一括で...
-
参照先セルに値が入っていない...
-
Excelで同じセルに箇条書きをし...
-
IF関数で0より大きい数値が入力...
-
excelでSUBTOTAL関数を設定した...
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
リンク元の日付が空白の時リン...
-
空白でないセルの値を返す方法...
-
エクセルで既に入力してある文...
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
Excelで年月日データから下二桁...
-
SUMに含まれる範囲から特定のセ...
-
excel:条件付き書式の適用範囲...
-
Excelで表を作り、自動で今月の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを上書きする...
-
表の凡例などで見かける以下略...
-
Excel罫線の対数圧縮化
-
エクセルで複数のセルに一本の...
-
WORDで作った表の中にEXCELデー...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
A1セルに入力したら、入力時間...
-
複数の文字列のいずれかが含ま...
-
エクセルの複数のセルを一括で...
-
Excelで同じセルに箇条書きをし...
-
参照先セルに値が入っていない...
-
Excelの入力規則で2列表示したい
-
excelでSUBTOTAL関数を設定した...
-
エクセルで既に入力してある文...
-
リンク元の日付が空白の時リン...
-
IF関数で0より大きい数値が入力...
-
Excelで年月日データから下二桁...
-
エクセルで1列に500行並んだデ...
-
セルを結合したA4とA5の条件付...
-
複数の条件に合う行番号を取得...
おすすめ情報