
動作するマクロがありますが、セル範囲を変更したいのですが
Set SearchRange = Range("E1:E12") to
Set SearchRange = Range("A21:A32")
コードを変更しましたが、実行しても機能せず、何が問題なのかわかりません。コードの下に説明があります。
Sub Part()
Dim SearchRange As Range, _
DashPair As Variant, _
PairParts As Variant, _
SearchVal As Variant, _
FoundPos As Variant, _
NextCol As Long
Set SearchRange = Range("A21:A32")
For Each DashPair In Range("B17, F17, J17")
Err.Clear
NextCol = 1
If DashPair.Value <> "" Then
PairParts = Split(DashPair, "-")
If PairParts(1) = "15" Then
SearchVal = DashPair.Offset(RowOffset:=1).Value
On Error Resume Next
Set FoundPos = SearchRange.Find(SearchVal, LookAt:=xlWhole)
If Not FoundPos Is Nothing Then
FoundPos = FoundPos.Row
' find first empty column right of E
While SearchRange(FoundPos).Offset(ColumnOffset:=NextCol).Value <> ""
NextCol = NextCol + 1
Wend
PairParts(1) = PairParts(1) + 1
PairParts = Join(PairParts, "-")
With SearchRange(FoundPos).Offset(ColumnOffset:=NextCol)
.NumberFormat = "@"
.Value = "" & PairParts & ""
End With
DashPair.Resize(ColumnSize:=3).ClearContents
End If
End If '15 found
End If
Next DashPair
End Sub
期待される結果の例。
私の Excel の例を参照してください。マクロは現在、セル B17、F17、J17 でのみ 15 (最後の数字 20-15 など) を検索します。結果が正の場合、その下のセルを参照し、その数字を使用してセル A21:A32 で一致するものを検索し、その右側の隣接セルにコピーして貼り付けます。
例: セル B30 には 20-15 があり、その下のセル B18 には 1 があります。1 は範囲 A21:A32 の検索番号です。A21:A32 の範囲で見つかったら、20-15 を右隣のセル (B21) に配置し、最後の数字を 1 増やして 20-16 にします。
すべてのセル(B17、F17、J17)に対して同じことを行います。
書き込み後、セル B17/C17/D17 のすべての内容が削除されます。Excel シートには、同じことが発生する例が 2 つあります。
答え1
コードの問題は にあります。これは、範囲が行 1 から始まるSearchRange(FoundPos)
場合にのみ、このアプリケーションで機能します。SearchRange
範囲を に変更するとA21:A32
、FindPos 変数は21
最初のケースになります。
これにより、SearchRange(FoundPos)
範囲の 21 番目の行、つまり が返されますA41
。
これを修正する方法はたくさんありますが、コードの変更を最小限に抑えるには、SearchRange(FoundPos)
を に置き換えてみてくださいActiveSheet.Cells(FoundPos, SearchRange.Column)
。