VBA Update Data theo điều kiện có sẵn

Liên hệ QC

ngoctuyen1995

Thành viên hoạt động
Tham gia
25/4/17
Bài viết
194
Được thích
19
Giới tính
Nữ
Thân chào cả nhà GPEX!
Mong cả nhà giúp em một việc ạ.
Hiện tại em có File data bao gồm 02 sheet (Data và Update).
Em muốn dùng VBA để Update dữ liệu từ Sheet Update dựa vào điều kiện store code và Columns Name tương ứng với Sheet data.
Ví dụ:

Bên Sheet Data hiện tại store code 15639815 cột Q1 là 2, Nhưng trong sheet update Store này ở cột Q1 phải update Thành 1 ạ thì sẽ cập nhập dữ liệu Store này ở Sheet Data bằng 1 ạ.
Trong file em có làm Kết quả ở Sheet Ket Qua.
Mong cả nhà giúp đỡ.
Em chân thành cảm ơn ạ.
 

File đính kèm

  • Test.xlsx
    12.8 KB · Đọc: 10
Có khi nào dữ liệu thêm vào nó vượt qua cái data ban đầu không?
Chẳn hạn ban đầu không có mã code XXXXX. giờ update thêm có mã đó không
 
Upvote 0
Thân chào cả nhà GPEX!
Mong cả nhà giúp em một việc ạ.
Hiện tại em có File data bao gồm 02 sheet (Data và Update).
Em muốn dùng VBA để Update dữ liệu từ Sheet Update dựa vào điều kiện store code và Columns Name tương ứng với Sheet data.
Ví dụ:

Bên Sheet Data hiện tại store code 15639815 cột Q1 là 2, Nhưng trong sheet update Store này ở cột Q1 phải update Thành 1 ạ thì sẽ cập nhập dữ liệu Store này ở Sheet Data bằng 1 ạ.
Trong file em có làm Kết quả ở Sheet Ket Qua.
Mong cả nhà giúp đỡ.
Em chân thành cảm ơn ạ.
Bạn dùng code sau nhé:

Mã:
Sub CapNhatDL_HLMT()
    Dim strCol() As Variant, i As Integer
    strCol = Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1"""
        For i = LBound(strCol) To UBound(strCol)
            .Execute "Update [Data$] a Inner join [Update$] b on a.[Store Code]=b.[Store Code] Set a.[" & strCol(i) & "]=b.[To update value] Where b.[Columns Name]='" & strCol(i) & "'"
        Next
    End With
End Sub
 

File đính kèm

  • Test_Update_ADO (1).xlsb
    23.1 KB · Đọc: 29
Upvote 0
Có khi nào dữ liệu thêm vào nó vượt qua cái data ban đầu không?
Chẳn hạn ban đầu không có mã code XXXXX. giờ update thêm có mã đó không
số lượng data và số lượng colums sẽ thay đổi ạ, Data em đưa lên chỉ là demo để cho đơn giản trong việc diễn giải cách em muốn làm thôi ạ
Bài đã được tự động gộp:

Bạn dùng code sau nhé:

Mã:
Sub CapNhatDL_HLMT()
    Dim strCol() As Variant, i As Integer
    strCol = Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1"""
        For i = LBound(strCol) To UBound(strCol)
            .Execute "Update [Data$] a Inner join [Update$] b on a.[Store Code]=b.[Store Code] Set a.[" & strCol(i) & "]=b.[To update value] Where b.[Columns Name]='" & strCol(i) & "'"
        Next
    End With
End Sub
em cảm ơn anh đã quan tâm và giúp đỡ em ạ. Vì data e đưa lên chỉ là demo nên số lượng cột nó sẽ ít để dễ dàng cho việc em diễn giải, tên và số lượng Columns name bên Data sẽ thay đổi.
Anh có thể chỉnh code được không ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
em cảm ơn anh đã quan tâm và giúp đỡ em ạ. Vì data e đưa lên chỉ là demo nên số lượng cột nó sẽ ít để dễ dàng cho việc em diễn giải, tên và số lượng Columns name bên Data sẽ thay đổi.
Anh có thể chỉnh code được không ạ.
Thì bạn xác định lại cái strCol là được mà

Mã:
Sub CapNhatDL_HLMT()
    Dim strCol  As Variant, i As Integer
    strCol = Sheet1.Range("B1:I8").Value  'Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1"""
        For i = LBound(strCol) To UBound(strCol)
            .Execute "Update [Data$] a Inner join [Update$] b on a.[Store Code]=b.[Store Code] Set a.[" & strCol(1, i) & "]=b.[To update value] Where b.[Columns Name]='" & strCol(1, i) & "'"
        Next
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn xác định lại cái strCol là được mà

Mã:
Sub CapNhatDL_HLMT()
    Dim strCol  As Variant, i As Integer
    strCol = Sheet1.Range("B1:I8").Value  'Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8")
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1"""
        For i = LBound(strCol) To UBound(strCol)
            .Execute "Update [Data$] a Inner join [Update$] b on a.[Store Code]=b.[Store Code] Set a.[" & strCol(1, i) & "]=b.[To update value] Where b.[Columns Name]='" & strCol(1, i) & "'"
        Next
    End With
End Sub
Cảm ơn anh đã giúp đỡ..
Chúc anh sức khỏe và thành công ạ.
 
Upvote 0
Web KT
Back
Top Bottom