snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#1
Post
by use700 » Wed Nov 02, 2011 12:51 pm
สวัสดีครับท่านอาจารย์
มมีปัญหาเรื่อง Macro ครับ คือต้อง copy ข้อมูลจาก sheet Input ไปยัง sheet Result
แต่มีปัญหาคือ ต้องตรวจสอบ ผลรวม > 0 (column N) ถึงจะดึงข้อมูลไปใส่ครับและ
ในsheet Result ฟิลด์ Status ต้องใส่ เป็นกรุงเทพ เลยครับ
ลองเขียนโค้ดแล้ว ที่ปุ่ม Paste Data ครับ แต่ เจอ 2เคส ข้างบนแล้วปวดหัวครับ
แนบ file มาให้อาจารย์ช่วยแนะนำครับ
รบกวนท่านอาจารย์แนะนำด้วยครับ
Attachments
Account01.xlsm
(27.63 KiB) Downloaded 4 times
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Wed Nov 02, 2011 1:24 pm
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub GenSegment()
Dim rt As Range, rs As Range
Dim r As Range
With Worksheets("Input")
Set rs = .Range("N5", .Range("N" & Rows.Count).End(xlUp))
End With
For Each r In rs
If r <> 0 Then
Set rt = Worksheets("Result").Range("B65536").End(xlUp).Offset(1, 0)
r.Offset(0, -13).Resize(1, 13).Copy rt
End If
Next r
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#3
Post
by use700 » Wed Nov 02, 2011 1:41 pm
กราบขอบพระคุณท่านอาจารย์มากๆๆครับ สามารถทำได้ตามที่ท่านอาจารย์แนะนำครับ
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#4
Post
by use700 » Wed Nov 02, 2011 3:04 pm
ท่านอาจารย์ครับ รบกวนเพิ่ม เติมครับ
ในsheet Result ฟิลด์ Status ต้องใส่ เป็นกรุงเทพ ตามจำนวน record ที่ส่งมาจาก sheet Input ครับ
รบกวนท่านอาจารย์ด้วยครับ
Attachments
Account01.xlsm
(27.76 KiB) Downloaded 1 time
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#5
Post
by snasui » Wed Nov 02, 2011 3:27 pm
คราวต่อไปช่วยปรับมาก่อนนะครับ ติดตรงไหนค่อยมาดูกันต่อ
จาก Code เดิมที่ผมเขียนให้ไปปรับเป็นตามด้านล่างครับ
Code: Select all
'Other code
If r <> 0 Then
Set rt = Worksheets("Result").Range("B65536").End(xlUp).Offset(1, 0)
r.Offset(0, -13).Resize(1, 13).Copy rt
rt.offset(0,-1) = "กรุงเทพ" '<== Add this line.
End If
'Other code
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#6
Post
by use700 » Wed Nov 02, 2011 3:31 pm
กราบขอบพระคุณท่านอาจารย์อีกครั้งครับ
สามารถนำไปใช้ได้แล้วครับ ขอบพระคุณมากๆครับ
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#7
Post
by use700 » Wed Nov 02, 2011 11:17 pm
เรียนท่านอาจารย์
เนื่องจาก excel ที่ผมทำมีการเพิ่ม SERIAL CODE ที่ sheet Result โดยต้องนำค่า "002"รวมกับ ACCOUNT
ผมลองเขียนแล้ว error ครับ และต้องการให้ sheet Result และ Result2 รวมกันอยู่ใน sheet Total
ผมสามารถเขียนโค้ดต่อจาก หลัง ' Range("N") = "002" + Range("B2") ได้อย่างไรครับเพื่อจะนำ ข้อมูลไปรวมกันไว้ที่sheet total
If r <> 0 Then
Set rt = Worksheets("Result").Range("B65536").End(xlUp).Offset(1, 0)
r.Offset(0, -13).Resize(1, 13).Copy rt
rt.Offset(0, -1) = "กรุงเทพ"
' Range("N") = "002" + Range("B2")
End If
รบกวนท่านอาจารย์แนะนำด้วยครับ
กราบขอบพระคุณอย่างสูงครับ
Attachments
Account01.xlsm
(29.55 KiB) Downloaded 3 times
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Thu Nov 03, 2011 9:05 am
หากยังไม่แม่นในการเขียน Code เพื่อให้ง่ายแล้วข้อมูลทุกอย่าง เช่น Serial, Status ควรอยู่ที่ชีท Input แล้วค่อยใช้ Code นำไปวางแบบต่อกันเป็นฐานข้อมูล ซึ่งจะง่ายกว่ากันมากครับ ไม่ควรใช้ Code VBA สร้างรหัสหรือค่าอื่น ๆ เข้าไปแทรกอยู่เรื่อย ๆ ในลักษณะที่ทำอยู่นี้ครับ
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#9
Post
by use700 » Thu Nov 03, 2011 9:25 am
ขอบคุณท่านอาจารย์ที่แนะนำครับ แต่เนื่องจากที่ sheet Input ไม่สามารถ แสดงว่า Serial, Statusให้ทาง user เห็นได้ครับ
ผมลอง เพิ่ม Serial, Status ที่หน้า sheet Input แล้วทำการ hide ทำให้ข้อมูลที่ส่งมายัง Sheet Result ไม่สามารถ ส่งค่ามาได้
ท่านอาจารย์มีวิธีแนะนำใหม่ครับ เพราะ 2 filed ครับ ต้องไม่ให้user เห็นใน sheet Input แต่ต้องส่งค่ามาแสดงที่ sheet Result ครับ
โดย ค่า serial ต้อง เป็นค่า "002"รวมกับ ACCOUNT
กราบขอบพระคุณมากครับ
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Thu Nov 03, 2011 9:45 am
หากเป็นเช่นนั้นให้ทำไฟล์ตัวอย่างมาใหม่ โดยให้เรียงคอลัมน์ใหม่ Serial และ Status สามารถสลับกันได้ แต่ไม่ควรแทรกอยู่ระหว่าง Account และเดือนต่าง ๆ เนื่องจากข้อมูลอยูชิดติดกันอยู่แล้ว ไม่ควรไปแทรกกลาง ทั้งนี้
เพื่อให้ง่ายต่อการใช้ Code ส่วนการนำข้อมูลจากชีทต่าง ๆ มาต่อกันนั้นศึกษาจากที่นี่ครับ
การนำข้อมูลหลายชีทมาต่อกัน
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#11
Post
by use700 » Thu Nov 03, 2011 10:58 am
ขอบพระคุณท่านอาจารย์มากครับ
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#12
Post
by use700 » Thu Nov 03, 2011 11:36 am
เรียนท่านอาจารย์
ผมได้ทำ file มาใหม่ครับ คือนำ serial code ไว้ข้างหน้า account ตามที่อาจารย์แนะนำคือไม่ให้ไปแทรกตรงกลาง
แต่มีปัญหาคือ sheet Input ไม่สามารถ แสดงcolumn ว่า Serial code ให้ทาง user เห็นได้ครับ
และต้องแสดงที่ Sheet Result ในรูปแบบ"002"+ACCOUNT เมื่อรวมกันจะได้ "00252000"
ลองทดลองเขียนแล้วแต่ไม่ได้ครับ
รบกวนท่านอาจารย์แนะนำครับ
Attachments
Account02SERIAL.xlsm
(29.66 KiB) Downloaded 8 times
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#13
Post
by snasui » Thu Nov 03, 2011 12:02 pm
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
'Other code
For Each r In rs
If r <> 0 Then
Set rt = Worksheets("Result").Range("C65536").End(xlUp).Offset(1, 0)
r.Offset(0, -13).Resize(1, 13).Copy rt
rt.Offset(0, -2) = "กรุงเทพ"
rt.Offset(0, -1).NumberFormat = "@"
rt.Offset(0, -1) = "002" & rt
End If
Next r
'Other code
use700
Member
Posts: 12 Joined: Mon Oct 31, 2011 3:49 pm
#14
Post
by use700 » Thu Nov 03, 2011 12:51 pm
กราบขอบพระคุณท่านอาจารย์ครับ สามารถทำได้ตามคำแนะนำครับ