Lọc theo mã số (2 người xem)

Liên hệ QC

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

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia
4/5/16
Bài viết
351
Được thích
47
Giới tính
Nữ
Chào mọi người, em có file excel này, mong mọi người giúp viết code để lọc theo mã số, theo tháng, theo năm ah!
Trong file có chi tiết (sheet Xem)
 

File đính kèm

Tồn kho tính dễ mà, nhập xuất thì sumif trong giai đoạn đó, còn tồn đầu thì sumif nhỏ hơn giai đoạn đó lấy nhập -xuất là ra thôi, tính toán số thì không khó dùng sumif là được, sợ chỗ lấy mã số hàng hóa không trùng hơi nặng với dữ liệu nhiều thôi.
Bài náy thiết kế gom 1 bảng thì thuận tiện cho VBA hơn, chứ công thức vẫn vậy.
VBA chỉ biết hơi hơi thôi, :D:D:D!!
thì đấy tính tổng trước tháng chọn
 
Upvote 0
Em xin đưa file mới (code của anh HieuCD), mong mọi người viết code để các cell nào bang 0.00 và rỗng có giá trị là (-) going định dạng của Excell.
 

File đính kèm

Upvote 0
Em xin đưa file mới (code của anh HieuCD), mong mọi người viết code để các cell nào bang 0.00 và rỗng có giá trị là (-) going định dạng của Excell.
Mình chả biết làm thế nào chế đại 1 dòng macro vào, nhưng ô rỗng vẫn là rỗng nha bạn.
 

File đính kèm

Upvote 0
Em xin đưa file mới (code của anh HieuCD), mong mọi người viết code để các cell nào bang 0.00 và rỗng có giá trị là (-) going định dạng của Excell.
gán giá trị 0 cho các ô trống, dùng format dạng số
Mã:
Sub tonghop()
    Dim InArr(), OutArr(), Arr(), i As Long, ik As Long, k As Long
    Dim Dic As Object, Tmp
    Dim Thang As Long, Nam As Long
With Sheets("Xem")
  Thang = .Range("B2").Value
  Nam = .Range("D2").Value
End With
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Nhap")
    InArr = .Range("A3", .Range("F65535").End(3)).Value2
End With
With Sheets("Xuat")
    OutArr = .Range("A3", .Range("F65535").End(3)).Value2
End With
ReDim Arr(1 To UBound(InArr) + UBound(OutArr), 1 To 5)
For i = 1 To UBound(InArr)
  If (Month(InArr(i, 1)) <= Thang And Year(InArr(i, 1)) = Nam) Or Year(InArr(i, 1)) < Nam Then
    Tmp = InArr(i, 5)
    If Not Dic.exists(Tmp) Then
      k = k + 1
      Dic.Add Tmp, k
      Arr(k, 1) = Tmp:    Arr(k, 2) = 0
      Arr(k, 3) = 0:      Arr(k, 4) = 0
    End If
    ik = Dic(Tmp)
    If Month(InArr(i, 1)) = Thang And Year(InArr(i, 1)) = Nam Then
      Arr(ik, 3) = Arr(ik, 3) + InArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) + InArr(i, 6)
    End If
    If (Month(InArr(i, 1)) < Thang And Year(InArr(i, 1)) = Nam) Or Year(InArr(i, 1)) < Nam Then
      Arr(ik, 2) = Arr(ik, 2) + InArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) + InArr(i, 6)
    End If
  End If
Next i
For i = 1 To UBound(OutArr)
  If (Month(OutArr(i, 1)) <= Thang And Year(OutArr(i, 1)) = Nam) Or Year(OutArr(i, 1)) < Nam Then
      Tmp = OutArr(i, 5)
      If Not Dic.exists(Tmp) Then
        k = k + 1
        Dic.Add Tmp, k
        Arr(k, 1) = Tmp:    Arr(k, 2) = 0
        Arr(k, 3) = 0:      Arr(k, 4) = 0
      End If
      ik = Dic(Tmp)
    If Month(OutArr(i, 1)) = Thang And Year(OutArr(i, 1)) = Nam Then
      Arr(ik, 4) = Arr(ik, 4) + OutArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) - OutArr(i, 6)
    End If
    If (Month(OutArr(i, 1)) < Thang And Year(OutArr(i, 1)) = Nam) Or Year(OutArr(i, 1)) < Nam Then
      Arr(ik, 2) = Arr(ik, 2) - OutArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) - OutArr(i, 6)
    End If
  End If
Next i
With Sheets("Xem")
    .Range("A5:E1000").Clear
    If k Then
        .Range("A5").Resize(k, 5) = Arr
        .Range("B5").Resize(k, 4).NumberFormat = " #,##0.00 ; [red](#,##0.00) ; - "
        .Range("A5").Resize(k, 5).Borders.LineStyle = 1
    End If
End With
Set Dic = Nothing
End Sub
 
Upvote 0
gán giá trị 0 cho các ô trống, dùng format dạng số
Mã:
Sub tonghop()
    Dim InArr(), OutArr(), Arr(), i As Long, ik As Long, k As Long
    Dim Dic As Object, Tmp
    Dim Thang As Long, Nam As Long
With Sheets("Xem")
  Thang = .Range("B2").Value
  Nam = .Range("D2").Value
End With
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Nhap")
    InArr = .Range("A3", .Range("F65535").End(3)).Value2
End With
With Sheets("Xuat")
    OutArr = .Range("A3", .Range("F65535").End(3)).Value2
End With
ReDim Arr(1 To UBound(InArr) + UBound(OutArr), 1 To 5)
For i = 1 To UBound(InArr)
  If (Month(InArr(i, 1)) <= Thang And Year(InArr(i, 1)) = Nam) Or Year(InArr(i, 1)) < Nam Then
    Tmp = InArr(i, 5)
    If Not Dic.exists(Tmp) Then
      k = k + 1
      Dic.Add Tmp, k
      Arr(k, 1) = Tmp:    Arr(k, 2) = 0
      Arr(k, 3) = 0:      Arr(k, 4) = 0
    End If
    ik = Dic(Tmp)
    If Month(InArr(i, 1)) = Thang And Year(InArr(i, 1)) = Nam Then
      Arr(ik, 3) = Arr(ik, 3) + InArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) + InArr(i, 6)
    End If
    If (Month(InArr(i, 1)) < Thang And Year(InArr(i, 1)) = Nam) Or Year(InArr(i, 1)) < Nam Then
      Arr(ik, 2) = Arr(ik, 2) + InArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) + InArr(i, 6)
    End If
  End If
Next i
For i = 1 To UBound(OutArr)
  If (Month(OutArr(i, 1)) <= Thang And Year(OutArr(i, 1)) = Nam) Or Year(OutArr(i, 1)) < Nam Then
      Tmp = OutArr(i, 5)
      If Not Dic.exists(Tmp) Then
        k = k + 1
        Dic.Add Tmp, k
        Arr(k, 1) = Tmp:    Arr(k, 2) = 0
        Arr(k, 3) = 0:      Arr(k, 4) = 0
      End If
      ik = Dic(Tmp)
    If Month(OutArr(i, 1)) = Thang And Year(OutArr(i, 1)) = Nam Then
      Arr(ik, 4) = Arr(ik, 4) + OutArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) - OutArr(i, 6)
    End If
    If (Month(OutArr(i, 1)) < Thang And Year(OutArr(i, 1)) = Nam) Or Year(OutArr(i, 1)) < Nam Then
      Arr(ik, 2) = Arr(ik, 2) - OutArr(i, 6)
      Arr(ik, 5) = Arr(ik, 5) - OutArr(i, 6)
    End If
  End If
Next i
With Sheets("Xem")
    .Range("A5:E1000").Clear
    If k Then
        .Range("A5").Resize(k, 5) = Arr
        .Range("B5").Resize(k, 4).NumberFormat = " #,##0.00 ; [red](#,##0.00) ; - "
        .Range("A5").Resize(k, 5).Borders.LineStyle = 1
    End If
End With
Set Dic = Nothing
End Sub
Anh Hiếu cho em hỏi tí, Anh hay dùng mấy hàm này Tarr(), Darr(), Sarr(), vậy mấy hàm này có ý nghĩa gì vậy Anh? Anh có thể nêu ví dụ minh họa được không?
Em cảm ơn Anh.
 
Upvote 0
Anh Hiếu cho em hỏi tí, Anh hay dùng mấy hàm này Tarr(), Darr(), Sarr(), vậy mấy hàm này có ý nghĩa gì vậy Anh? Anh có thể nêu ví dụ minh họa được không?
Em cảm ơn Anh.

- Đó không phải là hàm, mà là khai báo kiểu dữ liệu.
Dạng đầy đủ là:
Dim Darr() as string-->Khai báo một biến darr() là một mảng động, dữ liệu chứa trong mảng là kiểu string.
 
Upvote 0
- Đó không phải là hàm, mà là khai báo kiểu dữ liệu.
Dạng đầy đủ là:
Dim Darr() as string-->Khai báo một biến darr() là một mảng động, dữ liệu chứa trong mảng là kiểu string.
Dạ giờ em mới vỡ lẽ nhiều điều.

Em cảm ơn Anh.
 
Upvote 0
Em chào các AC trong GPE, file này anh HieuCD giúp em lọc theo mã số của những mã s nào có Nhập , Xuất, giờ Em xin các AC (Anh Hiếu nữa) chỉnh code để liệt kê ra tất cả các mã số (có 5 mã số) và xin giúp em sheet"BCThang " cũng giống sheet"Xem"
Em cám ơn.
 

File đính kèm

Upvote 0
Em chào các AC trong GPE, file này anh HieuCD giúp em lọc theo mã số của những mã s nào có Nhập , Xuất, giờ Em xin các AC (Anh Hiếu nữa) chỉnh code để liệt kê ra tất cả các mã số (có 5 mã số) và xin giúp em sheet"BCThang " cũng giống sheet"Xem"
Em cám ơn.
Code ai người ấy sửa nhé.
Tôi viết code cho sheet BCThang:
PHP:
Public Sub BC_Thang()
Dim Dic As Object, sArr(), dArr(1 To 1000, 1 To 8), I As Long, J As Long, K As Long, R As Long, Rws As Long, NgayDau As Long, NgayCuoi As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("BCThang")
    NgayDau = DateSerial(.Range("G2"), .Range("E2"), 1)
    NgayCuoi = DateSerial(.Range("G2"), .Range("E2") + 1, 0)
End With
With Sheets("Nhap")
    sArr = .Range("A3", .Range("A3").End(xlDown)).Resize(, 6).Value
    R = UBound(sArr)
    For I = 1 To R
        Tem = sArr(I, 3) 'sArr(I, 5)'
        If Not Dic.Exists(Tem) Then
            K = K + 1: Dic.Add Tem, K
            dArr(K, 1) = K: dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 4): dArr(K, 4) = sArr(I, 5)
        End If
        Rws = Dic.Item(Tem)
        If sArr(I, 1) < NgayDau Then
            dArr(Rws, 5) = dArr(Rws, 5) + sArr(I, 6)
        ElseIf sArr(I, 1) <= NgayCuoi Then
            dArr(Rws, 6) = dArr(Rws, 6) + sArr(I, 6)
        End If
    Next I
End With
With Sheets("Xuat")
    sArr = .Range("A3", .Range("A3").End(xlDown)).Resize(, 6).Value
    R = UBound(sArr)
    For I = 1 To R
        Tem = sArr(I, 3) 'sArr(I, 5)'
        If Not Dic.Exists(Tem) Then
            K = K + 1: Dic.Add Tem, K
            dArr(K, 1) = K: dArr(K, 2) = sArr(I, 3): dArr(K, 3) = sArr(I, 4): dArr(K, 4) = sArr(I, 5)
        End If
        Rws = Dic.Item(Tem)
        If sArr(I, 1) < NgayDau Then
            dArr(Rws, 5) = dArr(Rws, 5) - sArr(I, 6)
        ElseIf sArr(I, 1) <= NgayCuoi Then
            dArr(Rws, 7) = dArr(Rws, 7) + sArr(I, 6)
        End If
    Next I
End With
For I = 1 To K
    dArr(I, 8) = dArr(I, 5) + dArr(I, 6) - dArr(I, 7)
Next I
With Sheets("BCThang")
    .Range("A5:H1000").ClearContents
    .Range("A5:H5").Resize(K) = dArr
End With
End Sub
Code trên, dòng :
PHP:
Tem = sArr(I, 3) '--------->  sArr(I, 5)
Nếu bạn muốn liệt kê tất cả Tên phụ tùng thì Tem=sArr(I, 3)
Nếu bạn muốn liệt kê tất cả Mã số thì Tem=sArr(I, 5)
 
Upvote 0
Cám Ơn Thầy Ba Tê, em thấy hình Thầy trong SN GPE 11, Thầy cũng đứng tuổi rồi, em thì còn trẻ , nhưng sao "Ngu" thế
 
Upvote 0
Sao laptop của em cứ Copy mã "PHP" là lỗi, không chạy code được, còn mã Code thì lại được.
Không biết ai có cách giải quyết giúp em.
 
Upvote 0

File đính kèm

Upvote 0
Ý của em là khi Thầy đưa code lên dạng "code" thì em copy code dán vào không sao(code chạy), còn nếu Thầy đưa code lên dạng"PHP" thì em copy code vào thì code có nhiều dòng màu đỏ và code không chạy.
Ah mà Thầy ơi, trong file của Thầy, Thầy chỉnh dùm cho có Border và cell nào không có số (rổng) thì có dấu gạch ngang.[/code]
 
Upvote 0
Em bôi đen->nhấp chuột phải->copy->paste vào ModuleUntitled.png
 
Upvote 0
Còn như code của anh Hiếu là "Mã" thì em copy chép vào không bị lỗi.
Ah Thầy Ba Tê ơi chổ Border em đã làm được, chỉ còn chổ cell rổng hoặc bằng 0 thì là dấu gạch ngang mong Thầy giúp.
 
Upvote 0
Ý của em là khi Thầy đưa code lên dạng "code" thì em copy code dán vào không sao(code chạy), còn nếu Thầy đưa code lên dạng"PHP" thì em copy code vào thì code có nhiều dòng màu đỏ và code không chạy.
- Hổng tin!
- Dấu gạch ngang là Format từ số 0 thành dấu "-", chứ trong ô vẫn có giá trị 0.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom