Code dò tìm dữ liệu từ sheet khác

Liên hệ QC

choinodiba

Thành viên mới
Tham gia
12/10/19
Bài viết
17
Được thích
6
Mình cần lấy dữ liệu từ sheet HoaDonBH vào Sheet Data gồm số lượng và đơn giá. Mọi người chỉ cho mình cách nào đó để lấy dữ liệu.
 

File đính kèm

Mình cần lấy dữ liệu từ sheet HoaDonBH vào Sheet Data gồm số lượng và đơn giá. Mọi người chỉ cho mình cách nào đó để lấy dữ liệu.
Bạn bố trí dữ liệu như vậy không hợp lý để sử dụng VBA khi truy xuất nó cũng khó.Bạn nên để nó theo hàng dọc.
 
Upvote 0
Mình cần lấy dữ liệu từ sheet HoaDonBH vào Sheet Data gồm số lượng và đơn giá. Mọi người chỉ cho mình cách nào đó để lấy dữ liệu.
Bạn làm ngược rồi, tôi bận nhiều việc nên không giúp được.
Bạn có thể tham khảo File trong bài viết Ở Link này. Để biết cách làm.
 
Upvote 0
Mình cần lấy dữ liệu từ sheet HoaDonBH vào Sheet Data gồm số lượng và đơn giá. Mọi người chỉ cho mình cách nào đó để lấy dữ liệu.
Chạy Code
Mã:
Sub CapNhat()
  Dim HoaDon(), Data(), Res()
  Dim eRow&, eCol&, sRow&, sCol&, i&, jk&
  Dim SoHD$, TenHang$, tmp$, TenKH$, DiaC$, SDT$, Tong As Double

  With Sheets("HoaDonBan")
    SoHD = .Range("E2").Value
    TenKH = .Range("C3").Value
    DiaC = .Range("C4").Value
    SDT = .Range("G4").Value
    eRow = .Cells(Rows.Count, 3).End(xlUp).Row
    If Len(SoHD) = 0 Or eRow < 6 Then MsgBox ("Khong co du lieu"): Exit Sub
    HoaDon = .Range("B6:F" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
  End With
  With Sheets("Data")
    eRow = .Cells(Rows.Count, 2).End(xlUp).Row + 1
    Data = .Range("A2:R" & eRow).Value
  End With

  With CreateObject("scripting.dictionary")
    sRow = UBound(Data) - 1: sCol = UBound(Data, 2)
    ReDim Res(1 To 1, 1 To sCol)
    eRow = 0
    For i = 3 To sRow
      If SoHD = CStr(Data(i, 2)) Then
        MsgBox ("Da cap nhat du lieu HoaDon: " & SoHD)
        eRow = i: Exit For
      End If
    Next i
    If eRow = 0 Then
      MsgBox ("Da Them du lieu HoaDon: " & SoHD)
      eRow = i
    End If
    For j = 7 To sCol
      TenHang = Data(1, j)
      If Len(TenHang) Then .Item(TenHang) = j
    Next j
    
    sRow = UBound(HoaDon)
    For i = 1 To sRow
      tmp = HoaDon(i, 1)
      If Len(tmp) Then
        If .exists(tmp) = True Then
          jk = .Item(tmp)
          Res(1, jk) = HoaDon(i, 3)
          Res(1, jk + 1) = HoaDon(i, 4)
          Tong = Tong + HoaDon(i, 5)
        Else
          MsgBox ("Sheet Data, khong co ten hang: " & tmp)
        End If
      Else
        Exit For
      End If
    Next i
    Res(1, 1) = CLng(Data(eRow - 1, 1)) + 1
    Res(1, 2) = SoHD
    Res(1, 3) = TenKH
    Res(1, 4) = DiaC
    Res(1, 5) = SDT
    Res(1, 6) = Tong
    With Sheets("Data")
      .Range("A" & eRow + 1).Resize(, sCol) = Res
    End With
  End With
End Sub
 
Upvote 0
Nếu là mình thì mình sã phải có bảng danh mục khách hành, như


STTMã KHTên Khách HàngNgày sinhĐịa chỉSố ĐT
1​
NKH00Nguyễn Khánh Huy
1/13/1991​
12 Chùa Bộc0911230911
2​
NKL00Nguyễn Khánh Lộc
2/14/1992​
412a0983406678
3​
NKL01Nguyễn Khánh Lan
3/17/1993​
4/12a Chùa Trầm0983406978
4​
HJL00Hồ Lan
4/18/1994​
01 Chùa Trăm Gian0983409278
5​
DFN00Dương Đỗ Ngân
5/20/1995​
03 Chùa Một Cột0983407548
6​
DTN00Du Đặng Thái Nam
6/20/1996​
21A Chùa Thiên Mụ0983007878
7​
CVA00Cỗ Văn Ẩn
7/22/1997​
Chùa Tam Thanh0943408178
8​
HJL01Hoàng Lâm
8/23/1998​
Chùa Trấn Quốc0903408478


Trang tính 'DuLieu' mình sẽ tách ra làm 2, như:


Bảng chung:

STTSố HDNgàyMã KHTổng của HD
11610S18/13/2019NKH00
7 000 000​
21810S29/14/2019NKL00
700 000​
31810S29/21/2019NKL00
1,932,114,443​

Bảng chi tiết:


STTSHDMã hàngDVTSoLuongDgiaTtien
11810S214x14x1.0C
5​
40000​
200000​
21810S216x16x1.1C
10​
50000​
500000​
31610S120x20x1.0C
15​
60000​
900000​
41610S116x16x1.1C
20​
70000​
1400000​
51610S116x16x1.4C
25​
80000​
2000000​
61610S116x16x1.0C
30​
90000​
2700000​
Hai bảng này liên hệ với nhau thông qua mã chung
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các Pro. để mình sd thời gian đọc lại code cho nó thông đã.
 
Upvote 0
Web KT

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

Back
Top Bottom