การตรวจสอบความถูกต้องของข้อมูล Excel 2010 อนุญาตเค้าโครงเฉพาะ

ฉันต้องการใช้การตรวจสอบความถูกต้องของข้อมูลกับหมายเลขอ้างอิง เพื่อบังคับใช้เค้าโครงต่อไปนี้ (ควรใช้ตัวพิมพ์ใหญ่เท่านั้น):

XX_NNX-XX_NNN_NN-XXX

X = ตัวเลข

ยังไม่มีข้อความ = ตัวอักษร

เช่น: 12_AB1-23_ABC_AB-123

สูตรที่กำหนดเองต่อไปนี้อนุญาตทั้งหมดยกเว้นตัวเลข มีวิธีแก้ไขชั่วคราวหรือไม่

ฉันไม่ต้องการใช้ * เนื่องจากอนุญาตให้มีอักขระได้มากกว่าที่ฉันต้องการ

=COUNTIF(A1,"??_???-??_???_??-???")


person Snottus    schedule 22.03.2020    source แหล่งที่มา


คำตอบ (1)


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

=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0))

หมายเหตุ: นี่เป็นวิธีการขั้นพื้นฐานและอาจต้องมีการปรับแต่งหากคุณมีกรณีที่เกี่ยวข้องกับการใช้ทศนิยม ฯลฯ

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

=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),INDEX(FREQUENCY(-CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),{-91,-65,0}),2)=7)

แก้ไข 2: กลายเป็นว่ายากกว่าที่ฉันจินตนาการไว้ สูตรต่อไปนี้ใช้งานได้ใน DV สำหรับเซลล์ A1

=AND(COUNTIF(A1,"??_???-??_???_??-???"),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),MIN(FLOOR(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),65))=65,MAX(CEILING(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),90))=90)

แต่เนื่องจากลักษณะพิเศษบางประการ Excel จึงไม่ยอมให้ฉันวางมันลงไป ดังนั้นฉันจึงเขียนโค้ดขนาดเล็กสำหรับสิ่งเดียวกันซึ่งใช้ DV กับเซลล์ A1 และน่าประหลาดใจที่มันยอมรับสูตรยาวเดียวกันนั้นผ่านโค้ด ตรวจสอบให้แน่ใจว่าคุณลบ DV ในเซลล์ก่อนที่จะเรียกใช้โค้ดนี้

With Range("A1")
    .Value = "12_AB1-23_ADC_AZ-123"
    .Validation.Add xlValidateCustom, , , "=AND(COUNTIF(A1,""??_???-??_???_??-???""),ISNUMBER((LEFT(A1,2)&MID(A1,6,1)&MID(A1,8,2)&RIGHT(A1,3))+0),MIN(FLOOR(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),65))=65,MAX(CEILING(CODE(MID(MID(A1,4,2)&MID(A1,11,3)&MID(A1,15,2),ROW($A$1:$A$7),1)),90))=90)"
End With

เมื่อเข้าไปแล้ว คุณสามารถนำมันไปไว้ในเซลล์อื่นได้โดยเพียงแค่ทำ copy >> Paste Special >> Validation

เพื่อความชัดเจนฉันใช้ Excel 2016

person shrivallabha.redij    schedule 22.03.2020
comment
ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว! วิธีนี้จะช่วยแก้ปัญหาเรื่องตัวเลข แต่อนุญาตให้แทนที่ตัวอักษรด้วยตัวเลขได้ - ฉันพยายามยุ่งกับฟังก์ชัน ISTEXT แต่ก็ยังไม่มีประโยชน์ - person Snottus; 22.03.2020
comment
@Snottus ฉันได้โพสต์การแก้ไขแล้ว โปรดทดสอบและดูว่ามันช่วยคุณได้หรือไม่ - person shrivallabha.redij; 23.03.2020
comment
ตอบเร็วไปหน่อย - ฟังก์ชั่นที่แก้ไขเข้ากันไม่ได้กับการตรวจสอบข้อมูล (ไม่อนุญาตให้ใช้สหภาพ ทางแยก และช่วง) อย่างน้อยใน Excel 2010 - person Snottus; 24.03.2020
comment
@Snottus คุณพูดถูก! มันดูยากกว่าที่ฉันคิดไว้ในตอนแรก ดูการแก้ไข 2 สิ่งนี้ได้รับการตรวจสอบและทดสอบใน Excel 2016 และฉันหวังว่าจะได้ผลสำหรับคุณใน Excel 2010! - person shrivallabha.redij; 25.03.2020