Page 4 of 5
Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน
Posted: Mon Jun 24, 2013 3:57 pm
by snasui

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

ลองตามนี้ครับ
- ที่ชีท Database เซลล์ C2 เปลี่ยนสูตรเป็น
=G2&F2&D2
Enter > Copy ลงด้านล่าง
- ที่ชีท 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
- ที่ชีท 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

ขอบพระคุณค่ะอาจารย์ ได้ตรงตามที่ต้องการแล้วค่ะ
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

ควรเพิ่มเงื่อนไขในข้อ 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

แนบไฟล์ตัวอย่างที่ได้ 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

ในชีท Form เพิ่มเซลล์ I1 เข้ามาเป็นเงื่อนไข หากกรอก Y แสดงว่าในชีท Database คอลัมน์ AD เป็น Y จึงจะนำข้อมูลมาแสดง หากว่างเปล่า แสดงว่าในชีท Database คอลัมน์ AD เป็น Y จึงจะนำข้อมูลมาแสดง
จากนั้นปรับสูตรในชีท Form ดังนี้
- ที่ 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
- ที่ 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

ขอบพระคุณอาจารย์ค่ะ ได้ตรงตามต้องการแล้วค่ะ
ขอรบกวนอาจารย์เพิ่มอีกหนึ่งเงื่อนไขค่ะ
ชีท Form เซลล์ E1 ถ้าระบุชนิดเอกสารให้แสดงรายการเอกสารตามที่ระบุ
หากไม่ระบุชนิดเอกสารให้แสดงรายการเอกสารทั้งหมดตามรหัสร้านค้าที่เลือกค่ะ
ขอบพระคุณค่ะ
Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน
Posted: Thu Jun 27, 2013 11:52 am
by snasui

สูตรที่เขียนมาแล้ว ไม่สามารถรองรับกับเงื่อนไขที่เพิ่มมาใหม่
เนื่องจากเดิมเป็นการดึงข้อมูลโดยใช้ 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

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:
สูตรที่เขียนมาแล้ว ไม่สามารถรองรับกับเงื่อนไขที่เพิ่มมาใหม่
เนื่องจากเดิมเป็นการดึงข้อมูลโดยใช้ E1 เป็นเงื่อนไขอยู่แล้ว ไม่ว่าจะไม่ว่างหรือว่างก็จะดึงมาตามนั้น หากบอกว่าถ้าว่างให้ดึงมาทั้งหมดจะขัดแย้งกับสูตรเดิมที่เขียนเอาไว้แล้ว หากจะทำต้องเขียนสูตรซ้อนเข้าไปซึ่งสูตรยาวมากและจะใช้ไม่ได้กับ Excel 2003 ครับ
ไฟล์แนบนี้ได้เปลี่ยนมาใช้ Excel 2007 แล้วค่ะ ขอบคุณค่ะ
Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน
Posted: Wed Jul 03, 2013 7:40 pm
by snasui

ลองตามนี้ครับ
- เซลล์ 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
- เซลล์ 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

ขอบพระคุณค่ะอาจารย์ ได้ผลตามที่ต้องการแล้วค่ะ
ขอรบกวนถามค่ะ Excel 2007 ต้องการปรับให้ Enter แล้วเคอร์เซอร์ไปขวา จะเข้าปรับที่เมนูไหนคะ
Re: ขอรบกวนช่วยเรื่อง Code VBA เมื่อเทียบค่าตรงกัน
Posted: Thu Jul 04, 2013 7:59 pm
by snasui

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