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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Sub PasteData()
Dim rSource As Range
Dim rTarget As Range
Dim Lc As Integer, Ac As Integer
Dim FisYear As String
FisYear = InputBox("Please enter Year", "Year for UpdateStock")
If FisYear = "" Then
Exit Sub
End If
Range("A11:C60").Select
Selection.ClearContents
Application.ScreenUpdating = True
Lc = Sheets("StockDay").Range("A65536").End(xlUp).Value + 1
With Worksheets("Report1")
Ac = Application.CountIf(.Range("B:B"), Lc)
Af = Application.Match(Lc, .Range("B:B"), 0)
End With
If Ac = 0 Then
MsgBox "No data for paste."
Exit Sub
End If
Set rSource = Sheets("Report1").Range( _
"B" & Af & ":C" & Ac + Af - 1 & ",G" & Af & ":G" & Ac + Af - 1)
Set rTarget = Sheets("StockDay").Range("A65536").End(xlUp).Offset(1, 0)
rSource.Copy
rTarget.PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Record Complete"
Application.ScreenUpdating = True
End Sub
Code: Select all
Sub EditOldStockDay()
Dim rs As Integer, i As Integer
Dim j As Integer, k As Integer
On Error Resume Next
rs = InputBox("Enter year for copy.")
i = Application.Match(rs, Worksheets("Report1") _
.Range("B:B"), 0)
j = Application.CountIf(Worksheets("Report1") _
.Range("B:B"), rs)
k = Application.Match(rs, Worksheets("StockDay") _
.Range("A:A"), 0)
If j = 0 Then
MsgBox "Year not found."
Exit Sub
End If
Worksheets("Report1").Cells(i, 2).Resize(j).Copy
Worksheets("StockDay").Cells(k, 1).PasteSpecial xlPasteValues
Worksheets("Report1").Cells(i, 3).Resize(j).Copy
Worksheets("StockDay").Cells(k, 2).PasteSpecial xlPasteValues
Worksheets("Report1").Cells(i, 7).Resize(j).Copy
Worksheets("StockDay").Cells(k, 3).PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
เมื่อมีบุคคลย้ายเพิ่มเข้ามาในหน่วยงานทำให้ผลการคำนวณที่ซีท Report1 ,Report3 แสดงค่าผิดพลาดครับ
ดูได้จากซีท Personal ครับ รหัส 50203 ได้เพิ่มเข้ามาในระบบและรหัสนี้ก็ได้มีการลาเกิดขึ้นทำให้ซีทสรุป Report1 และ Report3 เกิด Error ครับจะทราบได้อย่างไรว่ามีบุคคลใหม่เข้ามาครับ
เมื่อย้ายมากลางปีก็ต้องไปเพิ่มเป็นยอดยกไปในปี 2554 ครับซึ่งจะแสดงเป็นยอดยกมาในปี 2555 ครับ เพราะสูตรที่เขียนเป็นการดึงยอดยกไปของปีเก่าหรือยอดยกมาในปีนี้ เช่นตามด้านล่างjoo wrote:คือแบบนี้ครับในช่วงปีงบประมาณ 2554 บุคคลรหัส 50203 ยังไม่ได้ย้ายเข้ามาทำงานในแผนกนี้ แต่พอปีงบประมาณ 2555 บุคคลรหัส 50203 ได้ย้ายเข้ามาทำงานที่แผนกนี้และมีวันลาพักร้อนสะสมมาด้วยรายละเอียดดังซีท Personal เซลล์ T5 มียอดสะสมมา 8 วัน และเมื่อบุคคลรหัสนี้ได้ทำการลาไป 2 วัน ยอดที่แสดงในซีท Report1 และ Report3 ที่เซลล์ D31 ก็ควรจะแสดงยอดสะสมยกมาเป็น 8 วัน
ตรงจุดนี้มีวิธีการเพิ่มอย่างไรครับจากสูตรจะนำปีของคอลัมน์ B แล้วหักออกด้วย 1 นั่นแสดงว่าเป็นการนำยอดยกมาของปีก่อนมาแสดง ถ้าปีนี้เป็นปี 2555 ก็จะนำยอดยกไปของปี 2554 มาแสดง ถ้าไม่มีข้อมูลในปี 2554 ก็จะได้ยอดเป็น 0 หากบอกว่าย้ายมากลางปี 2555 ก็จะต้องกลับไปเพิ่มให้บุคคลที่เพิ่งย้ายเข้ามามียอดยกไปของปี 2554 ด้วย อันนี้สำหรับเพื่อให้สามารถใช้คำนวณได้ ทั้งนี้เพราะยอดยกมายกไปนี้เป็นการอ้างถึงปีเป็นหลักครับ