誰かが私を助けてくれるのではないかと思います。
特定の「入力範囲」を維持できるように、ユーザーが選択した1つまたは複数の行からセルコンテンツを削除するスクリプトをまとめようとしています。次に、行7から始まる列「A」が入力されている場合は、データを含むすべての行をスプレッドシートの一番上に移動します。
行からセルの内容を削除する以下のコードをまとめましたが、データを含む行を「Shift Up」移動して、データ間の空白行を省略して、上下に並べる方法を理解できません。
Sub DelRow()
Dim msg
Sheets("Input").Protect "password", UserInterFaceOnly:=True
Application.EnableCancelKey = xlDisabled
Application.EnableEvents = False
msg = MsgBox("Are you sure you want to delete this row?", vbYesNo)
If msg = vbNo Then Exit Sub
With Selection
Application.Intersect(.Parent.Range("A:R"), .EntireRow).Interior.ColorIndex = xlNone
Application.Intersect(.Parent.Range("S:AD"), .EntireRow).Interior.ColorIndex = 37
Application.Intersect(.Parent.Range("AF:AQ"), .EntireRow).Interior.ColorIndex = 42
Selection.SpecialCells(xlCellTypeConstants).ClearContents
End With
Application.EnableEvents = True
End Sub
以下に示す「並べ替え」マクロをまとめました。これは、データを含む2つの連続した行では機能しますが、「削除」マクロを使用した行では機能しません。
たとえば、「入力範囲」の1行目と2行目にデータを入力すると、コードは、並べ替え条件として列「B」を使用してスプレッドシートを正しく並べ替えます。しかし、最初の行の内容を削除して空白の行を作成すると、「並べ替え」スクリプトは2番目の行を上にシフトしません。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableCancelKey = xlDisabled
With Sheets("Input")
If .Range("A7").Value = "" Then Exit Sub
.Range("B7:AS400").Sort Key1:=Range("$B$1"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DatOption1:=xlSortNormal
End With
End Sub
誰かがこれを見て、ソート機能を追加できるようにコードをどのように適応させる必要があるかについてのガイダンスを提供できるかどうか疑問に思いました。
よろしくお願いします