EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ตัวอย่างตามไฟล์ที่แนบไปข้างต้นครบอาจารย์snasui wrote: ช่วยทำตัวอย่างผลลัพธ์ที่ต้องการมาด้วยเพื่อจะได้เข้าใจตรงกันครับ
ต้องการให้ข้อมูล Sheet กะเช้า ครับ ในตารางทั้งหมดครับ อยากให้กด Command Box แล้วส่งค่าไปที่ Sheet DataM ครับ ปกติส่งค่าไปได้แต่ มันเป็นลักษณะแนวนอน ตามไฟล์ ที่แนบไปครับ อาจารย์ อยากให้ข้อมูลเป็นลักษณะแนวตั้ง ครับ ต้องแก้โค๊ดอย่างไรบ้างครับsnasui wrote: ทำมาใน Excel ครับ ชี้ให้เห็นว่าเดิมข้อมูลอยู่ในชีทไหน เซลล์ไหน ต้องการคำตอบในชีทไหน เซลล์ไหน มีค่าเท่าใดบ้าง ฯลฯ
Code: Select all
Sub test()
Dim r1 As Range, r2 As Range
Dim rTarget As Range
With Sheets("¡ÐàªéÒ")
Set r1 = .Range("a30:g30")
Set r2 = .Range("b9:j16")
End With
With Sheets("DataM")
Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0)
r1.Copy
rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues
r2.Copy
rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
End Sub
ขอบคุณมากๆครับอาจารย์ ^^snasui wrote: ลองปรับ Code เป็นตามด้านล่างครับสำหรับการสอนมีทีมงานที่สนิทกันสอนอยู่ครับ ลองติดต่อไปตาม Link นี้ครับ viewtopic.php?f=12&t=6255Code: Select all
Sub test() Dim r1 As Range, r2 As Range Dim rTarget As Range With Sheets("¡ÐàªéÒ") Set r1 = .Range("a30:g30") Set r2 = .Range("b9:j16") End With With Sheets("DataM") Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0) r1.Copy rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues r2.Copy rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues End With Application.CutCopyMode = False End Sub
อาจารย์ครับจะประยุกต์ใช้ยังไงครับ พอดีผมยังไม่ค่อยเข้าใจเกี่ยวกับ Code VBA ผมก็ก๊อบมาลองผิดลองถูก แต่ยังไม่เข้าใจหลักการ เลยไปต่อไม่ได้ครับ ขอบคุณครับTahiti80s wrote:ขอบคุณมากๆครับอาจารย์ ^^snasui wrote: ลองปรับ Code เป็นตามด้านล่างครับสำหรับการสอนมีทีมงานที่สนิทกันสอนอยู่ครับ ลองติดต่อไปตาม Link นี้ครับ viewtopic.php?f=12&t=6255Code: Select all
Sub test() Dim r1 As Range, r2 As Range Dim rTarget As Range With Sheets("¡ÐàªéÒ") Set r1 = .Range("a30:g30") Set r2 = .Range("b9:j16") End With With Sheets("DataM") Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0) r1.Copy rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues r2.Copy rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues End With Application.CutCopyMode = False End Sub
อาจารย์ครับ ติดตรงที่ตารางที่เรากรอกมัน ไม่ ทำการ Clear ครับ อาจารย์ ไม่ทราบว่าใช้คำสั่ง อะไรครับ ขอบคุณครับๆsnasui wrote: สามารถใช้ Code นี้แทน Code เดิมครับ
สำหรับ VBA จำเป็นต้องปรับเองได้บ้าง ผู้ใช้งานจะต้องเรียนรู้มาเองก่อนตามลำดับ ติดตรงไหนแล้วสามารถถามมาได้เรือ่ย ๆ ครับ
ลองปรับดูตามนี้ไม่รู้ถูกหรอป่าว ผมยงังงๆครับ แต่ไม่ได้ -*- ต้องใส่เพิ่มเติมอย่างไรบ้างครับ ขอบคุณรับsnasui wrote: ลองปรับให้ Clear มาเองก่อนครับ ปรับแล้วติดตรงไหนสามารถถามมาได้เรือย ๆ ครับ
รบกวนอาจารย์ด้วยครับsnasui wrote: แนบ Code มาพร้อมไฟล์ จะได้ช่วยทดสอบได้ครับ
Code: Select all
Sub DataM()
Dim r1 As Range, r2 As Range
Dim rTarget As Range
With Sheets("¡ÐàªéÒ")
Set r1 = .Range("a30:g30")
Set r2 = .Range("b9:j16")
End With
With Sheets("DataM")
Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0)
r1.Copy
rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues
r2.Copy
rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues
End With
r2.ClearContents '<== this line for clear contents
Application.CutCopyMode = True
End Sub
ขอบคุณอาจารย์มากๆครับsnasui wrote: ตัวอย่าง Code ตามด้านล่างครับCode: Select all
Sub DataM() Dim r1 As Range, r2 As Range Dim rTarget As Range With Sheets("¡ÐàªéÒ") Set r1 = .Range("a30:g30") Set r2 = .Range("b9:j16") End With With Sheets("DataM") Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0) r1.Copy rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues r2.Copy rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues End With r2.ClearContents '<== this line for clear contents Application.CutCopyMode = True End Sub
รบกวนอาจารย์อีกเรื่องครับ พอมัน Cut ไปหมดจริง สูตรมันก็ Cut ไปด้วยครับ ต้องแก้ไขตรงไหนครับ อาจารย์ ขอบคณครับTahiti80s wrote:ขอบคุณอาจารย์มากๆครับsnasui wrote: ตัวอย่าง Code ตามด้านล่างครับCode: Select all
Sub DataM() Dim r1 As Range, r2 As Range Dim rTarget As Range With Sheets("¡ÐàªéÒ") Set r1 = .Range("a30:g30") Set r2 = .Range("b9:j16") End With With Sheets("DataM") Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0) r1.Copy rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues r2.Copy rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues End With r2.ClearContents '<== this line for clear contents Application.CutCopyMode = True End Sub
snasui wrote: Code นั้นแค่ลบค่าในเซลล์ทิ้งไป ไม่ได้ Cut ครับ
สำหรับการปรับปรุง Code ต้องปรับปรุงมาเอง ติดแล้วค่อยถาม ไม่สามารถถามต่อเนื่องโดยไม่ผ่านการลองปรับมาเองในสิ่งที่ต้องการเพิ่มเติมจากเดิมครับ
Code: Select all
Sub Button7_Click()
Dim r1 As Range, r2 As Range
Dim rTarget As Range
With Sheets("¡ÐàªéÒ")
Set r1 = .Range("a30:g30")
Set r2 = .Range("b9:j16")
End With
With Sheets("DataM")
Set rTarget = .Range("a" & Rows.Count).End(xlUp).Offset(1, 0)
r1.Copy
rTarget.Resize(r2.Rows.Count).PasteSpecial xlPasteValues
r2.Copy
rTarget.Offset(0, r1.Columns.Count).PasteSpecial xlPasteValues
End With
With rTarget
On Error Resume Next
With .Range(r2).Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.Goto .Cells(1) ', Scroll:=True
End With
On Error GoTo 0
End With
r2.ClearContents
Application.CutCopyMode = True
End Sub