:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#1

Post by pkhardman »

อาจารย์ครับ ขอความช่วยเหลือด่วนๆ ผม lookup ค่าที่ซ้ำกันไม่ได้เพราะมันเจอค่าแรกเป็น 0 แก้ไขได้อย่างไรครับ ผมพยายามทำ index แล้วก็ไม่เจอ

ตามเอกสารที่แนบ ผมต้องการให้ sheet "BO_DE_OUTS(INDX_LNBR)" column "Z" หาค่าจาก column "c" ไปหาlookupค่าใน sheet "Cust" column "R" และนำค่าใน column "K" กลับมาแสดง แต่มันไปเจอบรรทัดบนก่อนที่มีค่าเป็น "0" มันเลยไม่เอาค่าที่ 2 มาครับควรแก้ยังไง


=INDEX(CUST!K:K,AGGREGATE(15,6,ROW(CUST!R:R)/(C2=CUST!$R:$R),COUNTIF(C$2:C2,C2))) สุตรที่ใช้ครับ

=XLOOKUP(@C:C,CUST!R:R,CUST!K:K) อีกสูตรก็ไม่เจอครับ

ปล ฝากดู VBA ให้ด้วยนะครับ ผมอยากลบทั้ง row ที่ column Q ไม่มีค่า แต่ให้เริ่มลบจากบรรทัดที่11 ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#2

Post by puriwutpokin »

Z2=IFERROR(INDEX(CUST!K:K,AGGREGATE(15,6,(ROW(CUST!$R:$R)-ROW(CUST!$R$1)+1)/($C3=CUST!$R:$R)/(0<CUST!K:K),COUNTIF($C$2:$C3,$C3))),) Copy to AA2 and Down
ส่วน VBA ต้องโพสโค้ดว่าติดที่ตรงไหนมาด้วยครับ
:shock: :roll: :D
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#3

Post by pkhardman »

ขอบคุณมากๆครับ อาจารย์
ผมมีข้อสงสัย ทำไมอาจารย์ใช้ C3 ไม่ใช้ C2
($C3=CUST!$R:$R)/(0<CUST!K:K),COUNTIF($C$2:$C3,$C3))),

เหมือนตัวเลขจะข้ามไป1 row ผมแก้เป็น c2 แต่ก็ไม่มั่นใจจะถูกไหม ตัวเลขมันเหมือนกันเยอะมาก

ปล เดี่ยวส่ง vba ให้อีกรอบครับ ฝากด้วยนนะครับ
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#4

Post by puriwutpokin »

แก้ไขครับ
Z2=IFERROR(INDEX(CUST!K:K,AGGREGATE(15,6,(ROW(CUST!$R:$R)-ROW(CUST!$R$1)+1)/($C2=CUST!$R:$R)/(0<CUST!K:K),COUNTIF($C$2:$C2,$C2))),)
คัดลอกมาผิดครับ ขออภัยครับ
ส่วน VBA โคัดปรับตามนี้ดูครับ

Code: Select all

Sub DeleteRowIfCellBlank()
On Error Resume Next
    Dim ws As Worksheet
    Application.Calculation = xlManual
    Set ws = ThisWorkbook.Worksheets("CUST")
    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "p").End(xlUp).Row
    Dim iRow As Long
    For iRow = LastRow To 10 Step -1
        If ws.Cells(iRow, "q").Value = 0 Then
            ws.Rows(iRow).Delete
        End If
    Next iRow
    Application.Calculation = xlAutomatic
End Sub
:shock: :roll: :D
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#5

Post by pkhardman »

ขอบคุณมากครับ อาจารย์ ได้แล้วแหละ แต่ตอนนี่ file ผมมันอืดไปเลย ไม่รู้เป็นที่ สูตร index หรือเปล่าครับ เดี่ยวลองปรับดู ถ้าไม่ได้จะรบกวนอีกรอบนะครับ
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#6

Post by pkhardman »

อาจารครับ สูตร vba OK เลย :cp: :cp: แต่รบกวนอีกสักครั้ง ถ้าผมจะให้มันลบ row ที่ไม่มีคำว่า BB ใน column "Q" เลยทำได้ยังไงครับ
เผอิญตอนนี่มี XDAFFYRA คำนี่ติดอยู่อีก 2 row ไม่อยากได้เลย แฮะๆ ผมแนบ Excel มาให้อีกรอบครับ สำหรับ vba :oops:

ขอบคุณล่วงหน้า.
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#7

Post by puriwutpokin »

ปรับตรงนี้ครับ

Code: Select all

    For iRow = LastRow To 11 Step -1
        If ws.Cells(iRow, "q").Value = 0 Or Left(ws.Cells(iRow, "q").Value, 2) <> "BB" Then
:shock: :roll: :D
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#8

Post by puriwutpokin »

ปรับตรงนี้ครับ

Code: Select all

    For iRow = LastRow To 11 Step -1
        If ws.Cells(iRow, "q").Value = 0 Or Left(ws.Cells(iRow, "q").Value, 2) <> "BB" Then
สำหรับสูตร office 365 จะเร็วขึ้นมานิดหน่อยครับ
Z2=FILTER(CUST!K:K,($C2=CUST!$R:$R)*(0<CUST!K:K)) Copy to AA2

แต่ถ้ามีการจำกัดช่วงไว้ ก็จะเร็วขึ้นมาก แต่ปัญหา การลบบรรทัด ที่อีกชีท
ทำให้ช่วงข้อมูลที่จำกัดไว้นั้น เปลี่ยนแปลง แต่ไม่น่าจะมีประเด็น ถ้าข้อมูลไม่เพิ่มจากเดิมอีก
จำกัดช่วง

Z2=FILTER(CUST!K$11:K$9999,($C2=CUST!$R$11:$R$9999)*(0<CUST!K$11:K$9999))
:shock: :roll: :D
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#9

Post by pkhardman »

:cp: :cp: ขอบคุณครับอาจารย์ ช่วยได้เยอะเลย แต่ปัญหาผมไม่จบไม่สิ้น file ที่มี vba พอผม clear ข้อมูลแล้วทำให้ สูตรนั้น error ไปด้วยครับ มันจะทำให้ กลายเป็น #REF! ไปเลย แบบนี่เราเอาสุตรไปทำเป็น VBA ได้ไหมครับ . :flw:
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#10

Post by puriwutpokin »

ทำได้ ลองทำมาเองดูก่อนครับ โดยเริ่มจากลองบันทึก Macro ดูแล้วเอาโค้ดไปปรับใช้ แล้วติดตรงไหนมาถามได้ในนี้ครับ
:shock: :roll: :D
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#11

Post by pkhardman »

ิอาจารย์ครับผมทำได่้แล้ว เย้ๆ รบกวนดูและปรับสูตรให้หน่อยนะครับ มันจะมีช้าอยู่บ้างตอนที่
1 VBA ที่ 3 Delete Row ช้าหน่อย ปรับไงได้บ้าง
2. รบกวนดู vba ที่ 5 ครับ ถ้ามีจำนวนมากขึ้นแก้ยังไงได้ครับ เช็น เอาจาก "z2:Z9000" ทำแล้วมันขึ้น # calc!
3. ถ้าอยากให้มัน sum row สุดท้าย โดยที่เราแก้สูตรข้อ 2 แล้วทำไงครับ :mrgreen:

อนาคต น่าจะมีรายการอีก เยอะ :(
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#12

Post by puriwutpokin »

ข้อ 1 ถือว่าปกติครับ เพราะ เป็นการ Loop ครับ
ข้อ 2-3 ปรับตามนี้ครับ

Code: Select all

Sub calculator()
Dim LastRow As Integer
 Worksheets("BO_DE_OUTS(INDX_LNBR)").Select
  LastRow = Sheet3.Cells(Sheet3.Rows.Count, "b").End(xlUp).Row - 1
 Sheet3.Cells(2, "z").Resize(LastRow, 2).Formula _
 = "=FILTER(CUST!K$11:K$9999,($C2=CUST!$R$11:$R$9999)*(0<CUST!K$11:K$9999))"
 Sheet3.Cells(2, "ab").Resize(LastRow).Formula = "=SUM(X2:AA2)"
 Sheet3.Cells(2, "ab").Offset(LastRow).FormulaR1C1 = "=SUM(R[-" & LastRow & "]C:R[-1]C)"
End Sub
:shock: :roll: :D
pkhardman
Member
Member
Posts: 19
Joined: Wed Jul 26, 2023 2:41 pm
Excel Ver: 365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#13

Post by pkhardman »

อาจารย์ครับ ผมขออนุญาติแก้ สูตรเป็นแบบนี้ แต่เจอปัญหาว่า มันมีการคำนวนเกินมาด้านล่างอีก 6 row เกิดจากอะไรครับ
vba Module ที่ 7 นะครับ

Sub calculator()
Dim LastRow As Integer
Worksheets("BO_DE_OUTS(INDX_LNBR)").Select
LastRow = Sheet3.Cells(Sheet3.Rows.Count, "b").End(xlUp).Row - 1
Sheet3.Cells(8, "z").Resize(LastRow, 2).Formula _
= "=XLOOKUP(@C3,CUST!C18,CUST!C[-15])"
Sheet3.Cells(8, "AA").Resize(LastRow, 2).Formula _
= "=-XLOOKUP(@C3,CUST!C18,CUST!C[-15])"
Sheet3.Cells(8, "ab").Resize(LastRow).Formula = "=SUM(X8:AA8)"
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: lookup ค่าที่ที่เหมือนกัน โดยที่เจอค่าที่ 1 แต่ไม่เอาจะเอาค่าที่ 2

#14

Post by puriwutpokin »

เปลี่ยนตรงนี้

Code: Select all

  LastRow = Sheet3.Cells(Sheet3.Rows.Count, "b").End(xlUp).Row - 1
้้เป็น

Code: Select all

  LastRow = Sheet3.Cells(Sheet3.Rows.Count, "b").End(xlUp).Row - 7
:shock: :roll: :D
Post Reply