VBA (Excel 2010) のサブルーチンで問題が発生しています。
このコードは、元のブロックの範囲オブジェクトと新しい行数と列数を指定して、数式のブロックのサイズを変更することを目的としています。これは、余分な行/列を削除し、さらに行/列が必要な場合は下または右に記入することによって行われます。
私が抱えている問題は、Range.Rows(...).Clear を使用して行のコードが正常に実行されている間に、エラー 1004 - ほとんど同一のコードを使用して実行するアプリケーション定義またはオブジェクト定義のエラーが発生することです。 Range.Columns(...).Clear 。
以下のサブルーチン:
Sub ResizeBlock(BlockRange As Range, Optional nRows As Variant, Optional nColumns As Variant)
If IsMissing(nRows) And IsMissing(nColumns) Then Exit Sub
Dim TopLeftCell, BottomRightCell As Range
Set TopLeftCell = BlockRange.Cells(1, 1)
Set BottomRightCell = BlockRange.Cells(BlockRange.Rows.Count, BlockRange.Columns.Count)
If Not IsMissing(nRows) Then Set BottomRightCell = BottomRightCell.Offset(nRows - BlockRange.Rows.Count, 0)
If Not IsMissing(nColumns) Then Set BottomRightCell = BottomRightCell.Offset(0, nColumns - BlockRange.Columns.Count)
Dim NewBlockRange As Range
Set NewBlockRange = Range(TopLeftCell, BottomRightCell)
Select Case BlockRange.Rows.Count - NewBlockRange.Rows.Count
Case Is > 0
BlockRange.Rows(NewBlockRange.Rows.Count + 1 & ":" & BlockRange.Rows.Count).Clear
Case Is < 0
NewBlockRange.Rows(BlockRange.Rows.Count & ":" & NewBlockRange.Rows.Count).FillDown
End Select
Select Case BlockRange.Columns.Count - NewBlockRange.Columns.Count
Case Is > 0
BlockRange.Columns(NewBlockRange.Columns.Count + 1 & ":" & BlockRange.Columns.Count).Clear
Case Is < 0
NewBlockRange.Columns(BlockRange.Columns.Count & ":" & NewBlockRange.Columns.Count).FillRight
End Select
End Sub
次の「テスト」コードを使用してサブルーチンを呼び出しています。
Call ResizeBlock(Range("C5:I11"), 10, 10)
選択ケースの順序は重要ではありません。つまり、列部分が行部分の上にある場合でも、列部分でエラーが発生します。
編集:解決済み
まあ、問題を書き出すことで頭の中で物事が明確になり、問題が解決したように見えるかもしれません。
列の select case を次のように変更することによる解決策:
Select Case BlockRange.Columns.Count - NewBlockRange.Columns.Count
Case Is > 0
Range(BlockRange.Columns(NewBlockRange.Columns.Count + 1), BlockRange.Columns(BlockRange.Columns.Count)).Clear
Case Is < 0
Range(NewBlockRange.Columns(BlockRange.Columns.Count), NewBlockRange.Columns(NewBlockRange.Columns.Count)).FillRight
End Select
なぜRange.Rows(x:y)
機能するのかわかりませんが、Range.Columns(x:y)
機能しません。