: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

แสดงค่าซ้ำใน Range

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#21

Post by chom_poona »

คำตอบที่ต้องการให้แสดงอยู่ในไฟลน์แนบค่ะ

ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แสดงค่าซ้ำใน Range

#22

Post by snasui »

:D ตัวอย่าง Code มีการปรับเปลี่ยน Range เล็กน้อยและต้องใส่ .Apply ครับ

Code: Select all

ActiveWorkbook.Worksheets("test").sort.SortFields.Clear
ActiveWorkbook.Worksheets("test").sort.SortFields.Add Key:=Range("k6:K17"), _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("test").sort
    .SetRange Range("J5:K16")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#23

Post by chom_poona »

ขอบคุณนะค่ะ

Sort ได้แล้วค่ะ

ขอถามเพิ่มเติมนะค่ะ ถ้าเราจะเอาค่า Range ต้องการเอาค่าใน Range"b19:e24"
เปรียบเทียบค่ากับ B3:E5 ว่ามีตัวไหนซ้ำบ้าง จะเปรียบเทียบค่าระหว่าง range ได้อย่างไรบ้างค่ะ เพราะว่า
มีตารางทั้งหมด 7 ตาราง ที่ใช้หาค่าซ้ำ

ขอบคุณมากนะค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แสดงค่าซ้ำใน Range

#24

Post by snasui »

:D เขียนหรือปรับ Code มาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#25

Post by chom_poona »

ได้แล้วค่ะ

เพิ่ม Range เข้าไป Set rAll = .Range("b19:e24", "b3:E5")

เส้นผมบังภูเขาแท้ๆๆ

ขอบคุณมากค่ะ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#26

Post by chom_poona »

มีปัญหา อีกแล้วค่ะ

ค่าไม่ sort จากมากไปหาน้อยค่ะ

แล้วก็ เพิ่มค่า range เข้าไป ระบุว่า มากกว่า 1 ค่า แต่ ค่าซ้ำที่มีค่า = 1 ก็ออกมาด้วยค่ะ

ช่วยดู สูตรให้หน่อยค่ะ

ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แสดงค่าซ้ำใน Range

#27

Post by snasui »

:D ตัวอย่าง Code เติมค่าในคอลัมน์ J และ O

Code: Select all

Dim rall As Range, icount As Long
Dim r1 As Range, r2 As Range
Dim c As New Collection, item As Variant
With ActiveSheet
    Set rall = Union(.[b3:e5], .[b19:e24])
    .Range("j6:j1000,o6:o1000").ClearContents
    For Each r1 In rall
        icount = 0
        For Each r2 In rall
            If r1.Value = r2.Value Then
                icount = icount + 1
            End If
        Next r2
        On Error Resume Next
        If icount > 1 Then
            c.Add CStr(r1.Value), CStr(r1.Value)
        End If
        On Error GoTo 0
    Next r1
    For Each item In c
        If CLng(item) <= .[j2] Then
            .Range("j" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        Else
            .Range("o" & .Rows.Count).End(xlUp) _
                .Offset(1, 0).Value = CLng(item)
        End If
    Next item
End With
ส่วนคอลัมน์ K:M ให้ Loop ด้วย Code แทนการเขียนสูตร เนื่องจากสูตรเป็นอุปสรรคต่อการจัดเรียงครับ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#28

Post by chom_poona »

เอา code มาใส่แล้ว ลอง run ดู

error ค่ะ ตรง with activesheet
You do not have the required permissions to view the files attached to this post.
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#29

Post by chom_poona »

On Error Resume Next ---> คืออะไรค่ะ
If icount > 1 Then
c.Add CStr(r1.Value), CStr(r1.Value)
End If
On Error GoTo 0
Next r1
For Each item In c
If CLng(item) <= .[j2] Then --> CLng คืออะไรค่ะ ตัวแปรหรือ คำสั่งค่ะ
.Range("j" & .Rows.Count).End(xlUp) _
.Offset(1, 0).Value = CLng(item)
Else
.Range("o" & .Rows.Count).End(xlUp) _
.Offset(1, 0).Value = CLng(item)
End If
Next item
End With

รบกวน อธิบาย code ส่วนนี้ให้ฟังหน่อยค่ะ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#30

Post by chom_poona »

ไม่ error แล้วค่ะ แต่ไม่เข้าใจสูตรอยู่ค่ะ [j2] มาจากไหนค่ะ คือตัวแปร Array แต่เราไม่ได้ประกาศตัวแปรเป็น Array เลยนะค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แสดงค่าซ้ำใน Range

#31

Post by snasui »

chom_poona wrote:On Error Resume Next ---> คืออะไรค่ะ
:D หมายถึง ถ้าผิดพลาดก็ให้ Run ต่อเนื่องไป ไม่ต้องแสดง Error ที่เขียนไว้เช่นนี้จำเป็นต้องทราบนะครับว่าบรรทัดต่อจากบรรทัดนี้จะเกิด Error ลักษณะใด ไม่ใช่ว่าใช้ในทุกกรณี
chom_poona wrote:If CLng(item) <= .[j2] Then --> CLng คืออะไรค่ะ ตัวแปรหรือ คำสั่งค่ะ
คำสั่งนี้ใช้แปลง item ให้มี Variable Type เป็น Long
chom_poona wrote:เอา code มาใส่แล้ว ลอง run ดู

error ค่ะ ตรง with activesheet
ในเครื่องผมไม่เกิด Error ครับ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#32

Post by chom_poona »

ขอบคุณมากเลยนะค่ะ

ตัวแปร Collection คืออะไรหรอค่ะ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#33

Post by chom_poona »

c.Add CStr(r1.Value), CStr(r1.Value) คำสั่งนี้ คืออะไรหรอค่ะ

อยากมองสูตรเป็นจังค่ะ อยากเก่งๆบ้าง
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แสดงค่าซ้ำใน Range

#34

Post by snasui »

chom_poona wrote:ตัวแปร Collection คืออะไรหรอค่ะ
chom_poona wrote:c.Add CStr(r1.Value), CStr(r1.Value) คำสั่งนี้ คืออะไรหรอค่ะ
:D แปลอย่างง่าย Collection เปรียบเหมือนกล่อง เป็นตัวแปรที่ใช้เก็บตัวแปรอื่น เหมือน Workbooks ที่มีหลาย Workbook เหมือน Worksheets ที่มีหลาย Worksheet เช่นนี้เป็นต้น

c.Add CStr(r1.Value), CStr(r1.Value) คือการเพิ่มค่าสมาชิกให้กับ Collection ที่ชื่อ c ครับ

ควรหาหนังสือเกี่ยวกับ Excel VBA มาอ่านเช่นของ John Walkenbach จะได้เข้าใจเรื่องของ Object Oriented Programming ของ Excel แต่หากจะใช้ VBA ทำงานจริงจัง คงต้องอ่านหลายเล่มและฝึกฝนค่อนข้างหนักและต่อเนื่อง ต้องใช้ความอดทนสูงครับ :mrgreen:

การโพสต์พยายามให้อยู่ในโพสต์เดียวกัน ยกเว้นจะมีการตอบแทรกเข้ามาก่อนครับ

อ่อ...ลักษณะนี้ไม่เรียกว่าสูตร แต่มันคือ Code VBA ครับ
chom_poona
Member
Member
Posts: 35
Joined: Sat May 21, 2016 7:52 pm

Re: แสดงค่าซ้ำใน Range

#35

Post by chom_poona »

ขอบคุณมากเลยนะค่ะ ที่สละเวลามาช่วยดู code ให้ และจะพยายามฝึกให้มากๆค่ะ สำหรับกระทู้นี้ ขอจบคำถามไว้แค่นี้ค่ะ

ในโอกาสหน้าอาจต้องรบกวนอาจารย์อีกนะค่ะ

ขอบพระคุณอย่างสูงค่ะ
Post Reply