การเติมค่าที่คีย์เป็นช่วงให้แสดงทุกรายการด้วย VBA

กรณีที่มีการคีย์ค่าเป็นช่วงแล้วต้องการให้แสดงทุกรายการในช่วงนั้น ๆ คงต้องพึ่งพา VBA ในการจัดการครับ ยกตัวอย่างเช่น ตามภาพด้านล่าง ค่าในช่วง A2:A5 จะมีการคีย์แบบช่วง และที่ B2:B5 คือตัวอย่างผลลัพธ์ที่ต้องการ

ภาพประกอบค่าที่คีย์เป็นช่วงและผลลัพธ์ที่ต้องการ

Interval
ภาพ 1 การเติมค่าที่คีย์เป็นช่วงให้แสดงทุกรายการ

ซึ่งสามารถใช้ Code VBA ตามด้านล่างครับ

Sub SplitThenJoin()
    Dim s As String, a() As String
    Dim r As Range, rAll As Range
    Dim i As Integer, j As Integer, k As Integer
    With Worksheets("Sheet1")
        Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For Each r In rAll
        a = Split(r.Value, ",")
        For i = 0 To UBound(a)
            j = InStr(1, a(i), "-")
            If IsNumeric(Left(a(i), 1)) And j > 0 Then
                For k = Left(a(i), j - 1) To Mid(a(i), j + 1, 255)
                    s = s & k & ","
                Next k
            ElseIf j > 0 Then
                For k = Asc(Left(a(i), j - 1)) To Asc(Mid(a(i), j + 1, 255))
                    s = s & Chr(k) & ","
                Next k
            End If
            If Len(s) > 1 Then
                a(i) = Left(s, Len(s) - 1)
            Else
                a(i) = a(i)
            End If
            s = ""
        Next i
        r.Offset(0, 1).Value = Join(a, ",")
    Next r
End Sub

โดยมีแนวคิดคือ

  1. นำค่าในแต่ละเซลล์ไปแบ่งให้เป็น Array โดยใช้เครื่องหมายคอมม่า (,) จากนั้นก็จะ Loop เพื่อว่าจากสมาชิก Array ที่ได้มีค่าใดประกอบด้วยเครื่องหมาย ก็จะนำไปประมวลต่อโดยหาว่าหากด้านหน้าเครื่องหมาย – เป็นตัวเลขก็จะทำการเปลี่ยนค่าของสมาชิก Array นั้นเสียใหม่ เริ่มด้วยค่าที่อยู่หน้าเครื่องหมาย แล้วบวกเข้าไปครั้งละ 1 จากนั้นคั่นด้วยเครื่องหมายคอมม่าจนได้ค่าสุดท้ายเท่ากับตัวเลขหลังเครื่องหมาย
  2. หากด้านหน้าเครื่องหมาย เป็นตัวอักษรก็จะหาว่ารหัสตัวอักษร (Character Code) นั้นคือค่าใดและทำการบวกรหัสนั้นไปครั้งละ 1 จากนั้นคั่นด้วยเครื่องหมายคอมม่า จนกระทั่งเท่ากับรหัสของตัวอักษรสุดท้ายหลังเครื่องหมาย
  3. กรณีที่สมาชิก Array ไม่มีเครื่องหมาย ก็ให้มีค่าเท่าเดิม

สามารถดาวน์โหลดโปรแกรมได้ตาม Link ด้านล่างครับ
Revised: February 01, 2017 at 20:19

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top