snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Provolone
Member
Posts: 10 Joined: Thu Nov 07, 2013 5:06 am
#1
Post
by Provolone » Thu Nov 07, 2013 5:15 am
ผมมี cell นึงมีข้อความว่า
00110000
ผมต้องการหาตำแหน่งของเลข 1 แต่ต้องเป็นเลขหนึ่งที่อยู่ขวาสุด
ในที่นี้ต้องได้ค่า = 4
ยกตัวอย่างเพิ่ม
01010101 >>> 8
10001000 >>> 5
11111010 >>> 7
ขอเป็น formula นะครับ ไม่เอา VBA
ขอบคุณครับ
Provolone
Member
Posts: 10 Joined: Thu Nov 07, 2013 5:06 am
#2
Post
by Provolone » Thu Nov 07, 2013 5:32 am
จริงๆ ถ้าใช้ คำสั่ง find แล้วให้มันหาจากทางด้านขวามาก็จะได้ครับ แต่ excel ทำไม่ได้
อีกทางคือ ต้องกลับอักขระ จากซ้ายไปขวาก่อน (จริงๆ ก็ทำได้เพราะค่าใน cell นี้เกินจากการ concatenate มา) แล้วใช้คำสั่ง find
อยากทราบว่ามีทางอื่นอีกมั้ยครับ
snasui
Site Admin
Posts: 31257 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#3
Post
by snasui » Thu Nov 07, 2013 8:12 am
ลองตามนี้ครับ
สมมุติค่าเป้าหมายอยู่ที่ A1 ที่เซลล์ใด ๆ คีย่์
=LOOKUP(2,1/(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),ROW(INDIRECT("1:"&LEN(A1))))
Enter
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#4
Post
by bank9597 » Thu Nov 07, 2013 9:46 am
แถมอีกสูตรครับ
=FIND(2,SUBSTITUTE(A1,1,2,LEN(A1)-LEN(SUBSTITUTE(A1,1,""))))
Enter
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Provolone
Member
Posts: 10 Joined: Thu Nov 07, 2013 5:06 am
#5
Post
by Provolone » Fri Nov 08, 2013 2:05 am
ขอบคุณครับ งั้นถามเพิ่มครับ
ปัญหาเดิม แต่ว่าข้อมูล 0,1 กระจายอยู่คนละ cell ให้คืนค่าตำแหน่ง cell ที่มี 1 อยู่ขวาสุด
เช่นตัวอย่างล่างคำตอบอยู่ col F
มีวิธีทำโดยไม่ต้อง concatenate A B C D E เข้าด้วยกันแล้วใช้สูตรข้างบนมั้ยครับ
A B C D E F
0 1 1 0 0 3
1 0 0 0 1 5
1 1 0 1 0 4
snasui
Site Admin
Posts: 31257 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Fri Nov 08, 2013 6:53 am
สามารถปรับสูตรเป็นตามด้านล่างครับ
=Lookup(2,1/(A1:F1=1),Column($A1:$F1)-Column($A1)+1)
Enter > Copy ลงด้านล่าง
Note: Column($A1:$F1)-Column($A1)+1 เป็นสูตรที่ให้ผลลัพธ์เป็นค่าลำดับโดยให้มีความยืดหยุ่น หากมีการแทกคอลัมน์ด้านซ้ายของสูตร ค่าลำดับนี้ก็จะยังถูกต้องอยู่เสมอ