OK、私はこれを正しくしようとして髪を引っ張ってきましたが、答えは非常に簡単であるべきだと感じています!
まず、2 つのマクロを作成しました。これらを LeftCut と RightCut と呼びます。これらは 4 列の行を切り取り、シートの別の場所に貼り付けます。これらの VBA コードは次のとおりです。
Sub RightCut()
ActiveCell.Offset([0], [-1]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Cut
ActiveCell.Offset([0], [6]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset([0], [-6]).Select
Range(ActiveCell, ActiveCell.Offset(0, -3)).Select
Selection.Delete Shift:=xlUp
End Sub
Sub LeftCut
Range(ActiveCell, ActiveCell.Offset(0, 3)).Cut
ActiveCell.Offset([0], [10]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset([0], [-10]).Select
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Delete Shift:=xlUp
End Sub
これらはどちらも単独で機能します。今、私がやりたいのはこれらを一緒にループすることです。特定の条件が満たされた場合、たとえば、左の 4 つの列が右の 4 つの列と一致せず、1 つの行を切り取る必要がある場合、これら 2 つのマクロのいずれかが呼ばれた。
今、Do While ループ用に記述された疑似コードがありますが、これは私が探しているものに近いですか? 主な問題は、ワークシートのいくつかのポイントで、最大 20 行をカット アンド ペーストする必要があるため、上記のマクロを ActiveCell = ActiveCell.Offset(0,-1) になるまで繰り返し使用することです。 . これは Do While ループで可能ですか??
Sub HighAce()
Dim i As Long
Dim ActiveCell As Range
i = 2
Application.ScreenUpdating = True
Do While i <= 40043
Set ActiveCell = Range("E" & i)
If ActiveCell = ActiveCell.Offset([0], [-1]) Then
ActiveCell.Offset([1], [0]).Select
ElseIf ActiveCell > ActiveCell.Offset([0], [-1]) Then
Application.Run "'Methylation Array.xlsm'!NewBlueCut"
ElseIf ActiveCell < ActiveCell.Offset([0], [-1]) Then
Application.Run "'Methylation Array.xlsm'!NewBlueCut"
Else: Stop
End If
Loop
End Sub
私はここで正しい軌道に乗っていますか?行方不明の行はありますか?
どなたでもご協力いただければ幸いです。この問題については、後ほど頭をすっきりさせて、自分で解決策を見つけられるかどうか見てみます。
ありがとう!
編集: サンプル データセット
xxx A01 A01 xxx
xxx A02 A04 xxx
xxx A06 A05 xxx
xxx A07 A06 xxx
xxx A08 A09 xxx
したがって、右上の A01 がアクティブ セルの場合、ActiveCell=ActiveCell.Offset(0,-1) の場合は次の行に移動します。ここで、Active Cell は > 隣接セルなので、Leftcut を行います。さて、Activecell < Adjacent cell なので、RightCut を実行します。別の rightcut はこれら 2 つのセルを等しくするので、カーソルは次の行に移動し、再び移動します。