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 summary()
Sheets("data").Visible = True
Worksheets.Add(After:=Worksheets(1)).Name = "data2"
Worksheets.Add(After:=Worksheets(1)).Name = "sheet4"
'************************************************
Sheets("Sheet4").Select
Range("A1") = "DESCRIPTION"
Range("B1") = "ACCT"
Range("C1") = "D-AMOUNT"
Range("D1") = "C-AMOUNT"
Range("E1") = "COX1"
Range("F1") = "COX2"
Range("G1") = "COX3"
Range("H1") = "COX4"
Range("I1") = "COX5"
Range("J1") = "COX6"
Range("K1") = "COX7"
Range("L1") = "COX8"
Range("M1") = "COX9"
Range("N1") = "COX10"
Sheets("data2").Select
Range("A8") = "DESCRIPTION"
Range("B8") = "ACCT"
Range("C8") = "D-AMOUNT"
Range("D8") = "C-AMOUNT"
Range("E8") = "COX1"
Range("F8") = "COX2"
Range("G8") = "COX3"
Range("H8") = "COX4"
Range("I8") = "COX5"
Range("J8") = "COX6"
Range("K8") = "COX7"
Range("L8") = "COX8"
Range("M8") = "COX9"
Range("N8") = "COX10"
'***************************
Sheets("Sheet4").Select
Range("A2:V498").Select
Selection.ClearContents
Range("A2").Select
Sheets("DETAIL").Select
Range("Q10:AD130").Select
Selection.Copy
Sheets("Sheet4").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
Range("C2:C1000").Select
Selection.ClearContents
Range("A2").Select
'*********************************************
Range("A1:n100").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
'******************************
Range("A1:N185").Select
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("N2:N121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("B2:B121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("e2:e121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet4").Sort
.SetRange Range("A1:N121")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A2").Select
'**************************************
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'**************************************************
Dim sa1 As String
Dim sa2 As String
Dim sa3 As String
Dim sa4 As String
Dim sa5 As String
Application.ScreenUpdating = False
For i = 2 To 122
sa1 = Application.Worksheets("sheet4").Cells(i, 1)
sa2 = Application.Worksheets("sheet4").Cells(i, 2)
sa3 = Application.Worksheets("sheet4").Cells(i, 5)
Application.Worksheets("detail").Activate
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=1, Criteria1:=sa1
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=2, Criteria1:=sa2
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=5, Criteria1:=sa3
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=13
Range("Q10:AD130").Select
Range("AD130").Activate
Selection.Copy
Application.Worksheets("data").Activate
Range("a2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("a1").Select
Application.Worksheets("detail").Activate
'**************************************
Cells.Select
Range("J1").Activate
ActiveSheet.ShowAllData
Range("J1").Select
'******************************************
Range("Q2").Select
'*******************************
Dim lastRow As Long
Sheets("data").Select
Range("A1:N1").Select
Selection.Copy
Sheets("data2").Select
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
ActiveSheet.Cells(lastRow + 1, "A").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A5").Select
Sheets("data").Select
'***********************************
Application.Worksheets("data").Activate
Range("A2:S317").Select
Selection.ClearContents
Range("A2").Select
'********************************************
Next i
Application.ScreenUpdating = True
'*******************************
Sheets("data2").Select
Range("A9:N129").Select
Range("N9").Activate
Selection.Copy
Sheets("SUM").Select
Range("A9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A9").Select
'********************************
Application.DisplayAlerts = False
Sheets("data2").Delete
Sheets("Sheet4").Delete
Application.DisplayAlerts = True
Sheets("data").Visible = False
End Sub
Code: Select all
Sheets("Sheet4").Select
' Range("A2:V498").Select
Range("A2:V498").ClearContents
' Range("A2").Select
Sheets("DETAIL").Select
' Range("Q10:AD130").Select
Range("Q10:AD130").Copy
Sheets("Sheet4").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Range("A2").Select
' Range("C2:C1000").Select
Range("C2:C1000").ClearContents
' Range("A2").Select
'*********************************************
Range("A1:n100").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
ClearContents
ก็ให้เขียน Clear ได้เลย ไม่ต้องทำการ Select เซลล์นั้นอีก เป็นต้นCode: Select all
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
End Sub
Code: Select all
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Code: Select all
Sub summary()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("data").Visible = True
Worksheets.Add(After:=Worksheets(1)).Name = "data2"
Worksheets.Add(After:=Worksheets(1)).Name = "sheet4"
'************************************************
Sheets("Sheet4").Select
Range("A1") = "DESCRIPTION"
Range("B1") = "ACCT"
Range("C1") = "D-AMOUNT"
Range("D1") = "C-AMOUNT"
Range("E1") = "COX1"
Range("F1") = "COX2"
Range("G1") = "COX3"
Range("H1") = "COX4"
Range("I1") = "COX5"
Range("J1") = "COX6"
Range("K1") = "COX7"
Range("L1") = "COX8"
Range("M1") = "COX9"
Range("N1") = "COX10"
Sheets("data2").Select
Range("A8") = "DESCRIPTION"
Range("B8") = "ACCT"
Range("C8") = "D-AMOUNT"
Range("D8") = "C-AMOUNT"
Range("E8") = "COX1"
Range("F8") = "COX2"
Range("G8") = "COX3"
Range("H8") = "COX4"
Range("I8") = "COX5"
Range("J8") = "COX6"
Range("K8") = "COX7"
Range("L8") = "COX8"
Range("M8") = "COX9"
Range("N8") = "COX10"
'***************************
Sheets("Sheet4").Select
Range("A2:V498").ClearContents
'Range("A2").Select
Sheets("DETAIL").Select
Range("Q10:AD130").Copy
Sheets("Sheet4").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Range("A2").Select
Range("C2:C1000").ClearContents
'Range("A2").Select
'*********************************************
Range("A1:n100").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
'******************************
Range("A1:N185").Select
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("N2:N121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("B2:B121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("e2:e121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet4").Sort
.SetRange Range("A1:N121")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Range("A2").Select
'**************************************
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'**************************************************
Dim sa1 As String
Dim sa2 As String
Dim sa3 As String
Dim sa4 As String
Dim sa5 As String
Application.ScreenUpdating = False
For i = 2 To 122
sa1 = Application.Worksheets("sheet4").Cells(i, 1)
sa2 = Application.Worksheets("sheet4").Cells(i, 2)
sa3 = Application.Worksheets("sheet4").Cells(i, 5)
Application.Worksheets("detail").Activate
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=1, Criteria1:=sa1
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=2, Criteria1:=sa2
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=5, Criteria1:=sa3
ActiveSheet.Range("$Q$9:$AD$129").AutoFilter Field:=13
Range("Q10:AD130").Copy
' Range("AD130").Activate
' Selection.Copy
Application.Worksheets("data").Activate
Range("a2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Calculate
Range("a1").Select
Application.Worksheets("detail").Activate
'**************************************
' Cells.Select
' Range("J1").Activate
ActiveSheet.ShowAllData
' Range("J1").Select
'******************************************
'Range("Q2").Select
'*******************************
Dim lastRow As Long
Sheets("data").Select
Range("A1:N1").Copy
Sheets("data2").Select
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
ActiveSheet.Cells(lastRow + 1, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Range("A5").Select
Sheets("data").Select
'***********************************
Application.Worksheets("data").Activate
Range("A2:S317").ClearContents
'Range("A2").Select
'********************************************
Next i
Application.ScreenUpdating = True
'*******************************
Sheets("data2").Select
Range("A9:N129").Select
Range("N9").Activate
Selection.Copy
Sheets("SUM").Select
Range("A9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Range("A9").Select
'********************************
Application.DisplayAlerts = False
Sheets("data2").Delete
Sheets("Sheet4").Delete
Application.DisplayAlerts = True
Sheets("data").Visible = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Code: Select all
Sub summary()
Dim rngDesc As Range, rngAcct As Range
Dim rngDAmt As Range, rngCox1 As Range
Dim rngRmvDup As Range, rngRD As Range
With Sheets("DETAIL")
Set rngDesc = .Range("q10", .Range("q" & .Rows.Count).End(xlUp))
Set rngAcct = rngDesc.Offset(0, 1)
Set rngDAmt = rngDesc.Offset(0, 2)
Set rngCox1 = rngDesc.Offset(0, 4)
End With
Sheets("data").Visible = True
Worksheets.Add(After:=Worksheets(1)).Name = "sheet4"
'************************************************
Sheets("DETAIL").Range("q7:ad7").Copy Sheets("Sheet4").Range("a1")
Sheets("Sheet4").Select
Range("A2:V498").ClearContents
'Range("A2").Select
Sheets("DETAIL").Select
Range("Q10:AD130").Copy
Sheets("Sheet4").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Range("A2").Select
Range("C2:C1000").ClearContents
'Range("A2").Select
'*********************************************
Range("A1:n100").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
'******************************
Range("A1:N185").Select
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("N2:N121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("B2:B121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("e2:e121") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet4").Sort
.SetRange Range("A1:N121")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
With Sheets("sheet4")
Set rngRmvDup = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
For Each rngRD In rngRmvDup
rngRD.Offset(0, 2).Value = Application.SumIfs(rngDAmt, rngDesc, rngRD.Value, _
rngAcct, rngRD.Offset(0, 1).Value, rngCox1, rngRD.Offset(0, 4).Value)
Next rngRD
End With
Sheets("Sheet4").Range("a1").CurrentRegion.Copy Sheets("SUM").Range("a8")
Application.DisplayAlerts = False
Sheets("Sheet4").Delete
Application.DisplayAlerts = True
Sheets("data").Visible = False
End Sub