: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

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

กำหนดเงือนไขใน VBA

#1

Post by Tawat »

อาจารย์ครับ รบกวนสอบถามเกี่ยวกับการกำหนดเงื่อนไข ซ้อนๆ กัน

ตามตัวอย่างที่แนบมาให้ครับ

โดยผมใช้สูตร if แต่ผมกำหนดเงื่อนไขซ้ำๆลงไปอีกแล้ว งง ครับ

รบกวนสอบถามว่ามีสูตรไหนที่พอจะทำได้ง่ายๆบ้างครับ
You do not have the required permissions to view the files attached to this post.
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: กำหนดเงือนไขใน VBA

#2

Post by bank9597 »

:D หากจะใช้ VBA จำเป็นต้องเขียนโค๊ดมาเองก่อนเสมอครับ

ส่วนปัญหาดังกล่าว สามารถใช้สูตรได้ครับ
ที่เซลล์ I6 คีย์ =SUMIFS($E$5:$E$12,$B$5:$B$12,$H6,$C$5:$C$12,I$5,$D$5:$D$12,LOOKUP(CHAR(255),$I$4:I$4))
คัดลอกไปทางขวามือ แล้วลงล่างพร้อมกัน
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: กำหนดเงือนไขใน VBA

#3

Post by ChoBkuN »

อีกซักสูตร นะครับ
I6 key =SUMPRODUCT(--($H6=$B$5:$B$12),--(I$5=$C$5:$C$12),--(IF(I$4="",H$4,I$4)=$D$5:$D$12),$E$5:$E$12)
คัดลอกไปทางขวามือ แล้วลงล่าง
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: กำหนดเงือนไขใน VBA

#4

Post by joo »

:D วิธีใช้สูตรลองอีกวิธีครับ ที่ I6 คีย์ =SUMPRODUCT(--($D$5:$D$12=I$4),--($B$5:$B$12=$H6),--($C$5:$C$12=I$5),$E$5:$E$12)
Copy ไป J6 และลงล่าง
ที่ K6 คีย์ =SUMPRODUCT(--($D$5:$D$12=$K$4),--($B$5:$B$12=$H6),--($C$5:$C$12=K$5),$E$5:$E$12) Copy ไป L6 และลงล่าง
You do not have the required permissions to view the files attached to this post.
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#5

Post by Tawat »

ครับ เนื่องจากฟังชั่นนี้ ผมสามารถทำใน Privote Table ได้ครับ

แต่เนื่องจากหัวหน้าบอกว่าให้ทำเป็น VBA ก่อน เพราะอยากให้พัฒนาการทำ VBA

ซึ่งผมสามารถดึงข้อมูล สินค้า ลูกค้า พร้อมกับหน่วยได้ (กำหนดเป็น array)

แต่ไม่สามารถเอามาลงให้เป็นหน้าตาดังตัวอย่างได้ครับ

โดยตัวอย่างนี้ผม create มาเอง

แต่ข้อมูลที่แท้จริงมีเยอะมากๆ ครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: กำหนดเงือนไขใน VBA

#6

Post by bank9597 »

bank9597 wrote::D หากจะใช้ VBA จำเป็นต้องเขียนโค๊ดมาเองก่อนเสมอครับ

ส่วนปัญหาดังกล่าว สามารถใช้สูตรได้ครับ
ที่เซลล์ I6 คีย์ =SUMIFS($E$5:$E$12,$B$5:$B$12,$H6,$C$5:$C$12,I$5,$D$5:$D$12,LOOKUP(CHAR(255),$I$4:I$4))
คัดลอกไปทางขวามือ แล้วลงล่างพร้อมกัน
ต้องเชียนโค๊ดมาก่อนครับ ติดส่วนไหน จะได้ปรับไปเรื่อยๆ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#7

Post by Tawat »

Code คร่าวๆที่ผมทำไว้นะครับ

ประมาณนี้

ส่วนตัวข้อมูลผมต้องขอแก้ไขก่อนนะครับ

เพราะข้อมูลจริงๆ ผม ไม่สามารถเอามาเปิดเผยได้นะครับ

เดวผมขอจำลองข้อมูลคร่าวๆ ไว้แล้วจะแนบไฟล์มาให้อีกทีนะครับ



Sub Test()
num1 = 4
num2 = 0
num4 = 0
num5 = 0
weigth2 = 0
weigth = 0
code1 = "SS"
customer1 = "ss"
status = "ss"


Sheets("sheet1)").Select
Range("A" & num1).Select


Do Until ActiveCell.Value = Empty
code2 = ActiveCell.Value
customer2 = ActiveCell.Offset(0, 1)
ActiveCell.Offset(1, 0).Select



If code1 = code2 Then
codearray(num4) = ActiveCell.Value
Else
weigtharray2(num4) = weigth
customerarray(num4) = customer2
weigth = ActiveCell.Offset(-1, 3)
codearray(num4) = code2
num4 = num4 + 1
End If


If code1 = code2 And customer1 = customer2 Then
customerarray(num5) = ActiveCell.Offset(-1, 1).Value
weigth = weigth + ActiveCell.Offset(-1, 3).Value
Else
customerarray(num5) = customer2
num5 = num5 + 1
End If


code1 = code2
customer1 = customer2
Loop
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#8

Post by Tawat »

สำหรับตัวอย่างคร่าวๆนะครับ

ของข้อมูลที่ต้องการทำ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: กำหนดเงือนไขใน VBA

#9

Post by snasui »

:D แนบ Code มาในไฟล์ด้วยครับจะได้ช่วยตรวจสอบให้ได้ ไฟล์ที่แนบ Code มาได้นั้นจะต้องมีนามสกุลเป็น .xlsm สำหรับ Excel 2007 ขึ้นไปและจะมีนามสกุลเป็น .xls หากว่าเป็น Excel 2003 ลงไปครับ
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#10

Post by Tawat »

ครับผม
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#11

Post by Tawat »

ประมาณนี้นะครับ

ผมทำไว้คร่าวๆ แต่ยังงง กับการกำหนดเงื่อนไขซ้อนกันหลายๆเงื่อนไข

เลยประกาศตัวแปรไว้เพรียบเลย
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: กำหนดเงือนไขใน VBA

#12

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปนะครับ

คำว่า Total ตามภาพด้านล่างจำเป็นต้องมีหรือไม่ครับ ถ้าจำเป็น ต้องการไว้รวมค่าใด เนื่องจากยอด Total คือค่าที่ทำวงกลมเอาไว้แล้วครับ
You do not have the required permissions to view the files attached to this post.
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#13

Post by Tawat »

อาจารย์ครับ เดี๋ยวผมแนบไฟล์ไปให้อีกรอบนะครับ

แบบว่าต้องการเอาไว้ด้านล่างสุด เพื่อ Sum ผมรวมทั้งหมดแค่ค่าเดียวครับ

ผมลองทำสูตรขั้นตอนแรกคือเอา code ที่ซ้ำกันทั้งหมดให้เหลือแค่ Code เดียว

แล้วก็รวม Weigth ที่เป็น code เดียวกันได้แล้วครับ พอจะมาแยก Status และ Customer อีก

ผมเริ่มสับสนกับมันแล้ว เพราะมันต้องแยก Weigth เพิ่มอีก แล้วข้อมูลที่แยกไว้ไปลองอีก sheet นึง

ก็ไม่ได้แล้ว ไม่รู้จะเริ่มต้นยังไงครับ
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#14

Post by Tawat »

จากที่ทำนะครับ Weigtharray() ของตัวสุดท้ายจะไม่ขึ้นครับ

รบกวนอาจารย์ช่วยแนะนำด้วยครับ
You do not have the required permissions to view the files attached to this post.
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#15

Post by Tawat »

ล่าสุดครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: กำหนดเงือนไขใน VBA

#16

Post by snasui »

:D หากสร้าง Report ด้วย การบันทึก Macro เพื่อสรุปข้อมูลด้วย PivotTable จากนั้นใช้ Code เพื่อ Copy ลักษณะของตารางมาใช้และปรับ Format ไม่ทราบว่าหัวหน้าติดประเด็นอะไรหรือไม่ครับ การเขียน Code เพื่อทำในสิ่งที่ความสามารถปกติทำได้อยู่แล้วผมเห็นว่าสิ้นเปลืองเวลาโดยใช่เหตุครับ
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#17

Post by Tawat »

อ้อครับ ที่จริงสามารถทำจาก Privot table ได้ครับ

แต่หัวหน้าผมอยากให้ผมเรียนรู้เกี่ยวกับการทำ VBA เพื่อจะใช้ในโอกาสต่างๆครับ

เป็นงานที่ไม่เร่งอะไรครับ เพราะ Report ผมทำ Privot table ส่งไปแล้ว

และผมก็อยากจะเรียนรู้กับการเขียน code VBA ด้วยครับ

รบกวนแนะนำด้วยนะครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: กำหนดเงือนไขใน VBA

#18

Post by snasui »

:D เพื่อให้เพื่อน ๆ ได้ใช้ศึกษาไปด้วย ผมเขียน Code ตัวอย่างตามด้านล่าง ซึ่งไม่รวมการจัดรูปแบบครับ

Code: Select all

Sub Test0()
    Dim rAll As Range, r As Range, rBlanks As Range
    Dim i As Integer, rCus As Range, rCod As Range
    Application.ScreenUpdating = False
    With Sheets("Sheet2")
        .Range("A:F").Clear
        .Range("E1") = "x"
        Sheets("Sheet1").Range("B2").CurrentRegion.Copy .Range("A1")
        Set rAll = .Range("A2", .Range("A2").End(xlDown))
        For Each r In rAll
            r.Offset(0, 4) = r & r.Offset(0, 1) & r.Offset(0, 2)
        Next r
        Set rAll = rAll.Offset(0, 4)
        For Each r In rAll
            r.Offset(0, 1) = Application.SumIf(rAll, r, rAll.Offset(0, -1))
        Next r
        rAll.Offset(0, -1) = rAll.Offset(0, 1).Value
        .Range("A1").CurrentRegion.RemoveDuplicates Columns:=5
        Set rAll = rAll.Offset(0, -4)
        For i = rAll.Count To 1 Step -1
            If rAll(i).Row > 2 And rAll(i) <> rAll(i).Offset(-1, 0) Then
                rAll(i).EntireRow.Insert
            End If
        Next i
        Set rBlanks = .Range("A2", .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)) _
            .SpecialCells(xlBlanks)
        For Each r In rBlanks
            r = "Code " & r.Offset(-1, 0) & " Total"
            r.Offset(0, 3) = Application.SumIf(rAll, r.Offset(-1, 0), rAll.Offset(0, 3))
        Next r
        For Each r In rAll
            If r.Offset(0, 1) <> "" Then r.Offset(0, 4) = r & r.Offset(0, 1)
        Next r
        Set rAll = rAll.Offset(0, 4)
        i = 1
        For Each r In rAll
            Set rCus = .Range("E2").Resize(i)
            Set rCod = .Range("A2").Resize(i)
            If Application.CountIf(rCus, r) > 1 Then r.Offset(0, -3) = ""
            If Application.CountIf(rCod, r.Offset(0, -4)) > 1 Then r.Offset(0, -4) = ""
            i = i + 1
        Next r
        .Range("E:F").Clear
    End With
    Application.ScreenUpdating = True
End Sub
Tawat
Member
Member
Posts: 30
Joined: Mon Jun 25, 2012 9:49 am

Re: กำหนดเงือนไขใน VBA

#19

Post by Tawat »

ขอบพระคุณมากครับ อาจารย์
Post Reply