ตระกูลของซอฟต์แวร์สเปรดชีต Microsoft ที่มีเครื่องมือสําหรับการวิเคราะห์ ทําแผนภูมิ และสื่อสารข้อมูล
เป็นผลให้อาจมีข้อผิดพลาดทางไวยากรณ์หรือถ้อยคําแปลก ๆ
สวัสดี CHP SDB,
ยินดีต้อนรับสู่ Microsoft Community
นี่คือ William จากทีมสนับสนุนด้านเทคนิคของ Microsoft Community
ก่อนอื่นฉันต้องบอกคุณว่าฉันได้ทําการเปลี่ยนแปลงบางอย่างกับข้อมูลตัวอย่างของคุณเพื่อความสะดวกโดยเฉพาะอย่างยิ่งพูดว่าลบแถวแรกในภาพตัวอย่างของคุณว่างเปล่าด้วยข้อมูล เมื่อคุณพยายามคัดลอกสูตรที่ฉันให้ไว้โปรดลบหรือแก้ไขตามข้อมูลจริงของคุณ
ลองสูตรเหล่านี้:
สําหรับคอลัมน์ C (อันดับสูงสุด) เพื่อจัดอันดับค่าข้อมูลที่น้อยที่สุดที่มากกว่าศูนย์จากคอลัมน์ B: =IF(B2>0, RANK.EQ(B2, B$2:B$6, 1)-1, "") สูตรนี้จะจัดอันดับค่าจากน้อยไปมาก (จากมากไปน้อย) ก็ต่อเมื่อค่าเหล่านั้นมีค่ามากกว่าศูนย์ คัดลอกสูตรนี้ลงจาก C2 เป็น C5
อ้างอิง: RANK. ฝ่ายสนับสนุนของ Microsoft
บางทีคุณอาจสังเกตเห็นว่าผลลัพธ์ดูแตกต่างจากตัวอย่างของคุณมาก นั่นเป็นเพราะฉันได้เพิ่มแถวข้อมูลที่ซ้ํากันในหมายเลข 5 ในกรณีที่คุณต้องการสถานการณ์นี้ "อันดับ" เดียวกันใน ฟังก์ชัน RANK EQ หากนี่ไม่ใช่เอฟเฟกต์ที่คุณต้องการคุณสามารถโพสต์กลับและฉันจะให้คําแนะนําในการปรับเปลี่ยนสูตร
และสําหรับคอลัมน์ D ฉันควรยืนยันว่าอาจมีข้อผิดพลาดนิพจน์ในคําถามของคุณหรือไม่ ในคําที่เฉพาะเจาะจงคุณพูดว่า "เลือกค่าข้อมูลที่น้อยที่สุด" ในขณะที่ในภาพของคุณผลลัพธ์คือ 3 แทนที่จะเป็น 20 เช่นเลือก ค่าจากคอลัมน์ A สําหรับแถวที่มีค่าน้อยที่สุดจากคอลัมน์ B เท่านั้น: =XLOOKUP(MIN(C:C),C:C,A:A,"NOT FOUND",0,-1) สูตรนี้ส่งกลับค่าจากคอลัมน์ A สําหรับแถวที่มีค่าน้อยที่สุดจากคอลัมน์ B เท่านั้น เพียงแค่ใช้ฟังก์ชัน XLOOKUP คุณจะพบความรู้เพิ่มเติมเกี่ยวกับ:
ฟังก์ชัน XLOOKUP - ฝ่ายสนับสนุนของ Microsoft
อย่างไรก็ตามฉันยังพิจารณาด้วยว่าคุณจะพบว่าเมื่อคุณมีข้อมูลที่ซ้ํากันในคอลัมน์ B ฟังก์ชัน XLOOKUP จะส่งกลับเฉพาะค่าด้านหน้าสุดหรือตัวแปร on the search_mode ตามค่าสุดท้ายที่คุณเลือกซึ่งก็คือ -1 ในสูตรของฉัน อย่างที่คุณเห็นคอลัมน์ D เต็มไปด้วยเอาต์พุต 5 หากคุณต้องการส่งคืนข้อมูลที่ซ้ํากันทั้งหมดคุณจะต้องใช้มาโครหรือการเขียนโปรแกรม VBA ดังกล่าว โปรดทราบว่าการเขียนโปรแกรม VBA เป็นเทคนิคการเขียนโปรแกรมขั้นสูงบางประเภท ฉันไม่แน่ใจว่าคุณคุ้นเคยกับมันมากหรือไม่ แต่ฉันจะให้รหัสแก่คุณและคุณสามารถคัดลอกและใช้งานได้โดยตรง
Sub ListSmallestNonZeroInCell()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim rng As Range
Dim cell As Range
Dim minValue As Double
Dim strResult As String
Dim resultRow As Integer
' Define the range for the Data column
Set rng = ws.Range("B2:B6")
' Initialize minimum value to a large number
minValue = Application.WorksheetFunction.Large(rng, 1)
' Find the smallest non-zero value in the Data column
For Each cell In rng
If cell.Value > 0 And cell.Value < minValue Then
minValue = cell.Value
End If
Next cell
' Create a string with all 'No.' values that match the smallest non-zero value
For Each cell In rng
If cell.Value = minValue Then
strResult = strResult & cell.Offset(0, -1).Value & ", "
End If
Next cell
' Remove the trailing comma and space
strResult = Left(strResult, Len(strResult) - 2)
' Define the row where the result should be displayed
resultRow = 2 ' This is for cell E2
' Input the result into cell E2
ws.Cells(resultRow, 5).Value = strResult
End Sub
เมื่อต้องการใช้แมโครนี้:
- กด Alt + F11 เพื่อเปิดตัวแก้ไข VBA
- ไปที่ แทรกโมดูล > เพื่อสร้างโมดูลใหม่
- คัดลอกและวางโค้ดมาโครลงในโมดูล
- กด F5 หรือไปที่ Run > Run Sub/UserForm เพื่อดําเนินการแมโคร
แมโครป้อนค่า 'ไม่' ที่สอดคล้องกับค่า 'ข้อมูล' ที่ไม่ใช่ศูนย์ที่เล็กที่สุดในคอลัมน์ B ลงในเซลล์ E2
อย่าลืมปรับช่วงของเซลล์ในโค้ดตามข้อมูลจริงของคุณ
หากมีความไม่แน่นอนเกิดขึ้นในภายหลังโปรดอย่าลังเลที่จะโพสต์กลับ
หากคําตอบของฉันแก้ไขปัญหาของคุณได้สําเร็จโปรดคลิก ใช่ ภายใต้ การตอบกลับของฉัน
ขอแสดงความนับถือ
William.Y | LinkedIn ผู้เชี่ยวชาญด้านการสนับสนุนชุมชนของ Microsoft