: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

VBA IF OR หลาย Condition

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

VBA IF OR หลาย Condition

#1

Post by a6block5 »

สวัสดีครับทุกท่าน ผมกำลังฝึกเขียน VBA แต่พยายามเขียนแล้วมันยากกว่า Excel ธรรมดาเยอะมาก อยากขอคำชี้แนะจากพี่ๆทุกท่านในนี้หน่อยครับ

สูตรปกติใน excel

ค่า steelWt แสดงใน column L

Excel:

Code: Select all

IF(OR(D9="Pfizer",D9="Modena",D9="Sputnik-v",D9="Aztrazenegra"),PI()*7850*(E9/1000+2*G9/1000)*G9/1000*F9/1000*J9," #N/A") 


ปัญหาคือ ผมต้องการเขียน VBA , IF OR เหมือน excel ปกติ แต่ผมเขียนแล้วมันขึ้น Error ครับ ไม่แน่ใจจะเขียนยังไงให้มันเช็ค column D ว่าเป็นอะไร จากนั้นก็คำนวณให้ครับ

VBA:

Code: Select all

 Sub SteelWt_Calc()



    If Range("d8") = "Pfizer" or "Modena" or "Sputnik-v or "Sinovac" Then
    
    Range("l8").Value = WorksheetFunction.Pi * (Range("e8").Value / 1000 + 2 * Range("g8").Value / 1000) * (Range("g8").Value / 1000) * 7850 * (Range("f8").Value / 1000) * Range("j8").Value
    
    Else
    Range("l8").Value = WorksheetFunction.Pi * 1
    
      
    End If
End Sub 
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: VBA IF OR หลาย Condition

#2

Post by puriwutpokin »

ปรับส่วนนี้ครับ

Code: Select all

If Range("d8") = "Pfizer" Or Range("d8") = "Modena" Or Range("d8") = "Sputnik-v" Or Range("d8") = "Sinovac" Then
:shock: :roll: :D
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA IF OR หลาย Condition

#3

Post by a6block5 »

puriwutpokin wrote: Thu May 20, 2021 3:25 pm ปรับส่วนนี้ครับ

Code: Select all

If Range("d8") = "Pfizer" Or Range("d8") = "Modena" Or Range("d8") = "Sputnik-v" Or Range("d8") = "Sinovac" Then
=====================================================================================================
ขอบคุณที่ชี้แนะครับ แต่มันขึ้นแค่แถวเดียว คือ ผมอยากให้เราใส่ค่า Column D เรียงลงมาเรื่อยๆ แล้วให้มันเช็คว่าเป็นประเภทไหน จากนั้นก็คำนวณตามประเภทที่เรากรอกใน coulumn D เหมือนเรากรอก excel แล้วกดลากสูตรลงมาทีเดียว แล้วมันคำนวนให้หนะครับ

คือผมเขียนให้มัน รันค่าเป็น range ไม่เป็นครับ

Code: Select all

 
Sub SteelWt_Calc()

    If Range("d8:d") = "Pfizer" Or Range("d8") = "Modena" Or Range("d8") = "Sputnik-v" Or Range("d8") = "Sinovac" Then
    
    Range("l8:l").Value = WorksheetFunction.Pi * (Range("e8").Value / 1000 + 2 * Range("g8").Value / 1000) * (Range("g8").Value / 1000) * 7850 * (Range("f8").Value / 1000) * Range("j8").Value
    
    Else
    Range("l8:l").Value = WorksheetFunction.Pi * 1
      
    End If
End Sub
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: VBA IF OR หลาย Condition

#4

Post by puriwutpokin »

ปรับตามนี้ครับ

Code: Select all

Sub SteelWt_Calc()
Dim i As Integer
For i = 8 To 14
Select Case Cells(i, 4).Value
    Case "Pfizer", "Modena", "Sputnik-v", "Sinovac"
        Cells(i, 12).Value = WorksheetFunction.Pi * (Cells(i, 5).Value / 1000 + 2 * Cells(i, 7).Value / 1000) * _
        (Cells(i, 7).Value / 1000) * 7850 * (Cells(i, 6).Value / 1000) * Cells(i, 10).Value
    Case Else
       Cells(i, 12).Value = WorksheetFunction.Pi * 1
End Select
   Next i
End Sub
:shock: :roll: :D
User avatar
Bo_ry
Gold
Gold
Posts: 1245
Joined: Sun Aug 12, 2018 12:11 am
Excel Ver: MS 365
Contact:

Re: VBA IF OR หลาย Condition

#5

Post by Bo_ry »

Code: Select all

Sub SteelWt_Calc()
With Range("D8", Cells(Rows.Count, 4).End(xlUp))
    .Offset(, 8).Formula = "=PI()*IF(MATCH(D8,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Parcetamol"",""Sinovac""},)>4,1,7850*(E8+2*G8)*G8*F8*J8/10^9)"
    .Value2 = .Value2  'ถ้าจะเอาสูตร ก็ลบบรรทัดนี้ออก
End With
End Sub
You do not have the required permissions to view the files attached to this post.
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA IF OR หลาย Condition

#6

Post by a6block5 »

ขอบคุณทั้ง 2 ท่านมากๆครับ ทั้งคุณ puriwutpokin และคุณ Bo_ry สูตรใช้งานได้ดีและให้ความรู้อันเป็นประโยชน์มากเครับ แต่ของคุณ Bo_ry จะตรงกับความต้องการของผมเลยครับ คือ สูตรรันตามแถวที่เราเพิ่มเรื่อยๆ ยังไงก็ของคุณทั้งสองท่านมากๆนะครับที่ช่วยชี้แนะ


มีคำถามเพิ่มเติมครับ ก่อนหน้านี้ผมลองเขียนสูตรตามที่ท่านผู้รู้ในนี้ชี้แนะไปบ้างแล้ว แต่ยังทำไม่ได้ อยากจะขอคำชี้แนะเพิ่มเติม ครับ ตาม sheet excel rev.2 ที่แนบมา

1) Column L : SteelWt_Calc ตาม Code ที่คุณ Bo_ry แนะนำ ถ้าผมต้องการเขียน if or เพิ่มเติม ไปอีก 5-7 เงื่อนไข แล้วใช้สูตรคำนวนเปลี่ยนไปต่างไป ผมสามารถเพิ่มชนิดและเงื่อนไข ภายใต้ " " ได้เลยใช่มั้ยครับ เช่น ถ้านอกเหนือจากชนิดวัคซีนที่มี เป็น ชนิดใหม่ คือ A1, A2, A2 ให้คำนวณเป็น Column E x Column F (Size x Length)

Code: Select all

 
    .Offset(, 8).Formula = "=PI()*IF(MATCH(D8,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Paracetamol"",""Sinovac""},)>4,1,7850*(E8+2*G8)*G8*F8*J8/10^9)"
    .Value2 = .Value2  '???????????? ????????????????
 


2) Code ด้านบนผมไม่เข้าใจตรง หลังวงเล็บ ที่เขียนว่า >4, 1 หมายถึงอะไรครับ ช่วยกรุณาอธิบายเพิ่มเติมจะได้มั้ยครับ

3) .Vaue2 = .Value2 หมายถึงอะไรครับ ส่วนนี้ยัง งง นิดๆครับผม

4) ผมต้องการ Vlookup ค่าใน Column I : MatCode (สีเหลือง) ได้จากการ concat "D" & "K" ไป sheet Unicost เพื่อให้แสดงค่าใน Column L, Column M (สีชมพู) แต่ผมไม่ต้องการให้มี Matcode ใน column I มันเปลืองเนื้อที่ แต่อยากให้ Vlookup มัน lookup ค่า D&K แล้วแสดงผลใน M:N เลย ต้องเขียนสูตรยังไงครับ ตอนนี้ผมทำได้แค่ เขียนสูตรให้มัน concat แล้ว vlookup อีกที

5) คอลัมน์ M:N ทำไม Vlookup แล้วจำนวนแถวมันเกินครับ ที่แสดงเป็น #N/A

ุ6) Column L ถ้าต้องการให้แสดงค่าคำนวณเป็นตัวเลข แต่ซ่อนสูตรคำนวณไม่ให้โชว์ ทำได้มั้ยครับ

7) ถ้าให้มันคำนวนเองเลย โดยที่ไม่ต้องมากด F8 หรือ Button ต้องทำยังไงครับ
You do not have the required permissions to view the files attached to this post.
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

VBA IF OR หลาย Condition

#7

Post by a6block5 »

จากกระทู้นี้ https://snasui.com/viewtopic.php?f=3&t=18322

ผมลองทำตามคุณ Puriwatpokin และ คุณ Bo_ry แนะนำ แต่สะดุดและติดตรงสูตรของคุณ Bo_ry

Code: Select all

 Sub SteelWt_Calc()
With Range("D8", Cells(Rows.Count, 4).End(xlUp))
    .Offset(, 8).Formula = "=PI()*IF(MATCH(D8,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Paracetamol"",""Sinovac"",""Aspirin""},)>1,(g8*2),7850*(E8+2*G8)*G8*F8*J8/10^9)"
    .Value2 = .Value2  '???????????? ????????????????
End With
End Sub
ถ้าผมต้องการ If OR หลายเงื่อนไข ตามที่คุณ Bo_ry แนะนำ
1. If D = Pfizer , Pi * 7850*(E8+2*G8)*G8*F8*J8/10^9
2. If D = Modena, Sputnik-v, Aztrazenegra, Paracetamol, Sinivac, Pi * (G8 * 2)

3. If D = Aspirin, Pi() * 10

ผมอยากสร้างเงื่อนไขเพิ่มเติม คล้ายๆ IF OR 2 กรณีแรกผมพอเข้าใจแล้ว แล้วถ้าอยากเพิ่มเงื่อนไข 3, 4 , 5... เหมือน IF OR ผมต้องเพิ่ม คำสั่งยังไงใน VBA ครับ ขอคำชี้แนะพี่ๆทุกท่านด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
Bo_ry
Gold
Gold
Posts: 1245
Joined: Sun Aug 12, 2018 12:11 am
Excel Ver: MS 365
Contact:

Re: VBA IF OR หลาย Condition

#8

Post by Bo_ry »

สำหรับคลิก
Module

Code: Select all

Sub SteelWt_Calc()
With Range("D8", Cells(Rows.Count, 4).End(xlUp))
    .Offset(, 8).Formula = "=PI()*J8*CHOOSE(MATCH(MATCH(D8,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Paracetamol"",""Sinovac"",""Aspirin""},),{0,2,7}),7850*(E8+2*G8)*G8*F8/10^9,G8*2,10)"
    .Offset(, 8).Value2 = .Offset(, 8).Value2
End With
End Sub
สำหรับใส่ค่าที่ Column J
ที่ SHeet Tracking

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 10 Then
    Target(1, 3).FormulaR1C1 = "=PI()*RC10*CHOOSE(MATCH(MATCH(RC4,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Paracetamol"",""Sinovac"",""Aspirin""},),{0,2,7}),7850*(RC5+2*RC7)*RC7*RC6/10^9,RC7*2,10)"
End If
End Sub
Column P, Q ,R, S ทำสูตรแยกแต่ละส่วนออกมาแล้ว ลองทำความเข้าใจดูนะ
You do not have the required permissions to view the files attached to this post.
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA IF OR หลาย Condition

#9

Post by a6block5 »

ขอบคุณคุณ Bo_ry มากครับ สุดยอดไปเลยครับ ผมไล่แกะสูตรทำความเข้าใจแล้ว ถึงบางอ้อเลย ขอบคุณมากๆอีกครั้งครับ

มีคำถามเพิ่มเติม อยากให้ช่วยแนะนำอีกนิดครับ

ผม Concat ข้อมูล D & K เพื่อให้แสดงใน Column I (MatCode) เพื่อ Vlookup หาค่า UnitCost (M,N,O) โดย link ไปที่ Sheet UnitCost

ถ้าผมต้องการให้มัน Concat D&K แล้ว Vlookup หาค่า UnitCost เลย โดยที่ผมไม่ต้องสร้าง Column I (Concat D&K) ผมควรเขียน Code ยังไงดีครับ
You do not have the required permissions to view the files attached to this post.
User avatar
Bo_ry
Gold
Gold
Posts: 1245
Joined: Sun Aug 12, 2018 12:11 am
Excel Ver: MS 365
Contact:

Re: VBA IF OR หลาย Condition

#10

Post by Bo_ry »

แก้ K แล้วเติม M N O

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 10 Then
    Target(1, 3).FormulaR1C1 = "=PI()*RC10*CHOOSE(MATCH(MATCH(RC4,{""Pfizer"",""Modena"",""Sputnik-v"",""Aztrazenegra"",""Paracetamol"",""Sinovac"",""Aspirin""},),{0,2,7}),7850*(RC5+2*RC7)*RC7*RC6/10^9,RC7*2,10)"
ElseIf Target.Column = 11 Then
    Dim c&
    For c = 0 To 2
        Range("M" & Target.Row).Offset(, c) = Application.SumIfs([UnitCost!E4:E999].Offset(, c), [UnitCost!B4:B999], Range("D" & Target.Row), [UnitCost!C4:C999], Range("K" & Target.Row))
    Next
End If
End Sub
You do not have the required permissions to view the files attached to this post.
Post Reply