二次元配列で任意の一行に空白挿入 xlUP or xlDown
昨日は、二次元配列で任意の一行に対し、以下を行うことに挑戦した。
- コピー または カット
- 挿入 または 貼り付け
一見上手くいったような結果を得たが、残念。最後尾に挿入する場合、上手くいかない。そりゃ、そうだ。現時点では、挿入した場合の挙動がすべて「xlDown」なのだから。最後尾は自動的に押し下げられるため、どう頑張っても最後尾にデータを付すことが出来ない。うむむ、どうしてくれようか。
そこで、作成済みのコードに、挿入時のデータシフト方向を付すことにした。
まず、問題を単純化するために、次のように考えた。
- 基本的には、xlDownとする。従って指定行に挿入指示した場合、元からあった行は押し下げられる。
- xlUpであることは、指定+1行目xlDownで挿入指示するのと同じこと。
つまり、xlDownで0,xlUpで1になるような関数があれば良い訳だ。
これを踏まえて、「空白を挿入」を作り直してみた。
' row_index 行目に空白挿入。 Public Function RowInsert(ByVal row_index As Long, _ Optional row_shift As Excel.XlDirection = xlDown) As Variant ' 右と左へのシフトは無視。 If row_shift <> xlToLeft And row_shift <> xlToRight Then row_index = row_index + (xlDown - row_shift) / (xlDown - xlUp) End If RowInsert = RowEdit(row_index, piInsert) End Function
早速実験だ。まずは、xlDownの場合。
次いで、xlUpの場合。
ここまでは、意図したとおり。
後はこれを、昨日のコードに反映するわけだが・・・
今日はここで、時間切れ。明日に続きます。
参考まで。