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
:D ตัวอย่าง 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
:D ตัวอย่างการปรับ 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
:D ลองบันทึก 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
:D เปลี่ยนจาก 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
ขอบคุณครับ ผมมองเรื่องง่ายๆแค่นี้ข้ามไป คิดเยอะไปหน่อยครับ