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

終了サブ

注意

このヒントを提供してくれたvenkat1926に感謝します
前の記事 次の記事

トップのヒント