snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#1
Post
by liveday » Wed Apr 06, 2011 9:49 am
ตามไฟล์ที่เเนบนะครับ ไฟล์ที่ผมทำคิดว่าถ้าเยอะๆขึ้นจะเกิดการผิดพลาดใด้ จึงเรียนถามอาจารย์ ว่าควรเเก้ไขปรับปรุงขั้นตอนอย่างไรให้มีความมารตฐานมากขึ้น
ขอคำเเนะนำด้วยนะครับ
cdc central.xlsx
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Wed Apr 06, 2011 10:14 am
การเก็บข้อมูลควรเก็บตามชีท Database ที่ผมทำเป็นตัวอย่างมาให้ นั่นคือ จะต้องเป็น Database คือเก็บข้อมูลเรียงลงด้านล่างเรื่อย ๆ ทุกสถานที่ ทุกสาขา
การเก็บข้อมูลลักษณะนี้ เราสามารถสร้างฟอร์มในการรับข้อมูลขึ้นมาใหม่ โดยดู Field ต่าง ๆ ตามชีทเมษายน จากนั้นสามารถใช้ VBA ในการส่งข้อมูลจากฟอร์มไปบันทึกในชีท Database การนำข้อมูลไปใช้ก็จะง่ายขึ้นไม่ว่าจะดึงไปด้วยสูตรหรือ PivotTable
หากต้องการเก็บข้อมูลลักษณะนี้ ขั้นต่อไปก็ให้ทำแบบฟอร์มสำหรับกรอกข้อมูลส่งมา ผมจะเขียน VBA มาให้ครับ
You do not have the required permissions to view the files attached to this post.
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#3
Post
by liveday » Mon Apr 18, 2011 1:40 pm
สวัสดีปีไหม่ไทยครับ อาจารย์
สืบเนื่องมาจาก ฮาร์ดดิสเสีย ข้อมูลที่ทำใว้หายหมด เลยต้องรื้อฟื้นส่วนที่จำเป็นก่อน เเละคำถามยังเหมือนเดิมครับ
ทำฟร์อม ตามที่อาจารย์บอกครับ (ที่ไฟล์เเนบ)
หลักๆก็คือ เก็บข้อมูลลูกค้า เเต่ละสาขา ส่ง Report เข้าโรงงานเฉพาะบางส่วนเท่านั้น
สิ่งที่ต้องการคือ เราคีย์ข้อมูลลงไปที่ฟอร์มเเต่ละสาขา เเล้วไปเก็บใน Databest ระหว่างนี้ก็จะมีบางส่วนไปเเสดงรายละเอียดหน้าเเรก เพื่อทำการส่ง Report ไปโรงงานอีกที
จึงต้องขอรบกวนอาจารย์ ช่วยเเนะนำเเนวทางทีนะครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Mon Apr 18, 2011 3:59 pm
ก่อนที่จะเขียน Code เพื่อบันทึกข้อมูล อยากทราบว่าในชีท Database นั้นมีข้อมูลทีจำเป็นครบถ้วนแล้วหรือไม่ครับ ยังไม่ครบช่วยเพิ่มเติมตามที่ต้องการใช้จริงด้วยครับ
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#5
Post
by liveday » Tue Apr 19, 2011 12:00 pm
เรียน อาจารย์
จากคำเเนะที่บอกมา ตอนนี้ใด้เเบบฟอร์มที่นึง ซึ่งจำไม่ใด้ว่าใด้มาจากไหน (ต้องขอโทษเจ้าของไฟล์ด้วยนะครับ)
ซึ่งเป็นไปตามที่ต้องการ เเละผมใด้มาแก้ไขบางส่วน ส่วนเจตจำนงค์ที่ทำยังเหมือนเดิมจากที่ถามอาจารย์ครั้งก่อน
ตรงหน้า report จากการเชื่อมโยง index ออเร่อ ขึ้นว่า #REF! เเก้ไขตรงไหนหรือครับ
เเละนี่คือข้อมูลที่จำเป็นทั้งหมดเเละครบถ้วนเเล้วครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Tue Apr 19, 2011 4:54 pm
ไม่ทราบว่ายังต้องการให้บันทึกข้อมูลลง Database อีกหรือไม่ครับ เพราะไม่มี Form มาให้
สำหรับสูตรที่ติดค่า #Ref! นั้น เนื่องจากสูตรที่ดึงข้อมูลมาแสดงนั้นได้นำเอา
ค่าที่เกินจากช่วงที่กำหนด มา จึงไม่สามารถนำมาแสดงได้
เช่นจากสูตรใน C19 คือ
=INDEX(Data,$M$2,13)
หมายความว่า จากช่วงข้อมูล Data ให้นำบรรทัดที่เป็นค่าของ M2 และคอลัมน์ที่ 13 มาแสดง หากข้อมูล Data มีไม่ถึง 13 คอลัมน์ก็จะเกิด Error ดังกล่าวครับ
การตรวจสอบว่า Data คือช่วงข้อมูลไหนให้คลิกที่เมนู Formula > Name manager > คลิกที่ชื่อ Data > ตรงด้านล่างที่เป็น Refer to: จะอ้างอิงตำแหน่งช่วงเซลล์มาให้
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#7
Post
by liveday » Tue Apr 19, 2011 5:31 pm
ลืมใส่ From ไปด้วยครับ ก็ใด้ไปทีละขั้นตอน ดีใจจริงๆ ^ ^
ยังต้องการเหมือนเดิม เพียงเพิ่มบางอย่างเพื่อการดูง่ายขึ้นครับ
ขอบคุณอาจารย์ในทุกๆคำตอบครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Tue Apr 19, 2011 9:54 pm
ผมเขียน Code ให้แล้วตามด้านล่างดูไฟล์แนบประกอบครับ
Code: Select all
Sub PasteData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Form").Range("A3:N3")
Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1)
rs.Copy
rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
จากการทดสอบพบว่าชีท Form กับชีท Data คอลัมน์ไม่เท่ากัน การวางข้อมูลลงชีท Data จึงไม่ตรงตามตำแหน่งเช่นข้อมูลเดิมที่มีอยู่แล้ว ช่วยปรับ Form ให้เท่ากับ Data แล้วส่งมาใหม่จะได้ปรับ Code ให้ครับ
You do not have the required permissions to view the files attached to this post.
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#9
Post
by liveday » Tue Apr 19, 2011 11:25 pm
ปรับตามที่บอกครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Tue Apr 19, 2011 11:38 pm
ปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub PasteData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Form").Range("A3:Q3")
Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1)
rs.Copy
rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#11
Post
by liveday » Wed Apr 20, 2011 9:42 am
ใด้เเล้วครับ ขอบคุณอาจารย์มากครับ
เเต่อยากรู้ความหมายของโค้ด เเต่ละบรรทัดที่อาจารย์เขียนมาให้ เพื่อจะไปดัดเเปลงในการใช้งานอื่นๆครั้งต่อไปครับ ขอบคุณครับ
เเล้วอีกอย่าง เราจะ Enable VBA ให้ใช้ใด้ตลอดไม่ต้องไป Allow ทุกครั้ง ไปเซตตรงไหนหรือครับ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#12
Post
by snasui » Wed Apr 20, 2011 7:09 pm
ลองทำความเข้าใจตามด้านล่างครับ
Code: Select all
Sub PasteData() 'เริ่มคำสั่ง
Dim rs As Range 'กำหนดตัวแปร rs เป็นเซลล์หรือช่วงข้อมูล
Dim rt As Range 'กำหนดตัวแปร rt เป็นเซลล์หรือช่วงข้อมูล
Set rs = Worksheets("Form").Range("A3:Q3") 'กำหนดตำแหน่งให้กับตัวแปร rs คือช่วงข้อมูล A3:Q3 ในชีท Form
Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1) 'กำหนดตำแหน่งให้กับตัวแปร rt คือถัดจากเซลล์สุดท้ายในคอลัมน์ C ของชีท Data
rs.Copy 'Copy ตัวแปร rs
rt.PasteSpecial xlPasteValues 'นำไปวางแบบค่าที่ตัวแปร rt
Application.CutCopyMode = False 'ยกเลิกการ Copy
MsgBox "Finish." 'แสดงกล่องโต้ตอบเพื่อบอกว่าทำงานเรียบร้อยแล้ว
End Sub 'สิ้นสุดคำสั่ง
สำหรับการ Enable Macro ดูที่นี่ครับ
http://www.snasui.com/viewtopic.php?p=4982#p4982
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#13
Post
by liveday » Thu Apr 21, 2011 8:51 pm
อยากถามอาจารย์ว่า เราสามารถกำหนดมากกว่า 1 เเถวใด้ไหมครับ
อย่างตัวนี้ Set rs = Worksheets("Form").Range("A3:Q3") มันใด้เเถวเดียว เพิ่มเป็น 2-5 เเถวใด้ไหมครับหรือมากกว่านั้น
เเล้วโค้ดสามารถกำหนดให้ไปบันทึกเฉพาะบางช่องเซล์ที่เราต้องการ ใด้หรือเปล่าครับ ถ้าใด้เป็นสูตร VBA เเบบไหนใด้ครับ
เเล้วทำเป็นช๊อตคัท (Copy pste) ของ macroใด้ยังไงครับ เเบบ อาจารย์ทำให้อ่ะครับ
ถามอีกอย่างว่ากรณีต้องการหาผลลัพท์ทั้งหมดเเล้วเเสดงนั้นช่องเซล์นั้นเลยใช้สูตรประมาณไหนครับ เช่น (A1*B1),ผลลัพท์ที่ใด้*30% เเล้วผลลัพท์ที่ใด้แสดงในช่อง C1 ประมาณนี่ครับ
รบกวนอาจารย์ด้วยนะครับ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#14
Post
by snasui » Thu Apr 21, 2011 11:11 pm
liveday wrote: อยากถามอาจารย์ว่า เราสามารถกำหนดมากกว่า 1 เเถวใด้ไหมครับ
อย่างตัวนี้ Set rs = Worksheets("Form").Range("A3:Q3") มันใด้เเถวเดียว เพิ่มเป็น 2-5 เเถวใด้ไหมครับหรือมากกว่านั้น
สามารถกำหนดเป็นกี่แถวกี่คอลัมน์ก็ได้ครับ
เเล้วโค้ดสามารถกำหนดให้ไปบันทึกเฉพาะบางช่องเซล์ที่เราต้องการ ใด้หรือเปล่าครับ ถ้าใด้เป็นสูตร VBA เเบบไหนใด้ครับ
สามารถทำได้ส่วนจะเขียนแบบไหนอยู่ที่ว่ามีเงื่อนไขอย่างไรครับ
เเล้วทำเป็นช๊อตคัท (Copy pste) ของ macroใด้ยังไงครับ เเบบ อาจารย์ทำให้อ่ะครับ
ต้องวาด Oject ใด ๆ ขึ้นมาก่อนจากนั้นคลิกขวา > Assigned Macro ดูวิธีการที่นี่ครับ
http://www.snasui.com/viewtopic.php?p=1061#p1061
ถามอีกอย่างว่ากรณีต้องการหาผลลัพท์ทั้งหมดเเล้วเเสดงนั้นช่องเซล์นั้นเลยใช้สูตรประมาณไหนครับ เช่น (A1*B1),ผลลัพท์ที่ใด้*30% เเล้วผลลัพท์ที่ใด้แสดงในช่อง C1 ประมาณนี่ครับ
รบกวนอาจารย์ด้วยนะครับ
ทำไฟล์ตัวอย่างมาด้วยครับจะได้สะดวกในการอ้างอิง
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#15
Post
by liveday » Fri Apr 22, 2011 7:55 am
อาจารย์ช่วยดูทีนะครับ ตามไฟล์เเนบ
ที่ต้องการเพิ่ม คือ ต้องการก็อบจำนวนมากกว่า 1 เเถว ครับ
เเล้ว ตรง Copy to report พอก็อบปี้เเล้วมันไปแถวที่ 21 ของ report อยากให้มันเริ่มต้นอยู่ที่เเถวที่ 5 ครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#16
Post
by snasui » Fri Apr 22, 2011 8:44 am
สงสัยเพิ่มครับ ในชีท Form บรรทัดที่ 2-8 กับ 11-17 เป็น Form เดียวกัน ต้องการใช้ Form ไหนครับ ปกติหาก Form เหมือนกันจะสร้างมาเพียง Form เดียว ส่วนจะเอา Data ไปไหนบ้างก็แล้วแต่กำหนด และข้อมูลที่จะเอาไปใช้นั้นหากใน Form มีการบันทึกจำนวนรายการไม่เท่ากันทุกครั้ง เรามักจะไม่กำหนดจำนวนบรรทัดที่จะ Copy ไว้ล่วงหน้าว่าเป็นเท่านั้นเท่านี้ แต่จะใช้ Code ให้หาจำนวนรายการแล้ว Copy ไปเท่าจำนวนรายการที่มีครับ
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#17
Post
by liveday » Fri Apr 22, 2011 9:28 am
เรียน อาจารย์
บรรทัด ที่ 11-17 ไม่ใด้ใช้ครับ พอดีผมจำลองขึ้นมาเฉยๆ ส่วนคำถามยังเหมือนเดิมครับ
คำถามประมาณนี้อ่ะครับ (จะใช้ Code ให้หาจำนวนรายการแล้ว Copy ไปเท่าจำนวนรายการที่มีครับ)
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#18
Post
by snasui » Fri Apr 22, 2011 10:01 am
ผมปรับ Code ให้ใหม่เป็นตามด้านล่าง ดูไฟล์แนบประกอบครับ
Code: Select all
Sub PasteData()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Form").Range("B3", Range("B10") _
.End(xlUp).Offset(0, 16))
Set rt = Worksheets("Data").Range("C65536").End(xlUp).Offset(1, -1)
rs.Copy
rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
Sub PasteToReport()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Form").Range("B21", Range("B24") _
.End(xlUp).Offset(0, 8))
Set rt = Worksheets("Report").Range("A16").End(xlUp).Offset(1, 0)
rs.Copy
rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
You do not have the required permissions to view the files attached to this post.
liveday
Bronze
Posts: 286 Joined: Fri Mar 25, 2011 2:24 pm
Excel Ver: 2007
#19
Post
by liveday » Fri Apr 22, 2011 11:47 am
รบกวนอาจารย์ครับ
คือ เเล้ว สูตรของอาจารย์ดูใด้ตรงไหนหรือครับ พอดีผมเปิด Alt+F11 เเล้วสูตรมันมีเฉพาะอันเดิมไม่มีของอาจารย์ครับ
เเล้วผมจะดัดเเปลง จากการบันทึกเเค่ 1 บรรทัด ให้มากกว่านี้ใด้หรือเปล่าครับเเบบเป็น 2-5 บรรทัดต่อการบันทึก 1 ครั้ง เเล้วเเก้หรือเพิ่มเติมใด้จากโค้ดที่บรรทัดไหนหรือครับ
ขอบคุณ ครับ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#20
Post
by snasui » Fri Apr 22, 2011 11:57 am
Code อยู่ที่ Module1 ครับ
อันเดิมที่ว่านี้อยู่ที่ไหนครับ ถ้าไม่ใช่ที่ Module1 ให้ลบทิ้งไปครับ เว้นเสียว่าจะใช้งานอย่างอื่น ผมพบว่าอยู่ใน ThisWorkBook ด้วย ไม่แน่ใจว่าผมเขียนมาให้แล้ววางผิดที่หรือไม่ ให้ลบทิ้งไปด้วยครับ
ส่วนจะบันทึกกี่บรรทัดก็ใส่ข้อมูลเข้าไปตามต้องการ ลองบันทึก สังเกตดูผลครับ Code ที่เขียนมาให้นี้ได้ปรับเรื่องบรรทัดให้แล้วครับ