Option Explicit
Sub TongHopDL_HLMT()
Dim strSQL As String, strSQLTotal As String, strSht As String
strSht = "[" & Sheet1.Name & "$A8:I65000]"
strSQL = ""
strSQL = strSQL & "SELECT F1, " & vbCrLf
strSQL = strSQL & " F2, " & vbCrLf
strSQL = strSQL & " IIF(ISNULL(F3), 0, F3) AS Tuan1, " & vbCrLf
strSQL = strSQL & " 0 AS Tuan2, " & vbCrLf
strSQL = strSQL & " 0 AS Tuan3, " & vbCrLf
strSQL = strSQL & " 0 AS Tuan4 " & vbCrLf
strSQL = strSQL & "FROM " & strSht & vbCrLf
strSQL = strSQL & " UNION ALL " & vbCrLf
strSQL = strSQL & "SELECT F1, " & vbCrLf
strSQL = strSQL & " F4, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " IIF(ISNULL(F5), 0, F5), " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " 0 " & vbCrLf
strSQL = strSQL & "FROM " & strSht & vbCrLf
strSQL = strSQL & " UNION ALL " & vbCrLf
strSQL = strSQL & "SELECT F1, " & vbCrLf
strSQL = strSQL & " F6, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " IIF(ISNULL(F7), 0, F7), " & vbCrLf
strSQL = strSQL & " 0 " & vbCrLf
strSQL = strSQL & "FROM " & strSht & vbCrLf
strSQL = strSQL & " UNION ALL " & vbCrLf
strSQL = strSQL & "SELECT F1, " & vbCrLf
strSQL = strSQL & " F8, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " 0, " & vbCrLf
strSQL = strSQL & " IIF(ISNULL(F9), 0, F9) " & vbCrLf
strSQL = strSQL & "FROM " & strSht
strSQLTotal = ""
strSQLTotal = strSQLTotal & "SELECT F1, " & vbCrLf
strSQLTotal = strSQLTotal & " F2, " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(TUAN1) AS Tuan1Total, " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(TUAN2) AS Tuan2Total, " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(TUAN3) AS Tuan3Total, " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(TUAN4) AS Tuan4Total " & vbCrLf
strSQLTotal = strSQLTotal & "FROM (" & strSQL & ") " & vbCrLf
strSQLTotal = strSQLTotal & "WHERE F2 IS NOT NULL " & vbCrLf
strSQLTotal = strSQLTotal & "GROUP BY F1, " & vbCrLf
strSQLTotal = strSQLTotal & " F2 " & vbCrLf
strSQLTotal = strSQLTotal & "UNION ALL " & vbCrLf
strSQLTotal = strSQLTotal & "SELECT F1 & ' Total:', " & vbCrLf
strSQLTotal = strSQLTotal & " '', " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F3), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F5), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F7), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F9) " & vbCrLf
strSQLTotal = strSQLTotal & "FROM (" & strSht & ") " & vbCrLf
strSQLTotal = strSQLTotal & "WHERE F1 IS NOT NULL " & vbCrLf
strSQLTotal = strSQLTotal & "GROUP BY F1 " & vbCrLf
strSQLTotal = strSQLTotal & "UNION ALL " & vbCrLf
strSQLTotal = strSQLTotal & "SELECT 'z Grand Total:', " & vbCrLf
strSQLTotal = strSQLTotal & " '', " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F3), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F5), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F7), " & vbCrLf
strSQLTotal = strSQLTotal & " Sum(F9) " & vbCrLf
strSQLTotal = strSQLTotal & "FROM " & strSht
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No"""
Sheet2.Range("A5:F1000").ClearContents
Sheet2.Range("A5").CopyFromRecordset .Execute("Select * From (" & strSQLTotal & ") Order By F1")
End With
End Sub