Page 1 of 1
อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 6:00 pm
by revotion
รบกวนช่วยปรับ Code ให้ทีครับ
1. อยากให้หาค่าที่ที่คอลัมน์ A อ้างอิงที่ B1 แล้วไปอยู่อยู่ที่ตำแหน่งสุดท้ายของค่านั้นๆครับ
อย่างเช่น ค่าที่หาคือ วัน แล้วให้ไปอยู่อยู่ที่ตำแหน่งสุดท้ายของค่า วัน
2. เมื่อทำข้อ 1 สำเสร็จแล้วเลื่อนลงมา 1 แถว แล้วให้แทรกแถวตามจำนวนที่อ้างอิงที่ B2 ครับ
Code: Select all
Sub Macro4()
Dim number As Range
With Sheet1.Range("A:A")
Set number = .Range("B2")
Cells.Find(What:=Range("B1"), After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.EntireRow.Offset(1).Resize(number.Value).Insert Shift:=xlDown
End With
End Sub
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 6:17 pm
by snasui

ตัวอย่าง Code ครับ
Code: Select all
Dim number As Range
Dim endRow As Range
With Sheet1
Set number = .Range("B2")
Set endRow = .Range("a:a").Find(what:=.Range("b1"), after:=.Range("a1"), _
searchdirection:=xlPrevious)
' Cells.Find(what:=Range("B1"), after:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, searchdirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.EntireRow.Offset(1).Resize(number.Value).Insert Shift:=xlDown
End With
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 6:41 pm
by revotion
ยังไม่ตรงกับความต้องการครับ
บางทีกดรันแล้วข้ามตำแหน่งสุดท้ายไปของสิ่งที่ต้องการค้นหาไป 2 - 3 ตำแหน่งบางทีก็ 4 - 5 ตำแหน่ง
บางทีกดรันแล้วไม่มีอะไรเกิดขึ้นครับ
Code: Select all
Sub Macro4()
Dim number As Range
Dim endRow As Range
With Sheet1
Set number = .Range("B2")
Set endRow = .Range("a:a").Find(what:=.Range("b1"), after:=.Range("a1"), _
searchdirection:=xlPrevious)
ActiveCell.EntireRow.Offset(1).Resize(number.Value).Insert Shift:=xlDown
End With
End Sub
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 7:00 pm
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
Dim rall As Range
Dim r As Range, i As Long
With Sheet1
Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
For i = rall.Count To 1 Step -1
If rall(i).Value = .Range("b1").Value Then
rall(i).Offset(1, 0).Resize(.Range("b2").Value).Insert shift:=xlDown
Exit For
End If
Next i
End With
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 7:16 pm
by revotion
ตรงกับความต้องการครับ
ขอบคุณครับ
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 8:17 pm
by revotion
ขอรบกวนอีกครั้งครับ
พอจะลองปรับ Code ดูก็ งงๆครับ
อยากจะให้แทรกแถว ทั้งแถวเลยครับจากเดิมแทรกแค่คอลัมน์ A
รบกวนด้วยครับ
Code: Select all
Sub Macro4()
Dim rall As Range
Dim r As Range, i As Long
On Error Resume Next
With Sheet1
Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
For i = rall.Count To 1 Step -1
If rall(i).Value = .Range("c1").Value Then
rall(i).Offset(1, 0).Resize(.Range("c2").Value).Insert shift:=xlDown
Exit For
End If
Next i
End With
End Sub
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 8:19 pm
by snasui

ลองบันทึก Macro การแทรกบรรทัดแล้วนำ Code มาปรับใช้ ติดตรงไหนค่อยถามกันต่อครับ
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 8:53 pm
by revotion
ตอนนี้ลองปรับแล้วแต่ยังไม่ได้ตามที่ต้องการครับ
Code: Select all
Sub Macro4()
Dim rall As Range
Dim r As Range, i As Long
On Error Resume Next
With Sheet1
Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
For i = rall.Count To 1 Step -1
If rall(i).Value = .Range("c1").Value Then
'rall(i).Offset(1, 0).Resize(.Range("c2").Value).Insert shift:=xlDown
Rows(rall(i).Offset(1, 0).Row & ":" & ActiveCell.Row).Insert shift:=xlDown
Exit For
End If
Next i
End With
End Sub
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 8:59 pm
by snasui

เปลี่ยนจาก
rall(i).Offset(1, 0).Resize(.Range("c2").Value).Insert shift:=xlDown เป็น
rall(i).Offset(1, 0).Resize(.Range("c2").Value).EntireRow.Insert ครับ
Re: อยากหาตำแหน่งสุดท้ายของสิ่งที่ค้นหา [VBA]
Posted: Sun Aug 05, 2018 9:09 pm
by revotion
ขอบคุณครับ ผมมองเรื่องง่ายๆแค่นี้ข้ามไป คิดเยอะไปหน่อยครับ