Page 1 of 1

การเรียงลำดับด้วย VBA

Posted: Tue Nov 24, 2020 7:29 pm
by วังวู ช่ง
รบกวนท่านที่รู้ครับ ผมอยากเรียงลำดับด้วย VBA ด้วย code ล่างนี้ครับ

Code: Select all

Sub Macro1()
Dim i As Integer
Dim cell As Range, rng As Range
Set rng = Range("A1:A10")
i = 1
For Each cell In rng
    cell.Value = i
    i = i + 1
Next cell
End Sub
แต่ต้องการคือว่า เมื่อเราคีย์ใน column B ใน Column A ให้ออกลำดับแบบ Auto ครับ โดยไม่ต้องใช้ =SUBTOTAL( ครับ Code บนนี้จะปรับอย่างไรครับ?

Re: การเรียงลำดับด้วย VBA

Posted: Tue Nov 24, 2020 8:04 pm
by puriwutpokin
ตัวอย่างโค้ดครับ

Code: Select all

'Other code...
Set rng = Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
i = 1
For Each cell In rng
    cell.Offset(, -1).Value = i
'Other code...

Re: การเรียงลำดับด้วย VBA

Posted: Thu Nov 26, 2020 6:14 pm
by วังวู ช่ง
puriwutpokin wrote: Tue Nov 24, 2020 8:04 pm ตัวอย่างโค้ดครับ

Code: Select all

'Other code...
Set rng = Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
i = 1
For Each cell In rng
    cell.Offset(, -1).Value = i
'Other code...

Code: Select all

Sub Macro1()
Dim i As Integer
Dim cell As Range, rng As Range
Set rng = Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
i = 1
For Each cell In rng
    cell.Offset(, -1).Value = i
    i = i + 1
Next cell
End Sub
ยังติดปัญหาที่ว่า เมื่อ Column B ไม่มีข้อความให้ออกว่างเหมือนกันครับ ความต้องการเหมือนในไฟล์นี้ครับ

Re: การเรียงลำดับด้วย VBA

Posted: Thu Nov 26, 2020 7:27 pm
by puriwutpokin
ปรับเป็น

Code: Select all

Sub Macro1()
Dim i As Integer
Dim cell As Range, rng As Range
Set rng = Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
i = 1
For Each cell In rng
If cell <> "" Then
cell.Offset(, -1).Value = Application.CountA(Range("b1:b" & i))
    Else
cell.Offset(, -1).Value = ""
End If
i = i + 1
Next cell
End Sub

Re: การเรียงลำดับด้วย VBA

Posted: Thu Nov 26, 2020 8:31 pm
by วังวู ช่ง
puriwutpokin wrote: Thu Nov 26, 2020 7:27 pm ปรับเป็น

Code: Select all

Sub Macro1()
Dim i As Integer
Dim cell As Range, rng As Range
Set rng = Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
i = 1
For Each cell In rng
If cell <> "" Then
cell.Offset(, -1).Value = Application.CountA(Range("b1:b" & i))
    Else
cell.Offset(, -1).Value = ""
End If
i = i + 1
Next cell
End Sub
ขอบคุณมากๆครับ :D :D :thup: :thup: :cp: :cp: