VBA แสดงค่ามากที่สุด ตามเงื่อนไขที่กำหนด
Posted: Thu Apr 06, 2017 8:04 pm
เรียนอาจารย์ที่เคารพครับ
ถ้าเราต้องการให้แสดงคะแนนมากที่สุด 1 คนของรายวิชานั้น แต่ถ้าคะแนนสูงสุดเท่ากัน ก็ให้แสดงคนที่มีคะแนนสูงสุดเท่ากันในแต่ละวิชา โดยแสดงชื่อวิชา ชื่อ-นามสกุล ระดับชั้น ห้อง และคะแนนสูงสุด ต่อกันลงมาเป็นแถวถัดไป ที่ชีท MaxM4 เซลล์ a3:f10000
ผลที่ได้ออกมาคือ แสดงเฉพาะคนเดียว และคะแนนก็ยังไม่ได้มีค่ามากที่สุด จากโค๊ดด้านล่างนี้ต้องปรับตรงตำแหน่งใดบ้างครับ
ถ้าต้องการผลลัพธ์ให้ได้ตามภาพนี้ ควรปรับตรงตำแหน่งใดครับ
ถ้าเราต้องการให้แสดงคะแนนมากที่สุด 1 คนของรายวิชานั้น แต่ถ้าคะแนนสูงสุดเท่ากัน ก็ให้แสดงคนที่มีคะแนนสูงสุดเท่ากันในแต่ละวิชา โดยแสดงชื่อวิชา ชื่อ-นามสกุล ระดับชั้น ห้อง และคะแนนสูงสุด ต่อกันลงมาเป็นแถวถัดไป ที่ชีท MaxM4 เซลล์ a3:f10000
ผลที่ได้ออกมาคือ แสดงเฉพาะคนเดียว และคะแนนก็ยังไม่ได้มีค่ามากที่สุด จากโค๊ดด้านล่างนี้ต้องปรับตรงตำแหน่งใดบ้างครับ
Code: Select all
Sub MaxM4_Click()
Dim directory As String, fileName As String
Dim sheet As Worksheet, j, i, r, max, Min As Integer
Dim tempBook As Workbook, thsBook As Workbook
Dim bookStr As String, rw As Integer
Application.ScreenUpdating = False
directory = Sheets("MaxM4").Range("o2").Value
fileName = Dir(directory & "*.xl??")
Set thsBook = ThisWorkbook
j = 3
Do While fileName <> ""
Set tempBook = Workbooks.Open(directory & fileName)
bookStr = VBA.Left(tempBook.Name, 6)
On Error Resume Next
With thsBook.Sheets("MaxM4")
rw = Application.Match(bookStr, .Range("r2:r10000"), 0) - 1
If Err <> 0 Then
MsgBox "File " & tempBook.Name & " ไม่พบไฟล์ใน column R."
Err = 0
Else
.Cells(j, "a") = tempBook.Name
‘ให้แสดงคะแนนมากที่สุด 1 คนของรายวิชานั้น แต่ถ้าคะแนนสูงสุดเท่ากัน ก็ให้แสดงคนที่มีคะแนนสูงสุดเท่ากันในแต่ละวิชา โดยแสดงชื่อวิชา ชื่อ-นามสกุล ระดับชั้น ห้อง และคะแนนสูงสุด ต่อกันลงมาเป็นแถวถัดไป ที่ชีท MaxM4 เซลล์ a3:f10000
'i = 7
r = 7
'Min = 0
max = 100
Do Until tempBook.Sheets("รายงาน1").Range("i" & r) = ""
If tempBook.Sheets("รายงาน1").Range("i" & r) <= max Then .Cells(j, "f").Resize(1, 1).Value = _
tempBook.Sheets("รายงาน1").Range("i" & r).Value
.Cells(j, "c").Resize(1, 1).Value = _
tempBook.Sheets("รายงาน1").Range("d" & r).Value
.Cells(j, "d").Resize(1, 1).Value = _
tempBook.Sheets("รายงาน1").Range("e" & r).Value
.Cells(j, "b").Resize(1, 1).Value = _
tempBook.Sheets("Home").Range("c12").Value
.Cells(j, "g").Resize(1, 1).Value = _
tempBook.Sheets("Home").Range("c9").Value
.Cells(j, "h").Resize(1, 1).Value = _
tempBook.Sheets("Home").Range("e9").Value
r = r + 1
Loop
End If
End With
j = j + 1
tempBook.Close False
fileName = Dir()
Loop
Application.ScreenUpdating = True
MsgBox ("รับไฟล์จาก Directory " & Sheets("MaxM4").Range("o2").Value & " เรียบร้อยแล้วค่ะ")
End Sub