Lấy dữ liệu từ sheet này qua sheet kia bằng VBA

Liên hệ QC

nmhung49

Thành viên tích cực
Tham gia
20/8/09
Bài viết
1,186
Được thích
1,337
Em có một file mà không biết viết code như thế nào để lấy dữ liêu từ sheet data lấy dữ liệu mong anh chị giúp đỡ, em có nghi chú thích đầy đử trong sheet em hỏi. Cảm ơn AC và các bạn nhiều
 
Bạn kiểm lại xem sao nha.

PHP:
Option Explicit
Private Sub ComboBox1_Change()
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range
 Dim VTr As Byte, jJ As Byte:             ReDim Mg(1 To 3)
 Dim StrC As String
 
 Set Sh = Sheets("Data")
 Set Rng = Sh.Range(Sh.[a2], Sh.[A65500].End(xlUp))
 For jJ = 1 To 3
   With Application.WorksheetFunction
      VTr = InStr(ComboBox1.Value, "-") + 2
      StrC = Mid(ComboBox1.Value, VTr, 99)
      Mg(jJ) = .VLookup(StrC, Range("BTra"), jJ + 1, 0)
   End With
   For Each Cls In Range([A20], [A65500].End(xlUp))
      Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
      If Not sRng Is Nothing Then
         Cls.Offset(, jJ + 1).Value = sRng.Offset(, Mg(jJ) - 1).Value      
      Else
         Cls.Interior.ColorIndex = 38
      End If
   Next Cls
 Next jJ
End Sub
 

File đính kèm

Upvote 0
PHP:
Option Explicit
Private Sub ComboBox1_Change()
ReDim Mg(1 To 3)
For jJ = 1 To 3
With Application.WorksheetFunction
VTr = InStr(ComboBox1.Value, "-") + 2
StrC = Mid(ComboBox1.Value, VTr, 99)
Mg(jJ) = .VLookup(StrC, Range("BTra"), jJ + 1, 0)
End With
If Not sRng Is Nothing Then
Cls.Offset(, jJ + 1).Value = sRng.Offset(, Mg(jJ) - 1).Value 
End Sub
Anh ChanhTQ anh có thể giải thích giúp em những câu lệnh trên được không em đọc mà không hơi không hiểu. Với lại em có vấn đề này mong Anh và các bạn giúp em có bài tập em tự viết code mà em không muốn dùng vòng lặp nhưng không biết giải quyết như thế mong các bạn xem giúp với. Cảm ơn nhiều
 
Upvote 0
(2) Anh có thể giải thích giúp em những câu lệnh trên được không.
(1) Với lại em có vấn đề này mong Anh và các bạn giúp em có bài tập em tự viết code mà em không muốn dùng vòng lặp nhưng không biết giải quyết như thế mong các bạn xem giúp với. Cảm ơn nhiều
(1) Đây vẫn còn vòng lặp, nhưng lặp theo vùng:

PHP:
Option Explicit
Sub CopyToAreas()
 Dim Sh As Worksheet, Cls As Range
 On Error Resume Next
 Set Sh = Sheets("S3")
 With Sh.Columns("A:a")
   For Each Cls In .SpecialCells(xlCellTypeBlanks).Areas
      If Not Cls Is Nothing Then
         Cls.Value = Cls.Cells(1).Offset(-1).Value
      End If
   Next Cls
 End With
End Sub
PHP:
Private Sub ComboBox1_Change()
1 ReDim Mg(1 To 3) ' Khai 1 biến mảng có 3 fần tử'
For jJ = 1 To 3 'Thiết lập vòng lặp để lấy giá trị cột =>(a)'  
3  With Application.WorksheetFunction
      VTr = InStr(ComboBox1.Value, "-") + 2  'Tìm vị trí bắt đầu mã (b)'
5      StrC = Mid(ComboBox1.Value, VTr, 99) 'Lấy chuỗi mã theo trị của VTr'
      Mg(jJ) = .VLookup(StrC, Range("BTra"), jJ + 1, 0)'Nhờ hàm của excel lấy trị cột (c)' 
7  End With
 If Not sRng Is Nothing Then _
9   Cls.Offset(, jJ + 1).Value = sRng.Offset(, Mg(jJ) - 1).Value   '(d)'

End Sub

(a) Chuyện này tương ứng với các cột Bag, Weight & Amount của bạn.
(b) Chuỗi trong ComboBox1 của bạn có dạng Num - String; Nhưng ta chỉ cần String mà thôi nên fải tìm cách tách nó ra.
(c) Trobf trang tính có vùng gán tên là 'BTra' & nhờ hàm trong excel để tra ra các vị trí cột tương ứng của các mã.
(d) có 2 vế;
Vế trái buốc các ô kề fải (chạy theo jJ) của ô hiện hành nhận các giá tri từ vế fải
Vế fải: lấy trị trong dòng của ô sRng tìm thấy ứng với các cột là số liệu lưu trong biến mảng (Nhập vô vế trái)

Mong đã giúp bạn ít nhiều & chúc vui!
 
Upvote 0
Web KT

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

Back
Top Bottom