/ 条件に基づいて行を移動するための/ VBAコード - excel、vba、excel-vba

条件に基づいて行を移動するためのVBAコード - excel、vba、excel-vba

私はStackExchangeとVBAに不慣れで、これに対する答えを見つけようとしましたが、問題があります。

情報が入力されているスプレッドシートがありますまた、シート2のB-1列に表示されます。 H列が空白の場合は、行全体をL列からS列に移動します。したがって、Hが空か、データが入力されているかに基づいて、データは同じシートの2つの場所に分割されます。

列Hの情報は異なります毎回そうすることで、その列に何が入るかを指定することはできませんが、列Hに何も入力されないようにして、移動させたい場合があります。

誰もがこれを達成する方法を教えてもらえますか? どうもありがとう ベヴ

回答:

回答№1は1

出発点としてこれを試してください

Option Explicit
Const FIRST_ROW As Long = 2
Const LAST_ROW As Long = 100
Const FIRST_SOURCE_COL As Long = 2 "column B
Const LAST_SOURCE_COL As Long = 9 "column I
Const TRIG_COL As Long = 8 "column H
Const GAP As Long = 2 "columns gap between original data and moved data

Sub moveit()
Dim r As Long
Dim c As Long
Const DIST As Long = LAST_SOURCE_COL - FIRST_SOURCE_COL + GAP + 1

For r = FIRST_ROW To LAST_ROW
"check if we need to move
If Cells(r, TRIG_COL).Value = "" Then
"move the data
For c = FIRST_SOURCE_COL To LAST_SOURCE_COL
Cells(r, c + DIST).Value = Cells(r, c).Value
Cells(r, c).Value = ""
Next
End If
Next
End Sub

回答№2の場合は1

空白を移動

Sub MoveBlanks()
Dim lRws As Long, sh As Worksheet, x

Set sh = Sheets("Sheet2")

With sh
lRws = .Cells(.Rows.Count, "B").End(xlUp).Row
For x = lRws To 2 Step -1
If .Cells(x, "H") = "" Then
.Range(.Cells(x, "B"), .Cells(x, "I")).Cut .Cells(.Rows.Count, "L").End(xlUp).Offset(1)
.Range(.Cells(x, "B"), .Cells(x, "I")).Delete Shift:=xlUp
End If
Next x
End With

End Sub

ここに画像の説明を入力

ここに画像の説明を入力