[[20150519092716]] 『条件付きの行追加』(ヒロミ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付きの行追加』(ヒロミ)

コマンドボタンを押すと、最終行の下に行を追加したいです。
行を追加する際の列範囲は表(A〜AA列)だけにしたいのですが、列範囲を指定せずに記述することは可能でしょうか。
理由は、列数の異なる他のシートでも使えるようにしたいからです。
なぜ表だけなのかといいますと、表よりより後ろの列に何か記述されている場合があるのです。最終列までにしてしまうと、その余計なものまで拾ってきてしまう場合があるので、できればA〜AA列の表の書式(罫線や塗りつぶしなど)だけ出したいです。どうか宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 この領域の列数の求め方はいろいろあります。2つほどサンプルを。
 なお、いずれも、この領域と、その右のほうにある別の表との間に空白列があること、
 また、1番目は領域内に完全な空白列がないこと、2番目は領域内1行目に空白セルがないことが条件。

 Sub Sample()

    MsgBox "領域の列数は " & Range("A1").CurrentRegion.Columns.Count & " です。"

    MsgBox "領域の列数は " & Range("A1").End(xlToRight).Column & " です。"

 End Sub

(β) 2015/05/18(月) 19:03


βさん ありがとうございます
下記のようなコードを記述しているのですが、1行上の行を表の列だけコピーすることは可能でしょうか
Sub Macro1()

Dim myRow As Long

 myRow = Range("A1048576").End(xlUp).Row + 1
 Range("A" & myRow).EntireRow.Insert Shift:=xlDown
 Range(myRow - 1 & ":" & myRow - 1).Copy
 Range("A" & myRow).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
End Sub

(ヒロミ) 2015/05/19(火) 09:34


ステップ実行で確認してみてください

 Sub test()
    Dim n As Long

    With Range("a1").CurrentRegion
        n = .Rows.Count
        MsgBox "この表は" & n & "行"
        .Select
        .Rows(n).Select
        .Rows(n + 1).Select
    End With

 End Sub

(マナ) 2015/05/19(火) 20:19


 外出していて、レス遅れました。

 >>Paste:=xlPasteFormats

 コピペしたいのは書式のみですか?

(β) 2015/05/19(火) 21:31


 とりあえず、値も含めてすべてコピペするコードです。
 いろんな書き方がありますが、アップされた、そちらのコードの処理方法を踏襲しています。

 Sub Sample1()
    Dim myRow As Long
    Dim myCols As Long

    myCols = Range("A1").CurrentRegion.Columns.Count        'A1から始まる表の列数
    myRow = Range("A" & Rows.Count).End(xlUp).Row           '表の最終行番号

    Range(Cells(myRow, "A"), Cells(myRow, myCols)).Copy     '最終行の表の列数分の領域をコピー
    'それを次の行にペースト
    Range("A" & myRow + 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

 End Sub

 Sub Sample2()
    Dim myRow As Long
    Dim myCols As Long

    myCols = Range("A1").CurrentRegion.Columns.Count        'A1から始まる表の列数
    myRow = Range("A" & Rows.Count).End(xlUp).Row           '表の最終行番号
    '最終行の表の列数分の領域を次の行にコピペ
    Range(Cells(myRow, "A"), Cells(myRow, myCols)).Copy Range("A" & myRow + 1)

 End Sub

(β) 2015/05/19(火) 21:37


最終行、最終列の取得方法は今後のためにも理解しておくべきと思います。

 なので、あくまで参考です。
 事前に、各シートの表をテーブルにしておけば、以下でも可能です。

 Sub test()

    Range("a1").ListObject.ListRows.Add

 End Sub

(マナ) 2015/05/20(水) 00:21


 あぁ、行のコピーではなく、行の追加でしたか。

 それなら、(マナ)さんの回答のテーブルが一番便利でしょうね。
 テーブルとして設定しておけば、なにも考えず、最終行の次の行にデータを入力するだけで
 書式、計算式等が、上の行(かっての最終行)から自動反映されますのでマクロは一切不要です。

 で、このテーブル設定は、マクロでやらずとも、ホームタブの「テーブルとして書式設定」操作で一発で設定できます。

(β) 2015/05/20(水) 09:09


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.