:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ปัญหาเรื่องการแสดงตัวเลขครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

ปัญหาเรื่องการแสดงตัวเลขครับ

#1

Post by freedomzaa »

String_Num.xlsm
ปัญหานะครับ เช่น มีประโยค E.1.5 Network Settings/07,12.01-12.25 Prohibited Processes
อยากให้แสดงออกมาเป็น
E.1.5.7
E.1.5.12.1
E.1.5.12.2
E.1.5.12.3
E.1.5.12.4
.
.
.
E.1.5.12.25
โค๊ด VBA ที่ผมทำนะครับ

คือตัดตัวอักษรออกให้หมด แล้วเต็มจุดแทน ส่วนค่าไหนที่เป็นขีด เช่น 1-5 ก็ให้แสดงเป็น 1,2,3,4,5

Code: Select all

Private Sub CommandButton1_Click()Dim regEx, myMatch, myMatches, arg
Dim i As String
Dim j As Integer
Set regEx = CreateObject("vbscript.regexp")
For j = 1 To 4
arg = Range("A" & j).Value
With regEx
.Pattern = "\d{1}"
.Global = True
If .Test(arg) Then
Set myMatches = .Execute(arg)
i = ""
For Each myMatch In myMatches
i = i & "." & myMatch.Value
Next myMatch
MsgBox ("E" & i)
End If
End With
Next j
End Sub
ช่วยด้วยนะครับ ผมพยายามแล้วครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#2

Post by snasui »

:D จากไฟล์ที่แนบมา ตัวอย่าง Code การตัดให้คงเหลือเฉพาะค่าที่ต้องการตามด้านล่างครับ

Code: Select all

Sub Test0()
    Dim rAll As Range, r As Range
    Dim t As String, i As Integer
    Set rAll = Sheets("Sheet1").Range("A1:A4")
    For Each r In rAll
        With Application.WorksheetFunction
            t = .Substitute(r, " Network Settings", "")
            i = .Search(" ", t) - 1
            r.Offset(0, 1) = Left(t, i)
        End With
    Next r
End Sub
ส่วนการแสดงค่าทั้งหมดกรณีคั่นด้วยเครื่องหมาย - ลองประยุกต์จากที่นี่ครับ Split then Join
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#3

Post by freedomzaa »

ขอบคุณมากครับ จะลองนำมาประยุกต์ใช้นะครับ :D
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#4

Post by freedomzaa »

snasui wrote::D จากไฟล์ที่แนบมา ตัวอย่าง Code การตัดให้คงเหลือเฉพาะค่าที่ต้องการตามด้านล่างครับ

Code: Select all

Sub Test0()
    Dim rAll As Range, r As Range
    Dim t As String, i As Integer
    Set rAll = Sheets("Sheet1").Range("A1:A4")
    For Each r In rAll
        With Application.WorksheetFunction
            t = .Substitute(r, " Network Settings", "")
            i = .Search(" ", t) - 1
            r.Offset(0, 1) = Left(t, i)
        End With
    Next r
End Sub
ส่วนการแสดงค่าทั้งหมดกรณีคั่นด้วยเครื่องหมาย - ลองประยุกต์จากที่นี่ครับ Split then Join
รบกวนอีกนิดครับ ถ้าในกรณีทีไม่ได้ใช้คำว่า "Network Settings" เหมือนกันล่ะครับ ใช้ึคำที่แตกต่างกันออกไป จะต้องแก้เป็นยังไงครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#5

Post by snasui »

:D ควรถามด้วยตัวอย่างที่เป็นตัวแทนของข้อมูลจริงครับ จะได้ทราบว่าข้อมูลมีความหลากหลายอย่างไร ลองปรับ Code ดูเองก่อน ติดตรงไหนถามมาได้เรื่อย ๆ ครับ
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#6

Post by freedomzaa »

ถ้ามีประโยคที่หลากหลายแบบนี้ล่ะครับ
ตัวอย่างนะครับ
เช่นมี String
"E.1.1 Passwords/02 Maximum Password Age*" ก็ให้่แสดงเป็น
E.1.1.2

"E.1.5 Network Settings/01.06,02.05 Passwd Files in ETC Subdirectory of the FTP Account Home Dir*" ก็ให้่แสดงออกมาเป็น
E.1.5.1.6
E.1.5.2.5

"E.1.5 Network Settings/18.01-18.05 NFS Access Contains Confidential Data" ก็ให้่แสดงออกมาเป็น
E.1.5.18.1
E.1.5.18.2
E.1.5.18.3
E.1.5.18.4
E.1.5.18.5

"E.1.5 Network Access/01.06,02.05,18.01-18.05 NFS Access Contains Confidential Data" ก็ให้่แสดงออกมาเป็น
E.1.5.1.6
E.1.5.2.5
E.1.5.18.1
E.1.5.18.2
E.1.5.18.3
E.1.5.18.4
E.1.5.18.5

ควรใช้ code อะไรที่ แทนค่า string ทั้งหมดได้ ไม่ใช่แค่ "Network Settings"

หรือ ผมควรดึงค่าแค่ ตัวเลขออกมาก่อนดีครับ แล้วค่อยมาตัดแบ่งตามที่ต้องการทีหลัง ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#7

Post by snasui »

:D ผมเขียน Code สำหรับการกระจายค่าออกมาให้ดูเป็นตัวอย่างตามด้านล่าง ซึ่งดัดแปลงมาจาก http://snasui.blogspot.com/2011/06/vba.html

สิ่งที่ผมอยากให้คุณลองเขียนเองบ้างคือตัดค่าให้เหลือเฉพาะ E, ตัวเลข, /, -, เครื่องหมาย , (คอมม่า) และ . (จุด) เพื่อจะได้นำค่านั้นมาใช้ต่อกับ Code ด้านล่าง ซึ่งคิดว่าไม่ยากจนเกินไป อย่างน้อยก็มีผู้ช่วยเขียนมาให้ระดับหนึ่งแล้ว

สำหรับการถาม VBA จะต้องเขียนมาเองก่อนเสมอ ติดตรงไหนก็ค่อยมาถามกันได้เรื่อย ๆ ส่วน Code ด้านล่างนี้ผมมีอยู่ก่อนแล้วตาม Link ด้านบนเพียงแต่เอามาปรับปรุงให้ดูเป็นตัวอย่าง กรณีทำ Project ส่งอาจารย์ก็ควรจะดัดแปลงให้ดีนะครับ ผมทราบว่าอาจารย์หลายท่านก็แวะมาที่นี่เหมือนกัน :mrgreen:

Code: Select all

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
    Call RemoveUnused
    With Worksheets("Sheet1")
        Set rAll = .Range("B1", .Range("B" & Rows.Count).End(xlUp))
    End With
    For Each r In rAll
        s = ""
        a = Split(Right(r, Len(r) - 6), ",")
        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) * 100 To Mid(a(i), j + 1, 255) * 100
                    s = s & Left(r, 5) & "." & Format(k / 100, "0.00") & ","
                Next k
            End If
            If Len(s) > 1 Then
                a(i) = Left(s, Len(s) - 1)
            Else
                a(i) = Left(r, 5) & a(i) / 10
            End If
        Next i
        s = Join(a, ",")
        a = Split(s, ",")
        For i = 0 To UBound(a)
            a(i) = Replace(a(i), ".0", ".")
        Next i
        Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(a) + 1) _
            = Application.Transpose(a)
    Next r
End Sub
ตัวอย่างภาพการใช้งาน :ard:
You do not have the required permissions to view the files attached to this post.
Last edited by snasui on Sun Feb 26, 2012 5:05 pm, edited 1 time in total.
Reason: เพิ่มเครื่องหมาย , (คอมม่า)
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#8

Post by freedomzaa »

:D ขอบคุณสำหรับคำแนะนำมากครับ

รบกวนถามอีกนิดหน่อยครับ ในโค๊ดที่อาจารย์เขียน อะไรคือ Call RemoveUnused มันคือ function ที่เราต้องเขียนมาเอง หรือเป็น function สำหรับการ Remove String ที่เราไม่ใช้แล้วออกไป ไม่มีได้ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#9

Post by snasui »

:D เป็น Procedure ที่ผมใช้ Remove อักขระที่ไม่ใช้แล้วออกไป และมุ่งหมายให้เขียนขึ้นมาเองก่อน ผมเรียกใช้ผ่าน Procedure SplitThenJoin เพื่อสะดวกในการเรียกใช้จากการกดปุ่มเดียวแล้วทำทุกงานที่ต้องการ จะไม่นำมารวมกันก็สามารถทำได้ครับ คือ แยกเป็นตัดอักขระที่ไม่จำเป็นออกก่อน จากนั้นค่อย Generate ค่าต่าง ๆ ออกมา
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#10

Post by freedomzaa »

snasui wrote: สิ่งที่ผมอยากให้คุณลองเขียนเองบ้างคือตัดค่าให้เหลือเฉพาะ E, ตัวเลข, /, -, เครื่องหมาย , (คอมม่า) และ . (จุด) เพื่อจะได้นำค่านั้นมาใช้ต่อกับ Code ด้านล่าง ซึ่งคิดว่าไม่ยากจนเกินไป อย่างน้อยก็มีผู้ช่วยเขียนมาให้ระดับหนึ่งแล้ว
อาจารย์ครับผมทำได้แล้วนะครับ ตอนนี้ผมตัดตัวอักษรข้างหน้าได้ แต่ดันเหลืออักษรข้างหลัง ผมจะเอามันออกยังไงดีครับ

อันนี้เป็นกระทู้ทีไปศึกษามาครับ http://www.mrexcel.com/forum/showthread.php?t=615173
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#11

Post by snasui »

:lol: จาก Link ด้านบนต้องขออภัยที่จะบอกว่า ยังคง Concept เดิมคือถามยังไม่ครบทุก ๆ เงื่อนไขที่อาจจะเป็นไปได้ครับ ต้องขอบคุณท่านเหล่านั้นที่ช่วยกันเต็มที่

ลองนำ Code ตามด้านล่างไปปรับใช้ดูครับ

Code: Select all

Sub RemoveUnused()
    Dim rAll As Range, r As Range
    Dim t As String, v As String, u As String
    Dim i As Integer, s As String
    Set rAll = Sheets("Sheet1").Range("A1:A4")
    For Each r In rAll
        v = Left(r, 5)
        u = Replace(r, v, "")
        t = "0123456789,.-/"
        s = ""
        i = 1
        Do While i <= Len(u)
            If InStr(t, Mid(u, i, 1)) > 0 Then
                s = s & Mid(u, i, 1)
            End If
            i = i + 1
        Loop
        r.Offset(0, 1) = v & s
    Next r
End Sub

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
    Call RemoveUnused
    With Worksheets("Sheet1")
        Set rAll = .Range("B1", .Range("B" & Rows.Count).End(xlUp))
    End With
    For Each r In rAll
        s = ""
        a = Split(Right(r, Len(r) - 6), ",")
        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) * 100 To Mid(a(i), j + 1, 255) * 100
                    s = s & Left(r, 5) & "." & Format(k / 100, "0.00") & ","
                Next k
            End If
            If Len(s) > 1 Then
                a(i) = Left(s, Len(s) - 1)
            ElseIf Mid(a(i), 3, 1) = "." Then
                a(i) = Left(r, 5) & "." & a(i)
            Else
                a(i) = Left(r, 5) & a(i) / 10
            End If
        Next i
        s = Join(a, ",")
        a = Split(s, ",")
        For i = 0 To UBound(a)
            a(i) = Replace(a(i), ".0", ".")
        Next i
        Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(a) + 1) _
            = Application.Transpose(a)
    Next r
End Sub
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#12

Post by freedomzaa »

:D ขอบคุณครับ
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#13

Post by freedomzaa »

อาจารย์ครับ ตอนนี้ทำได้แล้วนะครับ แต่ติดอยู่ที่บางค่ายังไม่ตรงครับ เช่นค่า E.1.5/07 ค่าที่ควรจะได้คือ E.1.5.7 แต่ค่าที่แสดงออกมากลับเป็น E1.50.7
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#14

Post by snasui »

:D ช่วยแนบตัวอย่างที่เป็นปัญหามาด้วยครับ จากไฟล์ที่ส่งมาไม่พบปัญหาที่ถามมาครับ

นอกจากนี้ Code ที่แนบมาไม่ได้เป็น Code ล่าสุดที่ผมโพสต์ให้ไป สังเกตว่า SplitThenJoin ก็ Update เพิ่มไปให้ใหม่ครับ
freedomzaa
Member
Member
Posts: 9
Joined: Thu Feb 16, 2012 9:40 pm

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#15

Post by freedomzaa »

snasui wrote::D ช่วยแนบตัวอย่างที่เป็นปัญหามาด้วยครับ จากไฟล์ที่ส่งมาไม่พบปัญหาที่ถามมาครับ

นอกจากนี้ Code ที่แนบมาไม่ได้เป็น Code ล่าสุดที่ผมโพสต์ให้ไป สังเกตว่า SplitThenJoin ก็ Update เพิ่มไปให้ใหม่ครับ
Update SplitThenJoin เรียบร้อยครับ แต่ก็ยังติดปัญหาเดิมครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปัญหาเรื่องการแสดงตัวเลขครับ

#16

Post by snasui »

:shock: ในไฟล์แนบที่ปรับ Code มาผม Run แล้วก็ได้ตามนั้นครับ

A5 = E.1.5.7
A31 = E.1.5.8
A32 = E.1.5.9

ไม่ทราบว่าที่ผิดมันได้เป็นค่าใดครับ :?:
ตัวอย่างตามไฟล์แนบครับ
You do not have the required permissions to view the files attached to this post.
Post Reply