มีฟังก์ชันใน Excel เพื่อหาค่าสัมบูรณ์สูงสุดของช่วงหรือไม่


15

ฉันกำลังมองหาฟังก์ชั่นใน Excel ที่ดูเหมือนว่า

= MAX(ABS(A1:A10))

ยกเว้นABS()ไม่ใช้ช่วงตัวเลข

สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ:

= MAX(ABS(MIN(A1:A10)),ABS(MAX(A1:A10)))

มันใช้กลอุบาย แต่มันก็ยุ่งเหยิงเหมือนห่าและฉันไม่อยากจะเชื่อเลยว่ามันไม่มีทางที่ดีกว่า ความคิดใด ๆ

คำตอบ:


23

คุณต้องป้อนเป็นสูตรอาร์เรย์ ทำได้โดยการกดCtrl. Shift+ Enter+ สูตรจะปรากฏขึ้นราวกับ{=MAX(ABS(A1:A10))}ว่าทำอย่างถูกต้อง


4
หมายเหตุสำหรับกะโหลกศีรษะเหมือนตัวเอง: ป้อนสูตรจากนั้นกด Ctrl + Shift + Enter ฉันพยายามกด ctrl + shift + enter ก่อนจากนั้นป้อนสูตรที่ใช้งานไม่ได้ : P
Ben

Excel ไม่เป็นมิตรต่อผู้ใช้เมื่อพูดถึงสูตรเมทริกซ์ พฤติกรรมมันน่ารำคาญจริงๆ
Pedro77

ไม่จำเป็นต้องใช้สูตรอาร์เรย์ (ดูสิ่งนี้และสิ่งนี้นอกจากนี้อาจไม่สะดวก
sancho.s Reinstate Monica

3
สิ่งนี้จะส่งกลับข้อผิดพลาดหากช่วงของคุณมีข้อมูลที่ไม่ใช่ตัวเลข (เช่นข้อผิดพลาดของข้อความหรือสูตร)
CBRF23

22

ฉันไม่ชอบอาร์เรย์ดังนั้นฉันจะใช้สิ่งต่อไปนี้:

=MAX(-MIN(range), MAX(range))

วิธีนี้ใช้งานได้เพียงครั้งเดียวที่ค่าสัมบูรณ์ของจำนวนต่ำสุดจะสูงกว่าค่าสูงสุดคือถ้าเป็นจำนวนลบ


สิ่งนี้จะทำงานหากช่วงของคุณมีข้อมูลที่ไม่ใช่ตัวเลข (เช่นข้อผิดพลาดข้อความหรือสูตร)
CBRF23

ดีนี่คือคุณสมบัติที่ขาดหายไปใน excel ทำไมไม่ max (abs ()) ??
Pedro77

@ จูลี่ตอนนี้คำตอบเก่าของคุณ + 5 ปียังคงมีผู้ชม :) คุณเสนอทางเลือกที่จะหลีกเลี่ยงการใช้ฟังก์ชั่นอาเรย์ซึ่งคุณระบุว่าคุณต้องพิจารณาเครื่องหมายบวก คุณยังคงไม่ชอบฟังก์ชันอาเรย์หรือไม่? คุณสามารถแสดงความคิดเห็นเกี่ยวกับสาเหตุที่คุณไม่ชอบฟังก์ชั่นอาร์เรย์ได้หรือไม่ การรู้เพิ่มเติมเกี่ยวกับข้อควรพิจารณาของคุณอาจช่วยฉันและผู้อ่านคนอื่นประเมินโซลูชันที่เราต้องการใช้ในบริบทใด
Paul van Leeuwen

สิ่งนี้ยังทำงานใน OpenOffice
Wolfgang Fahl

2

ลองสูตรนี้ (จากที่นี่ )

=MAX(INDEX(ABS(A1:A10),0,1))

มันรวม:

  • ประโยชน์ของสูตรที่ไม่ใช้อาร์เรย์เช่นเดียวกับในคำตอบข้างต้น (ดูที่นี่เพื่อประโยชน์ของการไม่ใช้อาร์เรย์)
  • เข้าสู่ช่วงเป้าหมายเพียงครั้งเดียวดังที่คำตอบนี้ด้านบน (มีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยกว่าและแก้ไขได้ง่ายกว่า)

1

โซลูชัน VBA นี้ทำงานด้วย

Public Function absMax(values As Range)
    'returns the largest absolute value in a list of pos and neg numbers

    Dim myArray() As Double, i As Integer, numel As Integer
    numel = values.count
    ReDim myArray(1 To numel)
    For i = 1 To numel
        myArray(i) = Abs(values(i))
    Next i
    absMax = WorksheetFunction.Max(myArray)

End Function
  1. เปิดเครื่องมือแก้ไข VBA ของคุณ ( Alt+ F11)
  2. ใส่โมดูลใหม่ในบานหน้าต่างด้านขวา
  3. คัดลอกและวางรหัสไปยังโมดูล
  4. กลับไปที่ Excel และใช้ =absMax(A1:A3)

ป้อนคำอธิบายรูปภาพที่นี่


0
=IF(ABS(LARGE(A1:A10,1))>ABS(SMALL(A1:A10,1)),LARGE(A1:A10,1),SMALL(A1:A10,1))

สิ่งนี้จะค้นหาค่าที่มีค่าสัมบูรณ์ที่ใหญ่ที่สุดนอกขอบเขต แต่ยังคงส่งคืนค่าจริงด้วยเครื่องหมายดั้งเดิม (+/-) ไม่ใช่ค่าสัมบูรณ์


(1) ในขณะที่คุณรู้ว่านี้ไม่ได้คำตอบกับผู้นี้คำถาม มันเป็นคำตอบสำหรับคำถามอื่น เราชอบที่จะตอบคำถามที่พวกเขาไปด้วย หากคุณต้องการโพสต์คำตอบนี้จริงๆคุณอาจต้องการ“ ถาม” คำถามที่เกี่ยวข้องแล้วตอบคำถาม ( คุณได้รับอนุญาตให้ทำเช่นนั้นแต่เนื่องจากคุณมีชื่อเสียงน้อยคุณอาจต้องรอหลายชั่วโมงก่อนที่คุณจะสามารถตอบคำถามของคุณเองได้)
G-Man กล่าวว่า 'Reinstate Monica'

(2) ผู้ปฏิบัติการมีคำตอบสำหรับคำถามอยู่แล้วและปฏิเสธเพราะ“ มันยุ่งเหยิงไปแล้วและฉันไม่อยากจะเชื่อเลยว่ามันไม่มีทางที่ดีกว่า” เหตุใดจึงต้องโพสต์คำตอบที่ยาวเป็นสองเท่าของคำตอบที่เขามีอยู่แล้ว สำหรับเรื่องนั้นทำไมไม่พูดเพียง=IF(ABS(MAX(A1:A10))>ABS(MIN(A1:A10)),MAX(A1:A10),MIN(A1:A10))?
G-Man กล่าวว่า 'Reinstate Monica'

@ G-Man นี่เป็นโซลูชันสูตรเดียวที่โพสต์จนถึงที่ยังคงรักษาสัญลักษณ์เดิมซึ่งไม่ได้รับการร้องขออย่างชัดเจนจาก OP แต่เป็นประโยชน์กับฉัน ฉันไม่เห็นด้วยอย่างสุภาพกับทั้งการประเมินของคุณ
Portland Runner

0

= MAX (MAX (X1: X5) ABS (MIN (X1: X5)))


แล้วมันแตกต่างจากคำตอบของจูลี่อย่างไร?
phuclv

นี่คือคำตอบสำหรับคำถาม (ล่าช้าใช่) เช่นเดียวกับ Julie อาจมีประสิทธิภาพน้อยกว่าเล็กน้อย แต่ IMHO ค่อนข้างชัดเจนสำหรับคนที่สืบทอดสเปรดชีต
xenoid

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.