การเรียงลำดับล้มเหลวในการย้ายกฎการตรวจสอบความถูกต้องของข้อมูลพร้อมกับข้อมูลใน Excel


4

เมื่อเรียงลำดับตารางหรือช่วงใน Excel ค่าของเซลล์และการจัดรูปแบบพื้นฐานเช่นตัวหนาตัวเอียงสี ฯลฯ จะย้าย แต่สิ่งต่อไปนี้จะไม่ย้าย:

  • พรมแดน
  • กฎการตรวจสอบข้อมูล

สเปรดชีตของฉันมีการตรวจสอบความถูกต้องของข้อมูลต่อเซลล์ดังนั้นเมื่อฉันทำการเรียงลำดับมันจะย้ายค่าไปรอบ ๆ แต่ไม่ได้ทำการตรวจสอบความถูกต้องกับพวกเขา

นี่คือตัวอย่างก่อนการจัดเรียง:

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

และหลังจากการเรียงลำดับ (AZ บนชื่อ "Fruit")

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

มีวิธีทำให้ Excel ย้ายกฎการตรวจสอบความถูกต้องของข้อมูลพร้อมกับค่าและรูปแบบเมื่อ Excel ทำการเรียงลำดับหรือไม่

แก้ไข:

เพียงชี้แจงฉันมีสองข้อกังวลแยกกันได้ที่นี่:

  1. ข้อกังวลหลัก: หากผู้ใช้ตัดสินใจที่จะคลิกปุ่มเรียงลำดับหรือตัวเลือกเรียงลำดับบนส่วนหัวของคอลัมน์ตัวกรองสิ่งนี้จะทำให้กฎการตรวจสอบความถูกต้องของข้อมูลของฉัน (ซับซ้อน!)
  2. ข้อกังวลรอง: คงจะดีถ้าแผ่นงานของฉันสามารถเรียงลำดับโดยใช้ปุ่ม inbuilt Excel สำหรับการเรียงลำดับ (นี่เป็นวิธีที่ชัดเจนที่สุดในการจัดเรียงข้อมูล) มาโครที่แยกต่างหากสำหรับการเรียงลำดับนั้นดูเหมือนว่าจะเป็นเรื่องเล็กน้อย

แก้ไข:

วิธีแก้ปัญหาในที่สุดของฉันคือการปิดการเรียงลำดับทั้งหมดโดยปกป้องสมุดงานและปิดการเรียงลำดับสำหรับชีตทั้งหมด คุณสามารถกดปุ่ม "เรียงลำดับ" แต่พวกเขาไม่ทำอะไรเลย

เพื่อเป็นการป้องกันเพิ่มเติมฉันได้เพิ่ม VBA ที่จะใช้ Protect Workbook อีกครั้งทุกครั้งที่มีการเปิดเวิร์กบุ๊กและแสดงแผ่นงานพร้อมคำแนะนำการใช้งานและคำเตือน (เช่น "อย่าเรียงลำดับ!") ผู้ใช้ปลายทางสามารถยกเลิก - ป้องกันสมุดงานได้ตลอดเวลาดังนั้นนี่จึงไม่ผิดพลาด แต่ฉันเชื่อว่าเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้


คุณรู้วิธีใช้ VBA หรือไม่? คุณสามารถทำเส้นขอบด้วยการบันทึกแมโคร ฉันจะค้นหาสิ่งที่ฉันมีสำหรับการย้ายเครื่องมือตรวจสอบความถูกต้อง AFAIR เป็น VSTO c #
Jeremy Thompson

@ JeremyThompson: ทักษะ VBA ของฉันค่อนข้างเรียบง่าย - ฉันกำลังเรียน VBA จริง ๆ เพราะฉันไปงานนี้โดยเฉพาะ เส้นขอบไม่ได้รบกวนฉันมันคือการตรวจสอบข้อมูลที่สำคัญ ฉันไม่ต้องการให้ munged เกิดขึ้นโดยบังเอิญถ้ามีคนคลิกปุ่ม "เรียงลำดับ"
Li-aung Yip

คำตอบ:


2

คุณสามารถสร้างกฎทั่วไปสำหรับการจัดการค่า pH และนำไปใช้กับคอลัมน์ทั้งหมดของค่า คุณเพียงแค่ต้องรวมเงื่อนไขที่ตรวจสอบ Key1 เพื่อดูว่าค่าเป็น pH หรือไม่ ถ้าเป็นเช่นนั้นตรวจสอบเกณฑ์; ถ้าไม่ใช่เพียงแค่คืนค่า TRUE เพื่ออนุญาตอะไรก็ตาม

ตัวอย่างเช่นต่อไปนี้เป็นกฎการตรวจสอบความถูกต้องของข้อมูลแบบกำหนดเองที่ใช้กับC2:C6(คอลัมน์ค่า 1) ในตารางของคุณ:

=IF(B2="pH",AND(C2>=0,C2<=14,C2=INT(C2)),TRUE)

สิ่งนี้จะ จำกัด ค่า pH 0 <= pH <= 14 และเป็นจำนวนเต็มเท่านั้น เนื่องจากกฎถูกนำไปใช้กับทั้งคอลัมน์การเรียงลำดับจะไม่ส่งผลต่อการตรวจสอบความถูกต้องของข้อมูล

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

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

=B2="pH"

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


1
วิธีการที่ดีถ้าคุณมีกฎที่เป็นไปได้เล็กน้อยซึ่งเป็นตัวอย่างของฉันที่แสดงให้เห็น :) ในกรณีที่อาจมีกฎที่แตกต่างกันหลายร้อยกฎมันไม่สะดวกเลยที่จะสร้างกฎการตรวจสอบที่ซับซ้อนและซับซ้อนขึ้นมา นอกจากนี้ยังหมายความว่าข้อความอินพุตและการแจ้งเตือนข้อผิดพลาดไม่สามารถให้ข้อมูลได้มากนัก
Li-aung Yip

@ Li-aungYip ใช่นั่นเป็นปัญหาที่ถูกต้องตามข้อ จำกัด ฉันไม่รู้อะไรเลยเกี่ยวกับโครงการของคุณ แต่การออกแบบโต๊ะอาจทำให้ปัญหาแย่ลงได้หรือไม่? นั่นอาจเป็นจุดเริ่มต้นที่ดีในการมองหาวิธีลดปัญหานี้หรือหลีกเลี่ยงปัญหาโดยรวม หากการออกแบบสมุดงานไม่ใช่ตัวเลือกและคุณต้องการข้อความแสดงข้อผิดพลาดแบบสั้น ๆ และให้ข้อมูลสำหรับการตรวจสอบความถูกต้องของข้อมูลของคุณฉันกลัวว่าขั้นตอน VBA การดักจับเหตุการณ์ (ซับซ้อน) เป็นวิธีเดียวที่ฉันเห็น
Excellll

น่าเสียดายที่นี่เป็นหนึ่งในงานเหล่านั้นที่เราพยายามจะให้ finagle Excel เป็นแอพพลิเคชั่นฐานข้อมูลจริงซึ่งไม่ใช่ จะเป็นการดีที่ผมจะไม่ใช้ Excel สำหรับการตรวจสอบข้อมูลที่ซับซ้อนนี้ได้ทั้งหมด แต่ให้ผู้ใช้ขั้นปลายของสเปรดชีตจะเป็นคนงานเหมืองและช่างไฟฟ้าก็มีที่จะอยู่ใน Excel หรือพวกเขาไม่ได้มีโอกาสของการใช้มันได้อย่างมีประสิทธิภาพ
Li-aung Yip

การถอนเงินและการยอมรับสิ่งนี้เพราะมันเป็นคำตอบที่เป็นประโยชน์มากที่สุดสำหรับผู้ที่มีปัญหานี้ในอนาคต (แม้ว่ามันจะไม่ได้ช่วยฉันก็ตาม)
Li-aung Yip

0

เมื่อดูรหัสเก่า ๆ มันจะปรากฏขึ้นฉันได้ลบและสร้างตัวตรวจสอบความถูกต้องขึ้นใหม่:

var cellValues = activeSheet.Range[leftColumn + startingRow, Type.Missing];
cellValues.Validation.Delete();

หากคุณต้องการทำสิ่งใดใน Excelprogramatically ให้บันทึกแมโคร> ดำเนินการด้วยตนเอง> หยุดการบันทึกแมโคร> กด Alt + F11 และดูรหัสในโมดูลที่สร้างขึ้นใหม่ นี่เป็นวิธีที่รวดเร็วในการรับโปรแกรม VBA โชคดี!


ไม่ใช่สิ่งที่ฉันต้องการ - การตรวจสอบข้อมูลไม่เหมือนกันภายในแถวหรือคอลัมน์ หากคุณจินตนาการว่าทุกเซลล์มีกฎการตรวจสอบที่ไม่ซ้ำกันคุณก็เกือบจะใกล้เคียงกับสเปรดชีตของฉัน :(
Li-aung Yip

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

0

นี่ไม่ใช่คำตอบสำหรับคำถามของคุณทั้งหมด แต่ฉันรู้สึกว่าควรพูดถึง

วิธีที่ข้อมูลของคุณถูกป้อนลงในสเปรดชีตเป็นเรื่องแปลกเล็กน้อยและหากไม่มีเหตุผลที่เฉพาะเจาะจงคุณอาจแก้ไขปัญหาด้วยการเปลี่ยนการออกแบบสเปรดชีทเป็นบิต วิธีที่ง่ายที่สุดในการป้อนข้อมูลเช่นของคุณคือการมีหนึ่งคอลัมน์ต่อคีย์ (สี, pH, เส้นผ่านศูนย์กลางและอื่น ๆ ) และหนึ่งแถวต่อผลไม้ ด้วยวิธีนี้คุณสามารถกำหนดกฎและสไตล์สำหรับทั้งคอลัมน์และไม่ต้องกังวลเกี่ยวกับการเรียงลำดับ

หากคุณต้องการเข้าถึงข้อมูลโดยใช้คีย์และค่าคุณอาจได้รับความช่วยเหลือโดยใช้ตารางสาระสำคัญและการค้นหาตารางสาระสำคัญ (GETPIVOTDATA) หรือการค้นหาแถว / คอลัมน์ (VLOOKUP / HLOOKUP)

ในกรณีของคุณกุญแจดูเหมือนจะถูกกำหนดไว้ค่อนข้างดี (ไม่เช่นนั้นเป็นเหตุผลที่ใช้แนวทางค่าคีย์) และเนื่องจาก Excel อนุญาตให้คอลัมน์หลายพันคอลัมน์คุณไม่ต้องใช้คีย์ การใช้คอลัมน์แยกสำหรับแต่ละคีย์จะทำหน้าที่เป็นรูปแบบการป้อนข้อมูลด้วย คุณจะไม่ลืมที่จะใส่ค่าสำหรับผลไม้เพราะเซลล์สำหรับค่านั้นจะว่างเปล่า

หากคุณมีหลายตัวอย่าง (ไม่ใช่แอปเปิ้ลทั้งหมดที่มีขนาดเส้นผ่าศูนย์กลางเท่ากัน ฯลฯ ) คุณจะสามารถปฏิบัติต่อแต่ละแถวในสเปรดชีตเป็นตัวอย่างเดียว

วิธีการนี้จะช่วยอำนวยความสะดวกในการประมวลผลข้อมูลเพิ่มเติมเช่นการสร้างไดอะแกรมและตารางเดือย

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