- 締切済み
エクセルで複数のセルに一本の斜線を引く場合
http://okwave.jp/qa/q4821391.html の質問と全く同じことがやりたいのですが、回答4の例題のマクロをコピーしても 何も動作しません。エラーも出ません。 ちなみに、他のサンプルはコピーするとちゃんと動作します。 お礼の欄にはうまくいったと書かれていますが・・・ 原因がわかりません。どなたか」試していただけないでしょうか。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tsubuyuki
- ベストアンサー率45% (699/1545)
正直なところ、 > ご年配の方にやって頂くため、できるだけ簡単にと思い それなら、印刷したモノに定規とボールペンで線を引かせるのが一番早いです。 何より、作成者であるあなた自身が > 例題マクロの内容も理解せず、ただコピーしていました。 というレベルなら、なおさら複雑なマクロはオススメしません。 今後、コレのメンテナンスが必要な事態が来た時に対応できないからです。 (例示のマクロは決して複雑とは思いませんけどね。) さて。 マクロ中の '表の範囲を指定 Set myRng = ActiveSheet.Range("A1:E20") この部分で「表の範囲を動的に指定」してやれば事足りるのは無いかと思います。 最終行 > 例えば最後が15行だとすると、E16の右上からA16の左下まで斜線を入れたいのです。 を「判断できる列」がA列(エクセルにおける1列目)だとすると、 Sub Sample() Dim myRng As Range Dim myCol As Range Dim myTmp As Object Dim myCnt As Integer Dim myRow As Long '追加 '最終行を調査(最終行+1) myRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 '追加 '表の範囲を指定 Set myRng = ActiveSheet.Range("A1:E" & myRow) '変更 (以下同文につき省略) ですが、 > 最終行1行だけに斜線をいれる事になっています。 と言うことなので、 最終行を判断する列(この場合はA列)に「式も入っていないのだとすると」 ごく単純に Sub Sample2() Dim mytemp As Object Dim myRow As Long '最終行を調査し、線を引く行を決める myRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 '古い斜線を消す For Each myTmp In ActiveSheet.Shapes If myTmp.Name = "myLine" Then myTmp.Delete Next myTmp '対象行の“次の行”のA列の左上=対象範囲の左下 から '対象行のE列の“次の列”の左上=対象範囲の右上 まで '右上がりの黒い斜線を引き、名前を付ける With ActiveSheet.Shapes.AddLine( _ Cells(myRow, "A").Offset(1, 0).Left, _ Cells(myRow, "A").Offset(1, 0).Top, _ Cells(myRow, "E").Offset(0, 1).Left, _ Cells(myRow, "E").Offset(0, 1).Top) .Line.ForeColor.RGB = RGB(0, 0, 0) .Name = "myLine" End With End Sub これで対応可能と思われます。 線を引きたい列が「A:E」ではない場合は、ご自身の環境に合わせて書き換えればOK。 ただし、「データの最終行」の下に例えば「合計」などの余分な行があるのであれば もう少し工夫が必要です。
添付マクロの変数myCntはセルの空白をカウントしているのでは無く、セルA1~A20までのVLOOKUP関数のエラーセル数をカウントしています。 質問者さんは、A列に数式は入力していないのでA1~A20のセルにエラーが発生していないのではありませんか? セルの空白をカウントするように変更すれば添付ファイルマクロで可能だと思います。 If IsError(myTmp.Value) Then myCnt = myCnt + 1 上記部分を下記に変更 If myTmp.Value = Empty Then myCnt = myCnt + 1
- tsubuyuki
- ベストアンサー率45% (699/1545)
少しでもわかりやすくなればと思い、添付です。 ついでに、参考URLもどうぞ。 http://pc.nikkeibp.co.jp/article/technique/20090325/1013596/?rt=nocnt
お礼
ご回答ありがとうございます。 手動で引く方法はわかっているのですが、ご年配の方にやって頂くため、できるだけ簡単にと思い、マクロで何とかならないものかと考えております。
- tsubuyuki
- ベストアンサー率45% (699/1545)
リンク先のマクロとは全く関係なく「全手動で」引く方法として・・ Altキーを押したままで始点・終点を指定してやると 「それぞれ最も近いセルの角にピッタリ合う」ように調整してくれます。 ・・・言葉で説明するとちょっとややこしいのですが(笑)。 変にマクロを使うより手軽ですよ。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
回答4のは、空欄になってるセルが「想定された条件に一致してないと、何もしないで終わる」ので、そのままコピーして動作させても、何も起きません。 ちゃんと「上の方には入力済みのセルがあって、下の方には未入力の空欄があって、シートの再計算イベントに、下の方のルーチンが関連付け(つまり、自動で呼ばれる設定に)されている必要があります。 「表を○○した時に、自動で呼ばれる関数を作る方法」は、理解していますか?
お礼
ご回答ありがとうございます。 例題のマクロの内容は難しくて理解出来ませんでしたので、ただコピーしていただけでした。
お礼
ありがとうございました。 まさにその通り、セルに数字だけを入れていました。 例題マクロの内容も理解せず、ただコピーしていました。 ご回答の部分変更してちゃんと動作しました。 もしよければもうひとつ教えて下さい。 うちの会社の伝票は最終行1行だけに斜線をいれる事になっています。 例えば最後が15行だとすると、E16の右上からA16の左下まで斜線を入れたいのです。 もし、簡単な書換えで出来るものなら、ご教授お願いいたします。