ในคอลัมภ์ A จะแสดงชื่อกลุ่มของข้อมูล
คอลัมภ์ B จะแสดงค่าของข้อูลแต่ละตัว
คอลัมภ์ C ให้แสดงค่าที่มากที่สุดของแต่ละกลุ่มข้อมูล
ขั้นตอนการเขียน code
#1) ทำการจัดเรียงข้อมูลโดยใช้การบันทึกมาโคร
#2) กำหนดให้การเปรียบเทียบค่าของ Cells(i, 2).Value และ Cells(i + 1, 2)
ถ้า ค่าCells(i, 2).Value > Cells(i + 1, 2) ให้แสดงค่า ของ Cells(i, 2) ที่ตำแหน่งแถวเดียวกันของคอลัมน์ C
เนื่องจากโดยปกติแล้วค่าที่ได้ในช่วงแรกจะมีค่าน้อย ดังนั้นจึงเอาเงื่อนไขนี้เป็นเกณฑ์ ในการหาค่ามากที่สุดของแต่ละกลุ่ม
แต่ในบางกรณีที่มีกลุ่มข้อมูลที่มีค่ามากผิดปกติ เราไม่สามารถหาค่ามากสุดของกลุ่มข้อมูลนั้นได้ เนื่องจากค่าแรกของกลุ่มข้อมูลนั้นมีค่ามากกว่าค่าที่อยู่ในแถวก่อนหน้านั้น
ตัวอย่าง ค่าของข้อมูลใน cells(11,2) มีค่า เท่ากับ 30 และค่าของข้อมูล cells(12,2) มีค่าเท่ากับ100 ซึ่งในกรณีนี้จะไม่ตรงตามเงื่อนไข ทำให้ไม่สามารถดึงค่ามากที่สุดของกลุ่มข้อมูล SW-16 ได้ ค่ะ
จึงอยากขอคำแนะนำเกี่ยวกับการแก้ไขสูตร หรือฟังก์ชั่นอื่นๆที่ช่วยในการหาค่า Maximun ค่ะ

- Find Max Value Y161011.jpg (67.5 KiB) Viewed 190 times
หมายเหตุ : เนื่องจากีข้อมูลเป็นจำนวนมากกว่าหนึ่งพันค่า จึงอยากจะใช้ เขียน vba เพื่อช่วยให้เร็วขึ้นค่ะ
Code: Select all
Sub Findmax1()
'Sort Data
Range("A1:B15").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A15") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B15") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B15")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Start fine max
Dim i As Long
Dim LabX As Long
Dim MaxT As Long
lastrow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastrow
If Cells(i, 2).Value > Cells(i + 1, 2).Value Then
Cells(i, 3).Value = Cells(i, 2).Value
End If
Next i
End Sub