You are on page 1of 4

Copy dữ liệu từ nhiều báo cáo vào 1 báo cáo tổng

không cần mở báo cáo con


blog.hocexcel.online/copy-du-lieu-tu-nhieu-bao-cao-vao-1-bao-cao-tong-khong-can-mo-bao-cao-con.html

dtnguyen November 29, 2014

Đây là bài số #11 trong loạt videos Hướng dẫn VBA trong Excel và ứng dụng của VBA
trong công việc

Watch Video At: https://youtu.be/ShTVo4sHAlc

Công việc consolidate và copy dữ liệu từ nhiều nguồn báo cáo khác nhau vào một bảng tính
trong excel để thực hiện công việc phân tích có thể mất khá nhiều thời gian nếu làm bằng
tay. Đoạn VBA được giới thiệu trong bài này có thể định hướng cho các bạn làm công việc
này với sự giúp đỡ của VBA.

Code VBA sử dụng trong bài:

Option Explicit

Sub import_data()

Dim master As Worksheet, sh As Worksheet

Dim wk As Workbook

Dim strFolderPath As String

1/4
Dim selectedFiles As Variant

Dim iFileNum As Integer, iLastRowReport As Integer, iNumberOfRowsToPaste As


Integer

Dim strFileName As String

Dim rID As Range, rQuantity As Range, rUnitPrice As Range, rKM As Range, rMC
As Range

Dim iCurrentLastRow As Integer, iRowStartToPaste As Integer

Dim startTime As Double

getSpeed (True)

Set master = ActiveWorkbook.Sheets("Data")

strFolderPath = ActiveWorkbook.Path

ChDrive strFolderPath

ChDir strFolderPath

On Error GoTo NoFileSelected

selectedFiles = Application.GetOpenFilename( _

filefilter:="Excel Files (*.xls*),*.xlsx*", MultiSelect:=True)

startTime = Timer

For iFileNum = LBound(selectedFiles) To UBound(selectedFiles)

strFileName = selectedFiles(iFileNum)

Set wk = Workbooks.Open(strFileName)

For Each sh In wk.Sheets

If sh.Name Like "*-REPORT" Then

With sh

iLastRowReport = .Range("A" & Rows.Count).End(xlUp).Row

iNumberOfRowsToPaste = iLastRowReport - 6 + 1

2/4
Set rID = .Range("A6:A" & iLastRowReport)

Set rQuantity = .Range("C6:C" & iLastRowReport)

Set rUnitPrice = .Range("F6:F" & iLastRowReport)

Set rKM = .Range("I6:I" & iLastRowReport)

Set rMC = .Range("K6:K" & iLastRowReport)

With master

iCurrentLastRow = .Range("A" & Rows.Count).End(xlUp).Row

iRowStartToPaste = iCurrentLastRow + 1

.Range("A" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rID.Value2

.Range("C" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) =


rQuantity.Value2

.Range("E" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) =


rUnitPrice.Value2

.Range("G" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rKM.Value2

.Range("I" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rMC.Value2

End With

End With

End If

Next sh

wk.Close

Next

MsgBox "Done in " & Int(Timer - startTime) & " s."

getSpeed (False)

NoFileSelected:

MsgBox "Chua co file nao duoc chon!"

End Sub

Function getSpeed(doIt As Boolean)

3/4
Application.ScreenUpdating = Not (doIt)

Application.EnableEvents = Not (doIt)

Application.Calculation = IIf(doIt, xlCalculationManual, xlCalculationAutomatic)

End Function

view raw import_data.bas hosted with by GitHub

Download tài liệu kèm theo video tại đây


Download

4/4

You might also like