Gộp dữ liệu và ghi nguồn lấy dữ liệu

Liên hệ QC

bin.vcsc

Thành viên hoạt động
Tham gia
6/12/13
Bài viết
125
Được thích
14
Gửi anhc hị và các bạnAnh chị và các bạn có thể giúp mình mã VBA để biết dữ liệu là mình đã gộp từ sheet nào được không ah.

Ví dụ ở sheet tổng có dữ liệu và thông tin của sheet lấy dữ liệu/ mình có thể đặt tên bất kỳ khi dữ liệu đó được gộp vào sheet tổng.

Cám ơn anh chị em

1646363116077.png
 

File đính kèm

  • combine_Sheets.xlsm
    19.9 KB · Đọc: 8
Gửi anhc hị và các bạnAnh chị và các bạn có thể giúp mình mã VBA để biết dữ liệu là mình đã gộp từ sheet nào được không ah.

Ví dụ ở sheet tổng có dữ liệu và thông tin của sheet lấy dữ liệu/ mình có thể đặt tên bất kỳ khi dữ liệu đó được gộp vào sheet tổng.

Cám ơn anh chị em

View attachment 272670
Thử code này coi
Mã:
Sub ABC()
Dim ws As Worksheet, iR&
For Each ws In Worksheets
    If ws.Name <> "Combined" Then
        iR = Sheets("Combined").Range("A" & Rows.Count).End(3).Row + 1
        ws.Range("A2").Resize(ws.Range("A" & Rows.Count).End(3).Row, 2).Copy Sheets("Combined").Range("A" & iR)
        Sheets("Combined").Range("C" & iR).Resize(ws.Range("A" & Rows.Count).End(3).Row - 1) = ws.Name
    End If
Next
End Sub
 
Upvote 0
Thử code này coi
Mã:
Sub ABC()
Dim ws As Worksheet, iR&
For Each ws In Worksheets
    If ws.Name <> "Combined" Then
        iR = Sheets("Combined").Range("A" & Rows.Count).End(3).Row + 1
        ws.Range("A2").Resize(ws.Range("A" & Rows.Count).End(3).Row, 2).Copy Sheets("Combined").Range("A" & iR)
        Sheets("Combined").Range("C" & iR).Resize(ws.Range("A" & Rows.Count).End(3).Row - 1) = ws.Name
    End If
Next
End Sub
Cám ơn anh Thuận rất nhiều. Bin đã chạy được đúng như ý.
Cám ơn anh và chúc anh sức khỏe
 
Upvote 0
Gửi anh @BuiQuangThuan

Phiền anh giúp đỡ một chút xíu nữa về VBA.
Giả sử bây giờ trong tệp có nhiều Sheet và mình chỉ lấy một số Sheet không lấy hết, sau đó đặt lại tên của Sheet.
Ví dụ:
Trong tệp mẫu có 3 Sheet, nhưng chỉ lấy dữ liệu hai sheet có tên là "Clearance" và "Operration", phần nguồn trong Sheet "Combined" sẽ là "CLR" và "OPS".
Cám ơn anh Thuần nhiều.
 

File đính kèm

  • 1646624310507.png
    1646624310507.png
    20.7 KB · Đọc: 5
  • combine_Sheets.xlsm
    21.8 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Gửi anh @BuiQuangThuan

Phiền anh giúp đỡ một chút xíu nữa về VBA.
Giả sử bây giờ trong tệp có nhiều Sheet và mình chỉ lấy một số Sheet không lấy hết, sau đó đặt lại tên của Sheet.
Ví dụ:
Trong tệp mẫu có 3 Sheet, nhưng chỉ lấy dữ liệu hai sheet có tên là "Clearance" và "Operration", phần nguồn trong Sheet "Combined" sẽ là "CLR" và "OPS".
Cám ơn anh Thuần nhiều.
Thử code này coi
Mã:
Sub ABC()
Dim ws As Worksheet, iR&, x
Set ws = Sheets("Combined")
For Each x In Array("Clearance", "Operration")
    iR = ws.Range("A" & Rows.Count).End(3).Row + 1
    Sheets(x).Range("A2").Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row, 2).Copy ws.Range("A" & iR)
    'Chinh vi tri luu ten sheet o day
    If x = "Clearance" Then
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "CLR"
    Else
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "OPS"
    End If
Next
End Sub
 
Upvote 0
Thử code này coi
Mã:
Sub ABC()
Dim ws As Worksheet, iR&, x
Set ws = Sheets("Combined")
For Each x In Array("Clearance", "Operration")
    iR = ws.Range("A" & Rows.Count).End(3).Row + 1
    Sheets(x).Range("A2").Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row, 2).Copy ws.Range("A" & iR)
    'Chinh vi tri luu ten sheet o day
    If x = "Clearance" Then
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "CLR"
    Else
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "OPS"
    End If
Next
End Sub
Nên làm trường hợp tổng quát cho nhiều sheets hơn là chỉ có 2 sheets.
 
Upvote 0
Gửi anh @BuiQuangThuan

Phiền anh giúp đỡ một chút xíu nữa về VBA.
Giả sử bây giờ trong tệp có nhiều Sheet và mình chỉ lấy một số Sheet không lấy hết, sau đó đặt lại tên của Sheet.
Ví dụ:
Trong tệp mẫu có 3 Sheet, nhưng chỉ lấy dữ liệu hai sheet có tên là "Clearance" và "Operration", phần nguồn trong Sheet "Combined" sẽ là "CLR" và "OPS".
Cám ơn anh Thuần nhiều.
Bạn gõ trên sheet như sau:

1646638486091.png

Xong chạy code này:

Mã:
Sub GopDL_HLMT()
    Dim strSht() As String, strShtName() As String, i As Integer, strSQL As String
    strSht = Split(Sheet5.Range("G2"), ",")
    strShtName = Split(Sheet5.Range("H2"), ",")
    For i = LBound(strSht) To UBound(strSht)
        strSQL = strSQL & " Union All Select [Name], [Age], '" & strShtName(i) & "'" & " From [" & strSht(i) & "$]"
    Next
    With CreateObject("ADODB.Recordset")
        .Open (Right(strSQL, Len(strSQL) - 10)), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0 Xml;"
        Sheet5.Range("A10").CopyFromRecordset .DataSource
    End With
    
End Sub
 
Upvote 0
Thử code này coi
Mã:
Sub ABC()
Dim ws As Worksheet, iR&, x
Set ws = Sheets("Combined")
For Each x In Array("Clearance", "Operration")
    iR = ws.Range("A" & Rows.Count).End(3).Row + 1
    Sheets(x).Range("A2").Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row, 2).Copy ws.Range("A" & iR)
    'Chinh vi tri luu ten sheet o day
    If x = "Clearance" Then
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "CLR"
    Else
        ws.Range("C" & iR).Resize(Sheets(x).Range("A" & Rows.Count).End(3).Row - 1) = "OPS"
    End If
Next
End Sub
Cám ơn bác @BuiQuangThuan rất nhiều. Bin đã chạy được tệp.
 
Upvote 0
Cám ơn @BuiQuangThuan; @Hai Lúa Miền Tây; @Hoàng Tuấn 868 đã quan tâm và hỗ trợ.

Bin xin phép các anh chị và các bạn giúp đỡ thêm chút xíu.

Bây giờ trong trường hợp khác nữa, dữ liệu cần gộp nằm ở một tệp khác thì mình phải làm như thế nào.

Từ tệp "combine_Sheets_New" mở tệp "raw_Sheets" và lấy 3 thẻ và gộp nối dữ liệu lại.

Xin cám ơn anh chị và các bạn rất nhiều. Mong nhận được chỉ dẫn để học hỏi thêm kiến thức.

1647266515518.png
 

File đính kèm

  • raw_Sheets.xlsm
    20.5 KB · Đọc: 1
  • combine_Sheets_New.xlsm
    9.3 KB · Đọc: 1
Upvote 0
Cám ơn @BuiQuangThuan; @Hai Lúa Miền Tây; @Hoàng Tuấn 868 đã quan tâm và hỗ trợ.

Bin xin phép các anh chị và các bạn giúp đỡ thêm chút xíu.

Bây giờ trong trường hợp khác nữa, dữ liệu cần gộp nằm ở một tệp khác thì mình phải làm như thế nào.

Từ tệp "combine_Sheets_New" mở tệp "raw_Sheets" và lấy 3 thẻ và gộp nối dữ liệu lại.

Xin cám ơn anh chị và các bạn rất nhiều. Mong nhận được chỉ dẫn để học hỏi thêm kiến thức.

View attachment 273137
Bỏ chung 2 files vào chung thư mục rồi chạy code sau:

Mã:
Sub GopDL_HLMT()
    Dim strSht() As String, strShtName() As String, i As Integer, strSQL As String
    strSht = Split(Sheet5.Range("E9"), ",")
    strShtName = Split(Sheet5.Range("F9"), ",")
    For i = LBound(strSht) To UBound(strSht)
        strSQL = strSQL & " Union All Select [Name], [Age], '" & strShtName(i) & "'" & " From [" & strSht(i) & "$]"
    Next
    With CreateObject("ADODB.Recordset")
        .Open (Right(strSQL, Len(strSQL) - 10)), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "/raw_Sheets.xlsm;Extended Properties=Excel 12.0 Xml;"
        Sheet5.Range("A14").CopyFromRecordset .DataSource
    End With
    
End Sub
 

File đính kèm

  • Gop.rar
    34.3 KB · Đọc: 9
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom