: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

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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: กำหนดเงือนไขใน VBA

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

#19

by Tawat » Fri Jun 29, 2012 6:58 am

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

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

#18

by snasui » Thu Jun 28, 2012 7:28 pm

: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

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

#17

by Tawat » Thu Jun 28, 2012 7:01 am

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

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

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

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

รบกวนแนะนำด้วยนะครับ

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

#16

by snasui » Wed Jun 27, 2012 6:36 pm

:D หากสร้าง Report ด้วย การบันทึก Macro เพื่อสรุปข้อมูลด้วย PivotTable จากนั้นใช้ Code เพื่อ Copy ลักษณะของตารางมาใช้และปรับ Format ไม่ทราบว่าหัวหน้าติดประเด็นอะไรหรือไม่ครับ การเขียน Code เพื่อทำในสิ่งที่ความสามารถปกติทำได้อยู่แล้วผมเห็นว่าสิ้นเปลืองเวลาโดยใช่เหตุครับ

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

#15

by Tawat » Wed Jun 27, 2012 11:02 am

ล่าสุดครับ
Attachments
test2.xlsm
(20.84 KiB) Downloaded 11 times

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

#14

by Tawat » Wed Jun 27, 2012 8:26 am

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

รบกวนอาจารย์ช่วยแนะนำด้วยครับ
Attachments
test2.xlsm
(20.85 KiB) Downloaded 1 time

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

#13

by Tawat » Wed Jun 27, 2012 7:40 am

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

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

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

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

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

ก็ไม่ได้แล้ว ไม่รู้จะเริ่มต้นยังไงครับ

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

#12

by snasui » Tue Jun 26, 2012 6:29 pm

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

คำว่า Total ตามภาพด้านล่างจำเป็นต้องมีหรือไม่ครับ ถ้าจำเป็น ต้องการไว้รวมค่าใด เนื่องจากยอด Total คือค่าที่ทำวงกลมเอาไว้แล้วครับ
Attachments
ConvertReport.jpg
ConvertReport.jpg (60.4 KiB) Viewed 93 times

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

#11

by Tawat » Tue Jun 26, 2012 8:01 am

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

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

เลยประกาศตัวแปรไว้เพรียบเลย
Attachments
test2.xlsm
(19.61 KiB) Downloaded 5 times

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

#10

by Tawat » Tue Jun 26, 2012 7:02 am

ครับผม

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

#9

by snasui » Mon Jun 25, 2012 7:48 pm

:D แนบ Code มาในไฟล์ด้วยครับจะได้ช่วยตรวจสอบให้ได้ ไฟล์ที่แนบ Code มาได้นั้นจะต้องมีนามสกุลเป็น .xlsm สำหรับ Excel 2007 ขึ้นไปและจะมีนามสกุลเป็น .xls หากว่าเป็น Excel 2003 ลงไปครับ

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

#8

by Tawat » Mon Jun 25, 2012 1:22 pm

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

ของข้อมูลที่ต้องการทำ
Attachments
test2.xlsx
(17.13 KiB) Downloaded 5 times

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

#7

by Tawat » Mon Jun 25, 2012 1:09 pm

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

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

#6

by bank9597 » Mon Jun 25, 2012 12:45 pm

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))
คัดลอกไปทางขวามือ แล้วลงล่างพร้อมกัน
ต้องเชียนโค๊ดมาก่อนครับ ติดส่วนไหน จะได้ปรับไปเรื่อยๆ

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

#5

by Tawat » Mon Jun 25, 2012 12:39 pm

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

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

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

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

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

แต่ข้อมูลที่แท้จริงมีเยอะมากๆ ครับ

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

#4

by joo » Mon Jun 25, 2012 12:09 pm

: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 และลงล่าง
Attachments
Test1.xlsx
(10.79 KiB) Downloaded 2 times

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

#3

by ChoBkuN » Mon Jun 25, 2012 12:05 pm

อีกซักสูตร นะครับ
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)
คัดลอกไปทางขวามือ แล้วลงล่าง

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

#2

by bank9597 » Mon Jun 25, 2012 11:51 am

: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))
คัดลอกไปทางขวามือ แล้วลงล่างพร้อมกัน
Attachments
Test (8).xlsx
(11.26 KiB) Downloaded 6 times

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

#1

by Tawat » Mon Jun 25, 2012 10:10 am

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

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

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

รบกวนสอบถามว่ามีสูตรไหนที่พอจะทำได้ง่ายๆบ้างครับ
Attachments
Test.xlsx
(10.22 KiB) Downloaded 8 times

Top