Page 4 of 5

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Mon Jun 24, 2013 3:57 pm
by snasui
:D Code ที่เขียนมายังสะเปะสะปะอยู่มากครับ การกำหนดค่าให้กับตัวแปร ควรกำหนดค่าใดค่าหนึ่งให้กับตัวแปรหนึ่ง ๆ เท่านั้นครับ

เช่น rall เมื่อกำหนดให้เท่ากับ .Range("C2") แล้ว จะไม่กำหนดตัวแปร rall ให้เท่ากับ .Range("F2") อีก ยกเว้นทำงานตามหน้าที่นั้น ๆ จบแล้ว จะกำหนดตัวแปรให้ทำงานตามหน้าที่ใหม่ เช่นนี้จึงสามารถทำได้

สิ่งที่กำลังจะทำอยู่นี้ไม่ง่ายครับ หากยังไม่เข้าใจ VBA ผมไม่แนะนำให้ใช้ VBA ครับ ควรใช้ตามที่ตัวเองสามารถเข้าใจได้ ตามที่ถามตอบกันมานั้น ผมเห็นว่ายังขาดความรู้ความเข้าใจใน VBA ที่เป็นพื้นฐานอีกมาก ควรศึกษาและทำตามคู่มือมาเป็นลำดับก่อน หากจำเป็นต้องใช้ ควรให้ผู้ที่เขียนเป็นเขียนให้ก่อน ติดตรงไหนแล้วค่อยถามกันครับ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Mon Jun 24, 2013 6:32 pm
by suka
ขอบคุณค่ะอาจารย์ ไว้ค่อยๆหาวิธีค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jun 26, 2013 1:19 pm
by suka
suka wrote:ขอรบกวนเรื่องปรับสูตรเพิ่มค่ะ

ไฟล์แนบที่ชีท Form จากเดิมเลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1

ให้สูตรเรียกเพิ่มเป็น

เลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1 และเลือกกลุ่มเอกสารที่เซลล์ E1 ค่ะ

ขอบคุณค่ะ
ขอรบกวนอาจารย์ และ ท่านผู้รู้ช่วยเรื่องการดึงข้อมูลตามเงื่อนไขด้านบนค่ะ
ตัวอย่างจากไฟล์แนบที่ชีท Database คอลัมน์ C ได้สร้างรหัสขึ้นใหม่ เพื่อจะนำมาดึงข้อมูลตามเงื่อนไขที่ต้องการค่ะ
ขอบคุณค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jun 26, 2013 2:49 pm
by snasui
:D ลองตามนี้ครับ
  1. ที่ชีท Database เซลล์ C2 เปลี่ยนสูตรเป็น
    =G2&F2&D2
    Enter > Copy ลงด้านล่าง
  2. ที่ชีท Form เซลล์ A2 ปรับสูตรเป็น
    =SUMPRODUCT(--($G$1&1&$E$1=Database!$C$2:$C$65536),--($B$1<=Database!$B$2:$B$65536),--($D$1>=Database!$B$2:$B$65536),--(Database!$AD$2:$AD$65536=""))
    Enter
  3. ที่ชีท Form เซลล์ A3 ปรับสูตรเป็น
    =IF(ROWS(A$3:A3)>$A$2,"",SMALL(IF($G$1&1&$E$1=Database!$C$2:$C$1158,IF(Form!$B$1<=Database!$B$2:$B$1158,IF(Form!$D$1>=Database!$B$2:$B$1158,IF(Database!$AD$2:$AD$1158="",ROW(Database!$B$2:$B$1158)-ROW(Database!$B$2)+1)))),ROWS(B$3:B3)))
    Ctrl+Shift+Enter > Copy ลงด้านล่าง

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jun 26, 2013 3:09 pm
by suka
:thup: ขอบพระคุณค่ะอาจารย์ ได้ตรงตามที่ต้องการแล้วค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jun 26, 2013 8:19 pm
by suka
ขอรบกวนอาจารย์อีกรอบค่ะ
เรื่องปรับสูตรที่ชีท Form เซลล์ E1 หากว่างหมายถึงให้เรียกเอกสารที่ชีท Database คอลัมน์ AD ว่างมาทั้งหมดค่ะ
ตามตัวอย่างไฟล์แนบถ้าคอลัมน์ AD ชีท Database ว่างให้ดึงมาทั้งหมดจะมี 5 รายการค่ะ
ขอบคุณค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jun 26, 2013 8:43 pm
by snasui
:D ควรเพิ่มเงื่อนไขในข้อ 1 ด้านบนให้เชื่อมคอลัมน์ AD เข้ามาด้วย นอกจากนี้ในชีท Form จะต้องเพิ่มเซลล์ทีระบุว่าให้นำคอลัมน์ AD มาเป็นเงื่อนไข

เช่นหากเซลล์นั้นเป็น Y แสดงว่าหากคอลัมน์ AD เป็น Y ก็ให้นำมาแสดง หากเซลล์นั้นเป็นค่าว่างก็จะหมายถึงหากคอลัมน์ AD เป็นค่าว่างก็ให้นำมาแสดงครับ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 9:38 am
by suka
ขอรบกวนอาจารย์ค่ะ ชีท Database ได้เชื่อมข้อมูลตามข้อ 1 แล้วใช้เซลล์ E3 ชีท Form ระบุว่าให้นำคอลัมน์ AD มาเป็นเงื่อนไขค่ะ

ใส่สูตรที่ชีท Form เซลล์ E3

=IF(ISNUMBER(B3),LOOKUP(2,1/(Database!$AD$2:$AD$1157=$B3),Database!$AD$2:$AD$1157))

ที่ชีท Form เซลล์ E3 แสดงเป็นแบบนี้ #N/A ค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 9:48 am
by snasui
:D แนบไฟล์ตัวอย่างที่ได้ Update แล้วมาด้วยครับ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 10:36 am
by suka
อาจารย์คะ แนบไฟล์ตัวอย่างค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 10:53 am
by snasui
:D ในชีท Form เพิ่มเซลล์ I1 เข้ามาเป็นเงื่อนไข หากกรอก Y แสดงว่าในชีท Database คอลัมน์ AD เป็น Y จึงจะนำข้อมูลมาแสดง หากว่างเปล่า แสดงว่าในชีท Database คอลัมน์ AD เป็น Y จึงจะนำข้อมูลมาแสดง

จากนั้นปรับสูตรในชีท Form ดังนี้
  1. ที่ A2 ปรับสูตรเป็น
    =SUMPRODUCT(--($G$1&1&$E$1&$I$1=Database!$C$2:$C$65536),--($B$1<=Database!$B$2:$B$65536),--($D$1>=Database!$B$2:$B$65536))
    Enter
  2. ที่ A3 ปรับสูตรเป็น
    =IF(ROWS(A$3:A3)>$A$2,"",SMALL(IF($G$1&1&$E$1&$I$1=Database!$C$2:$C$1158,IF(Form!$B$1<=Database!$B$2:$B$1158,IF(Form!$D$1>=Database!$B$2:$B$1158,ROW(Database!$B$2:$B$1158)-ROW(Database!$B$2)+1))),ROWS(B$3:B3)))
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
สำหรับคอลัมน์ E ของชีท Form เข้าใจสูตรนั้นหรือไม่ว่าใช้ทำอะไรครับ :?:

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 11:43 am
by suka
:thup: ขอบพระคุณอาจารย์ค่ะ ได้ตรงตามต้องการแล้วค่ะ

ขอรบกวนอาจารย์เพิ่มอีกหนึ่งเงื่อนไขค่ะ
ชีท Form เซลล์ E1 ถ้าระบุชนิดเอกสารให้แสดงรายการเอกสารตามที่ระบุ
หากไม่ระบุชนิดเอกสารให้แสดงรายการเอกสารทั้งหมดตามรหัสร้านค้าที่เลือกค่ะ
ขอบพระคุณค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 11:52 am
by snasui
:shock: สูตรที่เขียนมาแล้ว ไม่สามารถรองรับกับเงื่อนไขที่เพิ่มมาใหม่

เนื่องจากเดิมเป็นการดึงข้อมูลโดยใช้ E1 เป็นเงื่อนไขอยู่แล้ว ไม่ว่าจะไม่ว่างหรือว่างก็จะดึงมาตามนั้น หากบอกว่าถ้าว่างให้ดึงมาทั้งหมดจะขัดแย้งกับสูตรเดิมที่เขียนเอาไว้แล้ว หากจะทำต้องเขียนสูตรซ้อนเข้าไปซึ่งสูตรยาวมากและจะใช้ไม่ได้กับ Excel 2003 ครับ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 12:06 pm
by suka
ค่ะอาจารย์

หากเดิมใช้ Excel 2003 แล้วเปลี่ยนมาใช้ Excel 2007 จะมีผลต่อสูตรไฟล์เดิมไหมค่ะ

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

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 12:10 pm
by snasui
:D Excel Version ที่สูงกว่าย่อมรองรับ Excel Version ที่ต่ำกว่าเสมอ ดังนั้น ไม่ว่า Excel 2003 ใช้สูตรใดก็ตาม Excel รุ่นที่สูงว่าสามารถนำมาใช้ได้ครับ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jun 27, 2013 12:12 pm
by suka
ขอบพระคุณค่ะอาจารย์

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jul 03, 2013 3:20 pm
by suka
เรียนอาจารย์และท่านผู้รู้ช่วยเรื่องปรับสูตรเพิ่มค่ะ

1.เนื่องจากชีท Database ที่เซลล์ C2 ดึงข้อมูลจาก G2&F2&D2 มาด้วย VBA ไม่ได้ดึงด้วยสูตร
และเซลล์ AD2 จะบันทึกทีหลัง Y ที่เซลล์ AD2 จึงไม่รับการอัพเดทที่เซลล์ C2 ค่ะ

2.ที่ชีท Form เลือกวันที่เริ่มต้นเซลล์ B1 และวันที่สิ้นสุดเซลล์ D1 และเลือกกลุ่มเอกสารที่เซลล์ E1
ก็ให้แสดงรายการเอกสารตามที่ระบุค่ะ
ขอเพิ่มอีกเงื่อนไขค่ะ ถ้าหากไม่ระบุชนิดเอกสารให้แสดงรายการเอกสารทั้งหมดตามรหัสร้านค้าที่เลือกค่ะ
snasui wrote::shock: สูตรที่เขียนมาแล้ว ไม่สามารถรองรับกับเงื่อนไขที่เพิ่มมาใหม่

เนื่องจากเดิมเป็นการดึงข้อมูลโดยใช้ E1 เป็นเงื่อนไขอยู่แล้ว ไม่ว่าจะไม่ว่างหรือว่างก็จะดึงมาตามนั้น หากบอกว่าถ้าว่างให้ดึงมาทั้งหมดจะขัดแย้งกับสูตรเดิมที่เขียนเอาไว้แล้ว หากจะทำต้องเขียนสูตรซ้อนเข้าไปซึ่งสูตรยาวมากและจะใช้ไม่ได้กับ Excel 2003 ครับ
ไฟล์แนบนี้ได้เปลี่ยนมาใช้ Excel 2007 แล้วค่ะ ขอบคุณค่ะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Wed Jul 03, 2013 7:40 pm
by snasui
:D ลองตามนี้ครับ
  1. เซลล์ A2 ปรับสูตรเป็น
    =IF($E$1="",SUMPRODUCT(--($G$1=Database!$G$2:$G$65536),--(1=Database!$F$2:$F$65536),--($I$1=Database!$AD$2:$AD$65536),--($B$1<=Database!$B$2:$B$65536),--($D$1>=Database!$B$2:$B$65536)),SUMPRODUCT(--($G$1=Database!$G$2:$G$65536),--(1=Database!$F$2:$F$65536),--($E$1=Database!$D$2:$D$65536),--($I$1=Database!$AD$2:$AD$65536),--($B$1<=Database!$B$2:$B$65536),--($D$1>=Database!$B$2:$B$65536)))
    Enter
  2. เซลล์ A3 ปรับสูตรเป็น
    =IF(ROWS(A$3:A3)>$A$2,"",SMALL(IF(IF($E$1="",IF($G$1=Database!$G$2:$G$65536,IF(1=Database!$F$2:$F$65536,IF($I$1=Database!$AD$2:$AD$65536,1))),IF($G$1=Database!$G$2:$G$65536,IF(1=Database!$F$2:$F$65536,IF($E$1=Database!$D$2:$D$65536,IF($I$1=Database!$AD$2:$AD$65536,1))))),IF(Form!$B$1<=Database!$B$2:$B$65536,IF(Form!$D$1>=Database!$B$2:$B$65536,ROW(Database!$B$2:$B$65536)-ROW(Database!$B$2)+1))),ROWS(B$3:B3)))
    Ctrl+Shift+Enter > Copy ลงด้านล่าง

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jul 04, 2013 11:37 am
by suka
:thup: ขอบพระคุณค่ะอาจารย์ ได้ผลตามที่ต้องการแล้วค่ะ

ขอรบกวนถามค่ะ Excel 2007 ต้องการปรับให้ Enter แล้วเคอร์เซอร์ไปขวา จะเข้าปรับที่เมนูไหนคะ

Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน

Posted: Thu Jul 04, 2013 7:59 pm
by snasui
:D ลองตามภาพครับ

คลิก Office Logo > Excel options แล้วกำหนดตามภาพด้านล่าง