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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#1
Post
by double bass » Wed Jun 23, 2010 6:24 pm
สวัสดีครับ
ขอรบกวนถามหน่อยครับ
......................
ปกติใน Excel เวลากรอกข้อมูล
ข้อมูลใหม่สุด ต้องไปกรอกอยู่แถวล่างสุดใช่มั้ยครับ
แต่ผมต้องการทำให้ ข้อมูลใหม่สุดอยู่แถวบนสุดครับ
ส่วนข้อมูลที่เก่ากว่า ก็ให้เลื่อนต่ำลงไปเรื่อยๆ
สมมุติ ตัวอย่างตามไฟล์ที่แนบมาครับ
ไม่ทราบว่า มีวิธีที่จะทำได้หรือไม่ครับ
ขอบคุณครับ
...
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Wed Jun 23, 2010 6:40 pm
การทำเช่นนี้ต้องใช้ VBA เข้ามาช่วยครับ ดูไฟล์แนบประกอบครับ
Code: Select all
Sub ShiftDataDown()
With Worksheets("Sheet1")
.Range(.Range("A3"), .Range("C65536").End(xlUp)).Copy
.Range("A4").PasteSpecial xlPasteValues
.Range("A2:C2").Copy
.Range("A3").PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
MsgBox "Paste Finish"
End Sub
You do not have the required permissions to view the files attached to this post.
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#3
Post
by double bass » Wed Jun 23, 2010 8:39 pm
ผมได้ลองเปิดไฟล์ที่แนบตอบไว้นั้นดูแล้วครับ
ก็ใช้ได้ตามต้องการครับ
คำถามเพิ่มเติมคือ ถ้าผมจะนำวิธีการนี้ไปใช้กับ sheetอื่น
ผมจะต้องทำยังไงครับ
ช่วยอธิบายอย่างละเอียดหน่อยครับ พอดีไม่มีความรู้เกี่ยวกับ VBA เลยครับ
ต้องรบกวนด้วยครับ ขอบคุณครับ
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Wed Jun 23, 2010 9:02 pm
ลองทำความเข้าใจตามด้านล่างครับ ข้อความด้านหลังคือคำอธิบาย ซึ่งคิดว่าคนที่ไม่คุ้นเคย จะเข้าใจยากสักหน่อยครับ
Code: Select all
Sub ShiftDataDown() 'ชื่อ Procedure
With Worksheets("Sheet1") 'ที่ Sheet1
.Range(.Range("A3"), .Range("C65536").End(xlUp)).Copy 'ให้ทำการ Copy ช่วงเซลล์ตั้งแต่ A3 จนถึงเซลล์ C ตัวท้ายสุดที่มีข้อมูล
.Range("A4").PasteSpecial xlPasteValues 'นำมาวางเฉพาะ ค่า (ไม่เอารูปแบบ ไม่เอาสูตร) ที่ A4
.Range("A2:C2").Copy 'Copy A2:C2
.Range("A3").PasteSpecial xlPasteValues ' นำมาวางเฉพาะ ค่า (ไม่เอารูปแบบ ไม่เอาสูตร) ที่ A3
End With 'ปิดการทำการกับ Sheet1
Application.CutCopyMode = False 'ปิดการทำงานกับการ Copy --> เหมือนการกด esc
MsgBox "Paste Finish" 'กำหนดให้มีกล่องข้อความแ้จ้งว่าทำการวางข้อมูลเรียบร้อยแล้ว
End Sub 'จบ Procedure
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#5
Post
by double bass » Sun Jun 27, 2010 6:11 pm
สวัสดีครับคุณคนควน
จากรหัสที่คุณเขียนให้ ผมได้ลองใช้ดู
โดยทำตามขั้นตอนในหัวข้อ "โครงสร้างชุดคำสั่ง VBA"
จากลิ้งค์นี้
http://www.excelexperttraining.com/blog ... 000671.php ( ผมอ่านดูแล้วก็ยังไม่ค่อยเข้าใจเท่าไหร่ )
โดยปรับให้แถวแรกอยู่ที่ row20 ( ได้แก้ไขรหัสให้สอดคล้องกันด้วย )
ผลคือ ถ้าเป็น sheet เปล่า ก็สามารถใช้ได้ตามต้องการ
แต่พอเอาไปเป็นส่วนประกอบของหน้า sheet ซึ่งมีสูตรลิงค์ไปยัง sheet อื่นๆอยู่ด้วย( ตามไฟล์ที่แนบมาใหม่ )
ผลคือ ใช้ไม่ได้ มันฟ้องว่า Run-time error '9' : Subscript out of range
จึงต้องขอรบกวนคุณคนควน ให้ช่วยชี้แนะอีกครั้งว่า
จะต้องตั้งค่าอะไร อย่างไร
และอยากให้ช่วยสอนวิธีสร้าง ปุ่ม Paste ให้ด้วยครับ
ขอบคุณมากครับ
…
You do not have the required permissions to view the files attached to this post.
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#6
Post
by double bass » Sun Jun 27, 2010 6:29 pm
ทดสอบ
ลองแปะลิ้งค์ในโพสต์ข้างบนอีกครั้ง
http://www.excelexperttraining.com/blog ... 000671.php
..................................
เอ่อ สงสัยว่า โพสต์ข้างบนต้องการแปะลิ้งค์เต็มๆตามนี้
excelexperttraining.com/blogs/archives/z210-CourseManual000671.php (หัวข้อ โครงสร้างชุดคำสั่ง VBA )
แต่ทำไมมันดันไปย่อลิ้งค์ให้สั้นลง จนกลายเป็นหน้าเว็บอื่นที่ไม่ใช่ที่ต้องการอ้างถึงซะนี่
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#7
Post
by snasui » Mon Jun 28, 2010 10:46 am
ลองทดสอบการใช้งานตามไฟล์แนบครับ
ซึ่งผมได้เขียน Code ให้วางข้อมูลไว้ด้านบนเสมอตามด้านล่างครับ
Code: Select all
Option Explicit
Sub PasteData()
Dim i As Integer, r As Range
Dim rSource As Range, rTarget As Range
Dim rTarget1 As Range, rTarget2 As Range
For Each r In Worksheets("สารบัญ").Range("A3:A16")
If r <> "" Then
i = i + 1
End If
Next r
With Worksheets("สารบัญ")
Set rSource = .Range(.Range("H3"), .Range("A" & 3 + i - 1))
Set rTarget = .Range(.Range("H20"), .Range("A65536").End(xlUp))
Set rTarget1 = .Range("A20").Offset(i, 0)
Set rTarget2 = .Range("A20")
End With
rTarget.Copy
rTarget1.PasteSpecial xlPasteValues
rSource.Copy
rTarget2.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Paste Finish."
End Sub
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#8
Post
by snasui » Mon Jun 28, 2010 7:33 pm
การสร้างปุ่มสำหรับ Run Code ดูตัวอย่างตามภาพด้านล่างครับ
You do not have the required permissions to view the files attached to this post.
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#9
Post
by double bass » Tue Jun 29, 2010 7:56 pm
เรียนคุณคนควน
คำตอบหลังสุดของคุณในโพสต์ที่ 7 ยังไม่ตรงกับที่ผมต้องการครับ
ต้องขอโทษอย่างแรงครับ คงเป็นเพราะผมอธิบายคำถามในโพสต์ที่ 5 ไม่ชัดเจนเอง
ขออธิบายใหม่นะครับ ตามไฟล์ที่แนบมาใหม่
..............................
อธิบายเพิ่มเติม
( ก )
จากคำตอบแรกของคุณในโพสต์ที่ 2 ที่แนบไฟล์ไว้ คือ Ans_ShiftDataDown
อันนี้ใช่ครับ ตรงกับที่ผมต้องการแล้ว
และเมื่อผมนำ Code ที่คุณตอบไว้ไปลองใช้ดูใน Sheet เปล่า
แต่เปลี่ยน row ที่จะใช้ ShiftDataDown ให้ไปเริ่มที่ row ด้านล่างของหน้า Sheet
โดยไปเปลี่ยนค่า Range ให้สอดคล้องกันด้วย
ผลคือ ก็ใช้ได้ตามต้องการ ( นี่เป็นการทดลองใน Sheet เปล่า )
( ข )
แต่เมื่อผมนำวิธีการในข้อ ( ก ) จะไปวางไว้ที่ส่วนล่างของหน้าสารบัญ ในรายการหนังสือ( ตามไฟล์ที่แนบนี้ )
โดยต้องการให้ ShiftDataDown ทำงานตั้งแต่ row18 ลงไป
ผลคือ กลับใช้ไม่ได้ ระบบมันไม่ทำงานเหมือนกับที่วางไว้ใน Sheet เปล่า( ดังที่บอกไว้ในข้อ ( ก ) )
ผมจึงได้มาถามอีกครั้ง ตามที่เขียนไว้ในโพสต์ที่ 5
( ค )
สิ่งที่ผมต้องการคือ ต้องการให้ข้อมูลที่ป้อนไว้ที่ row18 เลื่อนลงไป 1 row และเป็นเช่นนี้เรื่อยไปเมื่อกดปุ่ม Paste
โดยไม่ต้องไปเกี่ยวข้องใดๆ กับข้อมูลส่วนบนของหน้าสารบัญ( row 15 ขึ้นไปถึง row 1 )เลย
หรืออีกนัยหนึ่ง ShiftDataDown ผมต้องการเอามาใช้กับส่วนที่ระบายสีไว้ในไฟล์ที่แนบ( row 18 ลงไป )
โดย ShiftDataDown ไม่ต้องไปเกี่ยวข้องใดๆ กับข้อมูลที่อยู่ในส่วนที่ไม่ระบายสีเลย( row 15 ถึง row 1 )
( คำตอบของคุณคนควน ในโพสต์ที่ 7 เมื่อกดปุ่ม Paste ข้อมูลในส่วน row 15 ถึง row 1 จะไปโผล่ที่ row 18 ลงไป ซึ่งไม่ใช่สิ่งที่ผมต้องการครับ
สิ่งที่ผมต้องการมันง่ายๆ ไม่ได้ซับซ้อน เพียงแต่ต้องปรับอะไรบางอย่างอีกนิดหน่อย ก็น่าจะใช้ได้แล้ว ใช่มั้ยครับ )
( ง )
ซึ่ง Code จากโพสต์ที่ 2 ที่คุณเขียนไว้ให้
เมื่อปรับใหม่ให้สอดคล้องกับที่เริ่มที่ row18 ก็น่าจะเป็นตามข้างล่างนี้ใช่มั้ยครับ
Sub ShiftDataDown()
With Worksheets("Sheet1")
.Range(.Range("A19"), .Range("G65536").End(xlUp)).Copy
.Range("A20").PasteSpecial xlPasteValues
.Range("A18:G18").Copy
.Range("A19").PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
MsgBox "Paste Finish"
End Sub
แต่แค่นี้ ผมลองดูแล้วยังใช้ไม่ได้ มันไม่ทำงาน
( ถ้าเอาไปวางไว้ใน Sheet เปล่าที่ไม่มีสูตรใดๆ มันใช้ได้ดังที่บอกไว้ในข้อ( ก )
แต่พอเอามาวางไว้หน้าเดียวกับหน้าสารบัญ ซึ่งมีสูตรอยู่ด้วย มันกลับใช้ไม่ได้ดังที่บอกไว้ในข้อ( ข ) )
ก็เลยต้องมารบกวนถามคุณคนควนอีกครั้งว่าต้องเพิ่ม Code อะไรอีกครับ ช่วยชี้แนะด้วยครับ
ขอบคุณมากครับ
...
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#10
Post
by snasui » Tue Jun 29, 2010 8:22 pm
ลองดูไฟล์ที่ผมปรับมาให้ใหม่ตามด้านล่างครับ
Code: Select all
Option Explicit
Sub ShiftDataDown()
With Worksheets("สารบัญ")
.Range(.Range("A19"), .Range("A65536").End(xlUp).Offset(0, 7)).Copy
.Range("A20").PasteSpecial xlPasteValues
.Range("A18:H18").Copy
.Range("A19").PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
MsgBox "Paste Finish"
End Sub
You do not have the required permissions to view the files attached to this post.
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#11
Post
by double bass » Wed Jun 30, 2010 6:05 pm
เรียนคุณคนควน
จากไฟล์ที่แนบในโพสต์ที่ 10
ShiftDataDown ใช้ได้ตามต้องการแล้วครับ
.......................................
แต่มีปัญหาใหม่ตามมาครับ
คือหลังจากทำให้ ShiftDataDown ในส่วนล่างของหน้าสารบัญใช้ได้แล้ว
ลิงค์ที่ส่วนบนในหน้าสารบัญ กลับใช้ไม่ได้ครับ
คือเดิมนั้น เมื่อคลิก “ชั้นA” หรือ “ชั้นB” เป็นต้น ในเซลล์ A2 ถึง A8
มันก็จะลิ้งค์ไปยัง sheetชั้นA หรือ sheetชั้นB ตามสูตรที่เขียนไว้
แต่ตอนนี้ ลิ้งค์มันกลับไม่ทำงานครับ
ไม่ทราบว่า เป็นเพราะสาเหตุใดครับ
....
You do not have the required permissions to view the files attached to this post.
double bass
Member
Posts: 7 Joined: Wed Jun 23, 2010 5:55 pm
#12
Post
by double bass » Wed Jun 30, 2010 6:10 pm
ลิ้งค์มันไม่ทำงาน หลังจากทำให้ ShiftDataDown ใช้การได้
ไม่ทราบว่าจะต้องแก้ไขอย่างไรครับ
ต้องรบกวนอีกรอบครับ ขอบคุณครับ
...
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30938 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#13
Post
by snasui » Wed Jun 30, 2010 6:25 pm
ต้องเปลี่ยน [รายการหนังสือ.xlsm] ในสูตร ให้เป็น
[Ans_ShiftDataDown.xlsm] หรือเป็นชื่อไฟล์ปัจจุบัน ก่อนครับ