Page 2 of 2
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 4:29 pm
by chom_poona
คำตอบที่ต้องการให้แสดงอยู่ในไฟลน์แนบค่ะ
ขอบคุณค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 4:35 pm
by snasui

ตัวอย่าง 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
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 4:48 pm
by chom_poona
ขอบคุณนะค่ะ
Sort ได้แล้วค่ะ
ขอถามเพิ่มเติมนะค่ะ ถ้าเราจะเอาค่า Range ต้องการเอาค่าใน Range"b19:e24"
เปรียบเทียบค่ากับ B3:E5 ว่ามีตัวไหนซ้ำบ้าง จะเปรียบเทียบค่าระหว่าง range ได้อย่างไรบ้างค่ะ เพราะว่า
มีตารางทั้งหมด 7 ตาราง ที่ใช้หาค่าซ้ำ
ขอบคุณมากนะค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 5:52 pm
by snasui

เขียนหรือปรับ Code มาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 6:24 pm
by chom_poona
ได้แล้วค่ะ
เพิ่ม Range เข้าไป Set rAll = .Range("b19:e24", "b3:E5")
เส้นผมบังภูเขาแท้ๆๆ
ขอบคุณมากค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 6:32 pm
by chom_poona
มีปัญหา อีกแล้วค่ะ
ค่าไม่ sort จากมากไปหาน้อยค่ะ
แล้วก็ เพิ่มค่า range เข้าไป ระบุว่า มากกว่า 1 ค่า แต่ ค่าซ้ำที่มีค่า = 1 ก็ออกมาด้วยค่ะ
ช่วยดู สูตรให้หน่อยค่ะ
ขอบคุณค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 6:51 pm
by snasui

ตัวอย่าง 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 แทนการเขียนสูตร เนื่องจากสูตรเป็นอุปสรรคต่อการจัดเรียงครับ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 7:36 pm
by chom_poona
เอา code มาใส่แล้ว ลอง run ดู
error ค่ะ ตรง with activesheet
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 7:51 pm
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 ส่วนนี้ให้ฟังหน่อยค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:13 pm
by chom_poona
ไม่ error แล้วค่ะ แต่ไม่เข้าใจสูตรอยู่ค่ะ [j2] มาจากไหนค่ะ คือตัวแปร Array แต่เราไม่ได้ประกาศตัวแปรเป็น Array เลยนะค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:18 pm
by snasui
chom_poona wrote:On Error Resume Next ---> คืออะไรค่ะ

หมายถึง ถ้าผิดพลาดก็ให้ 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 ครับ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:26 pm
by chom_poona
ขอบคุณมากเลยนะค่ะ
ตัวแปร Collection คืออะไรหรอค่ะ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:32 pm
by chom_poona
c.Add CStr(r1.Value), CStr(r1.Value) คำสั่งนี้ คืออะไรหรอค่ะ
อยากมองสูตรเป็นจังค่ะ อยากเก่งๆบ้าง
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:43 pm
by snasui
chom_poona wrote:ตัวแปร Collection คืออะไรหรอค่ะ
chom_poona wrote:c.Add CStr(r1.Value), CStr(r1.Value) คำสั่งนี้ คืออะไรหรอค่ะ

แปลอย่างง่าย Collection เปรียบเหมือนกล่อง เป็นตัวแปรที่ใช้เก็บตัวแปรอื่น เหมือน Workbooks ที่มีหลาย Workbook เหมือน Worksheets ที่มีหลาย Worksheet เช่นนี้เป็นต้น
c.Add CStr(r1.Value), CStr(r1.Value) คือการเพิ่มค่าสมาชิกให้กับ Collection ที่ชื่อ c ครับ
ควรหาหนังสือเกี่ยวกับ Excel VBA มาอ่านเช่นของ John Walkenbach จะได้เข้าใจเรื่องของ Object Oriented Programming ของ Excel แต่หากจะใช้ VBA ทำงานจริงจัง คงต้องอ่านหลายเล่มและฝึกฝนค่อนข้างหนักและต่อเนื่อง ต้องใช้ความอดทนสูงครับ
การโพสต์พยายามให้อยู่ในโพสต์เดียวกัน ยกเว้นจะมีการตอบแทรกเข้ามาก่อนครับ
อ่อ...ลักษณะนี้ไม่เรียกว่าสูตร แต่มันคือ Code VBA ครับ
Re: แสดงค่าซ้ำใน Range
Posted: Sun May 22, 2016 8:46 pm
by chom_poona
ขอบคุณมากเลยนะค่ะ ที่สละเวลามาช่วยดู code ให้ และจะพยายามฝึกให้มากๆค่ะ สำหรับกระทู้นี้ ขอจบคำถามไว้แค่นี้ค่ะ
ในโอกาสหน้าอาจต้องรบกวนอาจารย์อีกนะค่ะ
ขอบพระคุณอย่างสูงค่ะ