: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

นับจำนวนรายการในตำแหน่งต่างๆ กัน

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

นับจำนวนรายการในตำแหน่งต่างๆ กัน

#1

Post by Totem »

:D เรียนอาจารย์และเพื่อนสมาชิก

ขอสูตรนับจำนวนรายการในตำแหน่งต่าง ๆ ที่กำหนด โดยมีปัญหา ดังต่อไปนี้

1.นับตัวอักษรที่เป็น a ในช่อง a1:a10
C3 = 11
2.นับตัวอักษรที่เป็น a ในตำแหน่งที่ 1 และ b ในตำแหน่งที่ 3 คือ a1b3 ในช่อง a1:a10
C5 = 1
3.นับค่าที่เป็น 2 คือ a2,b2,c2,d02,a0002 มีทั้งหมด 9 รายการ ในช่อง a1:a10
C7 = 9
4.นับค่าที่เป็น 3 ในตำแหน่งที่ 2 คือ e03,d03 มีทั้งหมด 2 รายการ ในช่อง a1:a10
C9 = 2
5.นับตัวอักษรที่เป็น a ตั้งแต่ 2 รายการขึ้นไป คือ ช่อง a6,a7,a9 หากมีในแต่ละแถวให้นับแต่ละแถวเป็น 1
รายการ ซึ่งมีทั้งหมด 3 รายการ ในช่อง a1:a10
C11 = 3
6.นับตัวอักษรที่เป็น a ตั้งแต่ 2 รายการขึ้นไป คือ ช่อง a6,a7,a9 มีทั้งหมด 6 รายการ ในช่อง a1:a10
C13 = 6

ขอบคุณครับ
count position.xlsx
You do not have the required permissions to view the files attached to this post.
Last edited by Totem on Fri Jan 30, 2015 5:59 pm, edited 4 times in total.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#2

Post by snasui »

:D จากตัวอย่างคำตอบที่ให้มา เซลล์ C3 นับอย่างไรจึงได้ 9 ครับ :?:
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#3

Post by Totem »

:D อาจารย์ ครับ

แก้ไขใหม่แล้ว c3 = 11 ครับ :)
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#4

Post by snasui »

:D ตัวอย่างสูตร

C3 =SUMPRODUCT(LEN(A1:A10)-LEN(SUBSTITUTE(A1:A10,"a","")))
C5 =SUMPRODUCT(--(MID(A1:A10,1,1)="a"),--(MID(A1:A10,3,1)="b"))
C11 =SUMPRODUCT(--(LEN(A1:A10)-LEN(SUBSTITUTE(A1:A10,"a",""))>=2))

ีที่เหลือ ลองปรับใช้จากสูตรด้านบน ติดตรงไหนค่อยมาถามกันต่อครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#5

Post by Totem »

snasui wrote::D ตัวอย่างสูตร

C3 =SUMPRODUCT(LEN(A1:A10)-LEN(SUBSTITUTE(A1:A10,"a","")))
C5 =SUMPRODUCT(--(MID(A1:A10,1,1)="a"),--(MID(A1:A10,3,1)="b"))
C11 =SUMPRODUCT(--(LEN(A1:A10)-LEN(SUBSTITUTE(A1:A10,"a",""))>=2))

ีที่เหลือ ลองปรับใช้จากสูตรด้านบน ติดตรงไหนค่อยมาถามกันต่อครับ
:D จากสูตรทีนำไปใช้และได้ปรับแล้ว มีบ้างช่องยังไม่ตรงตามต้องการ ดังนี้

ที่ช่อง c5 = 0 ที่ถูกต้องคือ 1 ค้นหา a ตำแหน่งที่ 1 และ b ตำแหน่งที่ 3 พบ 1 รายการคือ a1b3

ที่ช่อง c9 = 7 ที่ถูกต้องคือ 2 ได้ค่านี้เพราะหาค่า 3 ในตำแหน่งที่3 เริ่มหาจาก e>0>3 , d>0>3 มี 2 รายการ

ที่ช่อง c13 = 3 ที่ถูกต้องคือ 6 ได้ค่านี้เพราะ มีค่า a ตั้งแต่ 2 รายการขึ้นไป คือ

ช่อง a6 มี a1,a1 นับ 2

ช่อง a7 มี a1,a1b3 นับ 2

ช่อง a9 มี a1,a2 นับ 2

ขอบคุณครับ
count position question.xlsx
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#6

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปครับ
Totem wrote:ที่ช่อง c5 = 0 ที่ถูกต้องคือ 1 ค้นหา a ตำแหน่งที่ 1 และ b ตำแหน่งที่ 3 พบ 1 รายการคือ a1b3
จากไฟล์ที่แนบมา ไม่ทราบว่าเซลล์ใดมีค่าเป็น a1b3 ครับ คำว่า "ตำแหน่ง" จะต้องนับทุกอักขระในเซลล์นั้น ๆ ไม่ว่าจะเป็น "คอมม่า" หรือเครื่องหมายอื่น ๆ ครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#7

Post by Totem »

snasui wrote::D ค่อย ๆ ถามตอบกันไปครับ
Totem wrote:ที่ช่อง c5 = 0 ที่ถูกต้องคือ 1 ค้นหา a ตำแหน่งที่ 1 และ b ตำแหน่งที่ 3 พบ 1 รายการคือ a1b3
จากไฟล์ที่แนบมา ไม่ทราบว่าเซลล์ใดมีค่าเป็น a1b3 ครับ คำว่า "ตำแหน่ง" จะต้องนับทุกอักขระในเซลล์นั้น ๆ ไม่ว่าจะเป็น "คอมม่า" หรือเครื่องหมายอื่น ๆ ครับ
:D คอมม่า , นั้น เป็นการแบ่งแยกรายการแต่ละรายการออกจากกันครับ ผมจึงนับตำแหน่งจากแต่ละคอมม่า
ส่วน a1b3 อยู่ในเซล a6 ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#8

Post by snasui »

:D C5 เป็นการหาค่าตามโจทย์
2. นับตัวอักษรที่เป็น a ในตำแหน่งที่ 1 และ b ในตำแหน่งที่ 3 คือ a1b3 ในช่อง a1:a10
สูตรคือ =SUMPRODUCT(--(MID(A1:A10,1,1)="a"),--(MID(A1:A10,3,1)="b"))

จากที่แจ้งมา
Totem wrote:ส่วน a1b3 อยู่ในเซล a6 ครับ
ใน A6 คือค่า a1,a1,e03 ไม่ตรงกับที่อธิบายมา แม้จะเอาเครื่องหมายคอมม่าออกให้เหลือเป็น a1a1e03 ก็ตาม

จากค่าใน A6 ด้านบน ช่วยอธิบายมาใหม่ว่า มีกี่ตำแหน่ง แต่ละตำแหน่งคืออะไรบ้าง จะได้เข้าใจตรงกันครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#9

Post by Totem »

snasui wrote::D C5 เป็นการหาค่าตามโจทย์
2. นับตัวอักษรที่เป็น a ในตำแหน่งที่ 1 และ b ในตำแหน่งที่ 3 คือ a1b3 ในช่อง a1:a10
สูตรคือ =SUMPRODUCT(--(MID(A1:A10,1,1)="a"),--(MID(A1:A10,3,1)="b"))

จากที่แจ้งมา
Totem wrote:ส่วน a1b3 อยู่ในเซล a6 ครับ
ใน A6 คือค่า a1,a1,e03 ไม่ตรงกับที่อธิบายมา แม้จะเอาเครื่องหมายคอมม่าออกให้เหลือเป็น a1a1e03 ก็ตาม

จากค่าใน A6 ด้านบน ช่วยอธิบายมาใหม่ว่า มีกี่ตำแหน่ง แต่ละตำแหน่งคืออะไรบ้าง จะได้เข้าใจตรงกันครับ
:D ขออภัยครับ ที่ถูกต้องคือในเซล a7 ครับ

ส่วน a6 อธิบายว่า มี 3 รายการ a1 , a1 และ e03 ในแต่ละรายการ การนับตำแหน่งให้นับแยกกัน ดังนี้
รายการที่ 1 a1 นับจากซ้ายไปขวา a คือตำแหน่งที่หนึ่ง และ 1 คือตำแหน่งที่สอง
รายการที่ 2 a1 นับจากซ้ายไปขวา a คือตำแหน่งที่หนึ่ง และ 1 คือตำแหน่งที่สอง
รายการที่ 3 e03 นับจากซ้ายไปขวา e คือตำแหน่งที่หนึ่ง , 0 คือตำแหน่งที่สอง และ 3
คือตำแหน่งที่สาม

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#10

Post by snasui »

:lol: การนับลักษณะนั้นคงต้องพึ่ง VBA ลองเขียนมาดูก่อน ติดตรงไหนค่อยถามกันต่อครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#11

Post by Totem »

snasui wrote::lol: การนับลักษณะนั้นคงต้องพึ่ง VBA ลองเขียนมาดูก่อน ติดตรงไหนค่อยถามกันต่อครับ
:D ครับ จะลองดูครับ :shock: :o
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#12

Post by Totem »

:D ผมเขียน vba และยังติดปัญหาดังนี้ครับ

Code: Select all

Sub Len_()

    Dim ws1, ws2 As Worksheet
    Dim lastRow As Long
    Dim i As Integer

    Set ws1 = Worksheets("sheet1")
    
    Set ws2 = Worksheets("sheet2")
    
    
 With ws1
 
            .AutoFilterMode = False

            .Range("A1:A1").AutoFilter

            .Range("A:A").AutoFilter Field:=1, Criteria1:="*a?b*"
            
            .Range("A1").CurrentRegion.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
            
With ws2

            If .Range("A1") <> "" Then
            
            .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial Paste:=xlPasteValues
            
        Else
        
            .Range("A1:A1").Value = ws1.Range("A1:A1").Value
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial Paste:=xlPasteValues
                
        End If

        Application.CutCopyMode = False
        
        ws1.AutoFilterMode = False
    

    lastRow = ws2.Range("a" & ws2.Rows.Count).End(xlUp).Row
 
            For i = 2 To lastRow
     
        If .Cells(i, "a") <> "" Then

             .Cells(i, 2).FormulaR1C1 = "=LEN(R[0]C[-1])-(LEN(SUBSTITUTE(R[0]C[-1],"","","""")))+1"
               
        End If
     
    Next i
    
            .Range("a" & lastRow + 1) = "Total:"
    
            .Range("b" & lastRow + 1) = Application.WorksheetFunction.Sum(.Range("b1:b" & lastRow))
    
            .Range("b" & lastRow + 1).Font.Bold = True
        
        End With
            
    End With
  
End Sub


ปัญหาตรงสูตร

Code: Select all

.Cells(i, 2).FormulaR1C1 = "=LEN(R[0]C[-1])-(LEN(SUBSTITUTE(R[0]C[-1],"","","""")))+1"
ไม่ได้คำคำตอบทึ่ีถูกต้อง ที่ถูกต้องอยู่ใน เซล c2:c7 ครับ
คือ รายการที่ต้องการนับเฉพาะ "*a?b*" :?: :)
Len.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#13

Post by snasui »

:D ตัวอย่างการเขียน Function ขึ้นมาใช้เอง ตามด้านล่างครับ

Code: Select all

Function LenAB(r As Range) As Long
    Dim t As Variant
    Dim i As Integer
    Dim icount As Integer
    t = Split(r, ",")
    For i = 0 To UBound(t)
        If t(i) Like "*a?b*" Then
            icount = icount + 1
        End If
    Next
    LenAB = icount
End Function
จากนั้นเซลล์ C2 คีย์สูตร

=LenAB(A2)

Enter > Copy ลงด้านล่าง
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#14

Post by Totem »

snasui wrote::D ตัวอย่างการเขียน Function ขึ้นมาใช้เอง ตามด้านล่างครับ

Code: Select all

Function LenAB(r As Range) As Long
    Dim t As Variant
    Dim i As Integer
    Dim icount As Integer
    t = Split(r, ",")
    For i = 0 To UBound(t)
        If t(i) Like "*a?b*" Then
            icount = icount + 1
        End If
    Next
    LenAB = icount
End Function
จากนั้นเซลล์ C2 คีย์สูตร

=LenAB(A2)

Enter > Copy ลงด้านล่าง
:D ขอบคุณครับ ที่สละเวลาตอบปัญหาตอนดึกมาก :thup: :o :shock:
จากสูตรที่ให้มาใน Function ที่เขียนบน vba ได้ตามที่ต้องการครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#15

Post by Totem »

:D เรียนอาจารย์และเพื่อนสมาชิกทุกท่าน

หากต้องการใช้เป็น code vba ที่ไม่ได้เขียนเป็นแบบ Function ผมลองปรับจากที่อาจารย์ให้มาแล้วได้ดังนี้

Code: Select all

Sub len_L()

Dim t As Variant
Dim i As Integer
Dim icount As Integer
Dim r As Range
Dim lastRow As Long

     
Sheets("sheet1").Select
     
            lastRow = Range("a" & Rows.count).End(xlUp).Row
    
    For Each r In Range("a2", Range("a" & Rows.count).End(xlUp))
    
        t = Split(r, ",")
        
         For i = 0 To UBound(t)
         
            If t(i) Like "*a?b*" Then
                
                icount = icount + 1
                
            End If
            
        Next i
        
            r.Offset(, 1).Value = icount
            
    Next r
    
            Range("a" & lastRow + 1) = "Total:"
    
            Range("b" & lastRow + 1) = Application.WorksheetFunction.Sum(Range("b1:b" & lastRow))
    
            Range("b" & lastRow + 1).Font.Bold = True
            
    
End Sub
ติดปัญหาตรงที่

Code: Select all

 icount = icount + 1
และ

Code: Select all

r.Offset(, 1).Value = icount
เมื่อให้แล้วเป็นกันรวมจำนวนแบบสะสม ตั้งแต่ เซล b2:b7 ลงมาด้านล่าง ซึ่งที่ต้องการเป็นการรวมแบบแยกเซล
เลยอย่างให้ช่วยปรับ code ครับ :) (อยากเขียนแบบไม่ใช้ Function ดูครับ) :idea: :)

ขอบคุณครับ
Len question.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#16

Post by snasui »

:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

'Other code
t = Split(r, ",")
icount = 0
For i = 0 To UBound(t)
    If t(i) Like "*a?b*" Then
        icount = icount + 1
    End If
Next i
'Other code
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: นับจำนวนรายการในตำแหน่งต่างๆ กัน

#17

Post by Totem »

snasui wrote::D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

'Other code
t = Split(r, ",")
icount = 0
For i = 0 To UBound(t)
    If t(i) Like "*a?b*" Then
        icount = icount + 1
    End If
Next i
'Other code
:D ได้ทั้งความรู้และแก้ไขปัญหาสำเร็จเรียบร้อยแล้วครับ ขอบคุณครับ
Post Reply