Excel - Vbaが行を挿入し、範囲のメンバシップを維持する
問題
VBAでは、行をコピー/挿入して(元の場所に)、ソース行が列範囲と交差している場合は、新しい行も範囲内にあり、範囲が1だけ拡大されることを確認します。 。カーソルが範囲の最上部にある行にある場合、新しい行は範囲のメンバーにはならず、範囲のサイズが1行増加することはありません。
xlUpとxlDownは違いはありませんし、それらを除外することもありません(交差する柱状範囲がある場合は、Excelがそれを実行するのが最善です)。
溶液
私はそれを完全に自動化しています。 範囲を指定する必要はありません。 マクロ "test"がそれを行います。 入力しなければならないのは、入力ボックスが表示されたときに削除する行の番号を2、3、4のいずれかに入力することだけです。 マクロ "undo"はマクロの動作を元に戻します。データベースはA1からA5のようになります
1
2
3
4
5
マクロ "test"を実行するだけで何もしないでください(両方のマクロをモジュールにコピーする必要があります)。 申し訳ありませんが、これは複雑なマクロになりました。 私は "リサイズ"を使用しようとしました。 どういうわけか私は成功しなかった。 おそらく、何人かの専門家がより良い解決策を出すことができます。 しかし、この解決策はうまくいきます。 名前付き範囲の範囲を変えたい場合は、マクロ "test"内のこの文を自分に合うように修正してください。
範囲( "A2:a4")。名前= "myrange"
マクロは以下のとおりです。
マクロ1
サブテスト()範囲としてDim r、整数としてj、整数としてk、整数としてm
元に戻す
範囲( "A2:a4")。名前= "myrange"
r = Range( "myrange")に設定します。
m = WorksheetFunction.Count(r)
'MsgBox m
k = InputBox( "選択する行の番号を入力してください")
行(k)を選択します。
r = Range( "myrange")に設定します。
j = Range( "myrange")セル(1、1)。ロー
'MsgBox j
Selection.Rows.Insert
Selection.Row = jの場合
ActiveWorkbook.Names( "myrange")。削除
範囲(セル(Selection.Row、 "A")、r.Cells(m、1))名前= "myrange"
終了の場合
MsgBoxの範囲( "myrange")アドレス
終了サブ
マクロ2
Sub undo()範囲として薄暗いr、範囲としてc
r = Range(Range( "A1")、Cells(Rows.Count、 "A")。End(xlUp))を設定します。
各cについて
c = ""の場合c.EntireRow.Delete
次のc
終了サブ