Code VBA copy dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Dong Le

Thành viên chính thức
Tham gia
27/4/12
Bài viết
95
Được thích
1
Chào các anh/chị và các bạn,

Nhờ các bạn giúp mình code copy dữ liệu dang sheet khác như yêu cầu mình nêu chi tiết trong file đính kèm. Mình viết được code copy rồi nhưng chưa viết được code đổi ký tự trong cell.

Cảm ơn các bạn nhiều.
 

File đính kèm

Chào các anh/chị và các bạn,

Nhờ các bạn giúp mình code copy dữ liệu dang sheet khác như yêu cầu mình nêu chi tiết trong file đính kèm. Mình viết được code copy rồi nhưng chưa viết được code đổi ký tự trong cell.

Cảm ơn các bạn nhiều.
Copy này vào thay thế đoạn code bạn có
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F6:F8]) Is Nothing And UCase(Target.Value) = "OK" Then
    Sheet1.Range(Target.Offset(, -1).Address).Value = "EMPTY"
End If
End Sub
 
Upvote 0
Thử sửa lại code như sau:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 6 Then
      If UCase(Target) = "OK" Then
        With Sheets("Sheet1").[a65536].End(3)
            Range(Cells(Target.Row, 1), Cells(Target.Row, 4)).Copy .Offset(1)
            .Offset(1, 4) = "EMPTY"
        End With
      End If
End If
End Sub
 
Upvote 0
Thử sửa lại code như sau:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 6 Then
      If UCase(Target) = "OK" Then
        With Sheets("Sheet1").[a65536].End(3)
            Range(Cells(Target.Row, 1), Cells(Target.Row, 4)).Copy .Offset(1)
            .Offset(1, 4) = "EMPTY"
        End With
      End If
End If
End Sub

Cảm ơn bạn, nếu ô muốn thay đổi ko nằm ở cột cuối cùng (như file) thì dùng câu lệnh gì để copy đoạn cuối luôn.

Trân trọng cảm ơn.
 

File đính kèm

Upvote 0
Cảm ơn bạn, nếu ô muốn thay đổi ko nằm ở cột cuối cùng (như file) thì dùng câu lệnh gì để copy đoạn cuối luôn.

Trân trọng cảm ơn.
Thì bạn thay code trên = code sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 8 Then
      If UCase(Target) = "OK" Then
        With Sheets("Sheet1").[a65536].End(3)
            Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Copy .Offset(1)
            .Offset(1, 4) = "EMPTY"
            
        End With
      End If
End If
End Sub
 
Upvote 0
Thì bạn thay code trên = code sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 8 Then
      If UCase(Target) = "OK" Then
        With Sheets("Sheet1").[a65536].End(3)
            Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Copy .Offset(1)
            .Offset(1, 4) = "EMPTY"
            
        End With
      End If
End If
End Sub

Cảm ơn bạn, mình bỏ dòng này đi thì lệnh vẫn chạy bình thường? mình chưa rõ bạn dùng câu lệnh này để mục đích là gì?


On Error Resume Next
 
Upvote 0
Cảm ơn bạn, mình bỏ dòng này đi thì lệnh vẫn chạy bình thường? mình chưa rõ bạn dùng câu lệnh này để mục đích là gì?


On Error Resume Next

Bạn bỏ dòng trên, rồi tô khối vài cell ở cột H của Sheet3 rồi nhấn Delete thử xem điều gì sẽ xảy ra nhé.
 
Upvote 0
Cái này là căn bản của lập trình mà ta ...

Uh, mình mới học tập tọe thôi, đa số học nhanh để đáp ứng công việc chứ chưa đi lên từ căn bản :)

Gửi bạn Hai Lúa Miền Tây: cảm ơn bạn vì đã giúp mình đoạn code trên, giờ mình muốn sau khi Copy lệnh sang sheet2 thì nó sum lại như sheet1(file đính kèm). Bạn giúp mình nhé!
 

File đính kèm

Upvote 0
Uh, mình mới học tập tọe thôi, đa số học nhanh để đáp ứng công việc chứ chưa đi lên từ căn bản :)

Gửi bạn Hai Lúa Miền Tây: cảm ơn bạn vì đã giúp mình đoạn code trên, giờ mình muốn sau khi Copy lệnh sang sheet2 thì nó sum lại như sheet1(file đính kèm). Bạn giúp mình nhé!
Điều kiện theo như bạn mô tả phải bỏ cột seal ra chứ bạn.
 
Upvote 0
Những cột có số ko trùng nhau như cột B và C thì bỏ ra bạn ạ!

Vậy kết quả cột dữ liệu B và C là trống chứ, phải không bạn?

Mã:
Private Sub Worksheet_Activate()
Dim cn As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
  On Error GoTo BaoLoi
        With cn
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                           "Data Source=" & ThisWorkbook.FullName & _
                                           ";Extended Properties=""Excel 8.0;HDR=No;"";"
            .Open
        End With
        With adoRS
            .ActiveConnection = cn
            .Open "SELECT F1, '' as T1,'' as T2, F4,F5,F6,F7,F8, SUM(F9) FROM [Sheet2$A6:I65000] " & _
                      "GROUP BY F1, F4,F5,F6,F7,F8 " & _
                      "HAVING SUM(F9) >0"
        End With
        Sheets("Sheet1").Range("A6").CopyFromRecordset adoRS
        adoRS.Close: cn.Close
        Set cn = Nothing: Set adoRS = Nothing
    Exit Sub
BaoLoi:
MsgBox Err.Description

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Upvote 0
Câu này hổng hiểu, Ví dụ của bạn ở sheet1 đâu thấy bỏ cái gì ra?
Làm "tuốt tuồn tuột" thí cái đi, hổng chịu chỗ nào thì sửa sau.

Gửi bạn Bate và Hai Lúa Miền Tây,

Cột B - Ctnr và cột C - Seal thì ko trùng nhau nên khi cộng lại thì bỏ thông tin 2 cột này đi,
 

File đính kèm

Upvote 0
Gửi bạn Bate và Hai Lúa Miền Tây,

Cột B - Ctnr và cột C - Seal thì ko trùng nhau nên khi cộng lại thì bỏ thông tin 2 cột này đi,
Vậy còn khỏe nữa.
Chép đè code này lên cái cũ xem:
PHP:
Public Sub GPE()
Dim Rng(), Arr(), I As Long, J As Long, K As Long, Dic As Object, Tem As Variant
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    Rng = .Range(.[A6], .[A65000].End(xlUp)).Resize(, 10).Value
End With
ReDim Arr(1 To UBound(Rng, 1), 1 To 9)
    For I = 1 To UBound(Rng, 1)
        If UCase(Rng(I, 10)) = "OK" Then
                Tem = Rng(I, 1)
            If Not Dic.Exists(Tem) Then
                K = K + 1
                Dic.Add Tem, K
                Arr(K, 1) = Tem
                For J = 4 To 9
                    Arr(K, J) = Rng(I, J)
                Next J
            Else
                Arr(Dic.Item(Tem), 9) = Arr(Dic.Item(Tem), 9) + Rng(I, 9)
            End If
        End If
    Next I
With Sheets("GPE")
    .[A6:I1000].ClearContents
    If K Then .[A6].Resize(K, 9).Value = Arr
End With
Set Dic = Nothing
End Sub
 
Upvote 0
Vậy còn khỏe nữa.
Chép đè code này lên cái cũ xem:
PHP:
Public Sub GPE()
Dim Rng(), Arr(), I As Long, J As Long, K As Long, Dic As Object, Tem As Variant
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    Rng = .Range(.[A6], .[A65000].End(xlUp)).Resize(, 10).Value
End With
ReDim Arr(1 To UBound(Rng, 1), 1 To 9)
    For I = 1 To UBound(Rng, 1)
        If UCase(Rng(I, 10)) = "OK" Then
                Tem = Rng(I, 1)
            If Not Dic.Exists(Tem) Then
                K = K + 1
                Dic.Add Tem, K
                Arr(K, 1) = Tem
                For J = 4 To 9
                    Arr(K, J) = Rng(I, J)
                Next J
            Else
                Arr(Dic.Item(Tem), 9) = Arr(Dic.Item(Tem), 9) + Rng(I, 9)
            End If
        End If
    Next I
With Sheets("GPE")
    .[A6:I1000].ClearContents
    If K Then .[A6].Resize(K, 9).Value = Arr
End With
Set Dic = Nothing
End Sub

Cảm ơn bạn Ba tê, nhưng ý mình muốn là từ sheet3-> copy sang Sheet2 rồi cộng luôn vào sheet1(ko thêm điều kiện ở sheet2 nữa) chứ ko phải gộp lại như vậy.
 

File đính kèm

Upvote 0
Cảm ơn bạn Ba tê, nhưng ý mình muốn là từ sheet3-> copy sang Sheet2 rồi cộng luôn vào sheet1(ko thêm điều kiện ở sheet2 nữa) chứ ko phải gộp lại như vậy.
Xem lại file này, nhập sửa... ở sheet Data, Mở các sheet khác xem kết quả.
!!!!!!!Oải với kiểu đặt tên sheet của bạn quá. Sheet1 tên là sheet2, sheet2 tên là sheet1, "khiếp".
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Code bài #13 đã đúng theo yêu cầu của bạn rồi còn gì.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom