file chạy chậm

Liên hệ QC

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
703
Được thích
53
Giới tính
Nam
Em có file này, sao em gõ tên đợt hàng vào sheet CanDoi cell I3 thì thấy 7 giây sau mới chạy xong công thức.
Mong các anh chị giúp đỡ. (Trong file có được bạn @dazkangel giúp công thức).
Ví dụnhư gõ " đợt 16" vào CanDoi!I3.
 

File đính kèm

  • GPE.xlsb
    47.7 KB · Đọc: 11
Em có file này, sao em gõ tên đợt hàng vào sheet CanDoi cell I3 thì thấy 7 giây sau mới chạy xong công thức.
Mong các anh chị giúp đỡ. (Trong file có được bạn @dazkangel giúp công thức).
Ví dụnhư gõ " đợt 16" vào CanDoi!I3.
Excel đồ cổ của mình không chạy được công thức, Bạn cần gì thì cho ví dụ và cách tính
 
  • Yêu thích
Reactions: DMQ
Excel mình 2007 nên cũng không kiểm tra được. Nhưng xem qua ô Candoi!$I$3 được tham chiếu quá nhiều nên bạn thử đặt name rồi thay đổi công thức thử. Do dữ liệu ít nên mình không cảm nhận được sự thay đổi tốc độ! File đính kèm mình đã đặt tên ô Candoi!$I$3 thành dothang và đã đổi công thức.
 

File đính kèm

  • GPE.xlsb
    43.7 KB · Đọc: 1
  • Thích
Reactions: DMQ
Cám ơn bạn @minhdang_9, đặt name cũng vẫn chậm.
Cám ơn anh Hiếu đã quan tâm, em nghĩ bài này chắc phải dùng VBA. Mong anh giúp đỡ.
 
Cám ơn bạn @minhdang_9, đặt name cũng vẫn chậm.
Cám ơn anh Hiếu đã quan tâm, em nghĩ bài này chắc phải dùng VBA. Mong anh giúp đỡ.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim tArr(), Res1(), Res2(), Nhap(), Xuat(), DanhMuc(), DonHang(), Dic As Object
  Dim i As Long, k As Long, sRow As Long
  Dim DotHang As String, ikey As String
 
  If Target.Address(0, 0) = "I3" Then
    Application.ScreenUpdating = False
    eRow = Range("A" & Rows.Count).End(xlUp).Row
    If eRow > 5 Then Range("A6:I" & eRow).Clear
    DotHang = UCase(Target.Value)
    If Len(DotHang) = 0 Then GoTo Thoat
    
    With Sheets("DanhMuc")
      DanhMuc = .Range("B3:C" & .Range("B" & Rows.Count).End(xlUp).Row).Value
      sRow = UBound(DanhMuc)
      ReDim tArr(1 To sRow, 1 To 4)

      DonHang = .Range("F3:H" & .Range("F" & Rows.Count).End(xlUp).Row).Value
    End With
    For i = 1 To UBound(DonHang)
      If UCase(DonHang(i, 2)) = DotHang Then
        Range("E2") = DonHang(i, 1)
        Range("G2") = DonHang(i, 3)
        Exit For
      End If
    Next i
    
    Set Dic = CreateObject("scripting.dictionary")
    For i = 1 To sRow
      ikey = UCase(DanhMuc(i, 1))
      If Dic.exists(ikey) = False Then Dic.Add ikey, i
    Next i
    
    With Sheets("Nhap")
      Nhap = .Range("D3:G" & .Range("D" & Rows.Count).End(xlUp).Row).Value
    End With
    For i = 1 To UBound(Nhap)
      If UCase(Nhap(i, 4)) = DotHang Then
        ik = Dic.Item(UCase(Nhap(i, 1)))
        If ik > 0 Then
          tArr(ik, 4) = tArr(ik, 4) + Nhap(i, 3)
        Else 'Danh Muc NVL bi thieu
          MsgBox ("Cap nhat lai danh muc nguyen vat lieu theo du lieu Nhap"): GoTo Thoat
        End If
      End If
    Next i
    
    With Sheets("Xuat")
      Xuat = .Range("E3:H" & .Range("E" & Rows.Count).End(xlUp).Row).Value
    End With
    For i = 1 To UBound(Xuat)
      If UCase(Xuat(i, 4)) = DotHang Then
        ik = Dic.Item(UCase(Xuat(i, 1)))
        If ik > 0 Then
          tArr(ik, 3) = tArr(ik, 3) + Xuat(i, 3)
        Else 'Danh Muc NVL bi thieu
          MsgBox ("Cap nhat lai danh muc nguyen vat lieu theo du lieu Xuat"): GoTo Thoat
        End If
      End If
    Next i
    
    ReDim Res1(1 To sRow, 1 To 3)
    ReDim Res2(1 To sRow, 1 To 3)
    For i = 1 To sRow
      If Len(tArr(i, 3)) > 0 Or Len(tArr(i, 4)) > 0 Then
        k = k + 1
        Res1(k, 1) = k: Res1(k, 2) = DanhMuc(i, 1): Res1(k, 3) = DanhMuc(i, 2)
        Res2(k, 1) = tArr(i, 3): Res2(k, 2) = tArr(i, 4)
        Res2(k, 3) = tArr(i, 4) - tArr(i, 3)
        If Res2(k, 3) = 0 Then Res2(k, 3) = Empty
      End If
    Next i
    If k Then
      Range("A6:C6").Resize(k) = Res1
      Range("F6:H6").Resize(k) = Res2
    End If
    Range("A6:I6").Resize(k).Borders.LineStyle = 1
    Range("F6:H6").Resize(k).NumberFormat = "#,##0_);[Red]- #,##0_)"
Thoat:
    Application.ScreenUpdating = True
  End If
End Sub
 

File đính kèm

  • GPE (2).xlsb
    38.6 KB · Đọc: 4
Cám ơn anh Hiếu.
Sao em chép code của anh vào file that thì thấy vẫn chậm.
Mong anh giúp (em có Inbox cho anh)
 
Cám ơn anh Hiếu.
Sao em chép code của anh vào file that thì thấy vẫn chậm.
Mong anh giúp (em có Inbox cho anh)
File thật thì nó ra sao? File bài #5 không kịp chớp mắt đã xong rồi.
Muốn VBA thì chỉ dùng VBA, các cột công thức khủng của sheet khác cũng làm cho file hoạt động chậm.
Không có Nhập mà có Xuất thì sao ta?
Bạn thử file này xem sao. Có Nhập mới có Xuất.
 

File đính kèm

  • GPE_19_5.xlsb
    70.8 KB · Đọc: 4
Lần chỉnh sửa cuối:
  • Yêu thích
Reactions: DMQ
Anh Hiếu xem file em gửi chưa ạ.
À !!! được rồi anh Hiếu Ơi!!!!!!
Cám ơn anh.
 
Cám ơn Thầy Ba Tê, file của Thầy rất hay.
Bài đã được tự động gộp:

À anh Hiếu ơi, cột tồn nếu hết thì anh cho bằng 0 dùm em ạ (của anh đang rỗng)
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom