- 締切済み
行を削除しないで、データーのみ消去、さらに上にデーターを詰める
おはようございます。 よろしくお願いします。 シートに表を作っているのですが、行を削除して表の 行数を変えたくないので、行を削除しないで、データーのみ消去 さらにその下のデーターを上に詰める。 行には、2行分の結合セルが混ざっています。 2行づつ消去する。 下のデーターも同じ書式ですので2行づつ上に詰める。 下の構文では、1行のみ削除して下のデーターを上に 詰めることになります。 上の条件にするにはどうしたら、よいのでしょうか。 Dim DstRow As Long Dim LastRow As Long Dim Ms As Long Ms = MsgBox(prompt:=あああ.Caption &_ "を消去してよろしいですか?", Buttons:=vbYesNo) If Ms = vbYes Then Rows(DstRow).Delete DstRow = DstRow - 1 LastRow = LastRow - 1 End If
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
シートの構成にもよりますが、ご質問文から察するに行範囲をコピペで1行ずらしてあげればできそうですね。 最終行がどこなのか不明ですが、多分LastRowだろうと仮定しました。 ・コピペなので書式などもコピーされますし、式が入っている場合 相対参照などはそのまま参照位置がずれます ・ずらした後の最終行をクリアしていますが、書式ごとクリアする場合は Clearを使用してください。 Set rw = Rows(DstRow).Resize(LastRow - DstRow, 1).EntireRow rw.Offset(1).Copy (rw) Rows(LastRow).ClearContents 手動でコピペできないようなセル構成(結合などで)の場合はエラーになります
補足
fujillinさん 回答ありがとうございます。 手動でコピペできないようなセル構成(結合などで)の場合はエラーになりますとありますが 結合セル(2行にまたがっている場合)が混在する場合は どのようにすればよいのでしょうか。 Set rw = Rows(DstRow).Resize(LastRow - DstRow, 1).EntireRow rw.Offset(1).Copy (rw) Rows(LastRow).ClearContents 実行するとオブジェクトエラーと表示されます。