Xin viết dùng mã vba thay thế cho hàm vlookup

Liên hệ QC
Sheet MASTER có quan hệ thế nào với Sh Bang Ma NVL? mình nghi ngờ là sub Update ấy tác động đến Sh Bang ma NVL ở đoạn code trong sh DMSP Danpla
Có anh. Sheet Master nấy thông tin nguyên liệu ở sh NVL ( em có dùng hàm Vlock up ). Đúng là cái phần auto nó nỗi. Do em nấy code ở file bác quick87 viết nó sẽ chạy cho nhiều sheet phía sau giống nhau ở bài # 224. Mà em mò hoài ko biết cách thoát khỏi cái đó mà file vẫn cập nhật bình thường.
 
Có anh. Sheet Master nấy thông tin nguyên liệu ở sh NVL ( em có dùng hàm Vlock up ). Đúng là cái phần auto nó nỗi. Do em nấy code ở file bác quick87 viết nó sẽ chạy cho nhiều sheet phía sau giống nhau ở bài # 224. Mà em mò hoài ko biết cách thoát khỏi cái đó mà file vẫn cập nhật bình thường.
Bây giờ mình làm theo hướng liên hệ qua lại giữa 2 sh DMSP và sh MASTER thôi nhé, Có nghĩa là nếu Sh MASTER thay đổi (thêm dòng chẳng hạn) thì nó sẽ lấy dữ liệu từ Sh DMSP điền vào các ô theo yêu cầu, và ngược lại khi sh DMSP thay đổi (thay đổi các mục tên sản phẩm, hay kích thước ...) thì những dòng của sh MASTER có liên quan cũng thay đỏi theo. còn các sh không liên quan nhé.
 
nhưng cú 1 lần load là nó xóa xạch dữ liệu các sheet khác không liên quan. mà chưa biết sửa thế nào. các bác xem sửa giúp em!

Mình xóa bỏ hết code ở sh DMSP và sửa lại sự kiện Workbook_Change là khi có thay đổi ở range (A5:I1000000) thì chạy sub LOAD để cập nhật lại các dòng của Sh MASTER.
(SH Bang ma NVL bạn để nhiều công thức quá --> file nặng---> load chậm)
 

File đính kèm

  • MASTER ĐỊNH MỨC 1-7.xlsm
    357.8 KB · Đọc: 14
nhưng cú 1 lần load là nó xóa xạch dữ liệu các sheet khác không liên quan. mà chưa biết sửa thế nào. các bác xem sửa giúp em!

Mình xóa bỏ hết code ở sh DMSP và sửa lại sự kiện Workbook_Change là khi có thay đổi ở range (A5:I1000000) thì chạy sub LOAD để cập nhật lại các dòng của Sh MASTER.
(SH Bang ma NVL bạn để nhiều công thức quá --> file nặng---> load chậm)
file chạy ngon luôn bác! thank bác rất nhiều! :)
Đúng là file em nó lắm công thức quá load nâu thật.hihi!
 
file chạy ngon luôn bác! thank bác rất nhiều! :)
Đúng là file em nó lắm công thức quá load nâu thật.hihi!
Bạn giải thích một cách cụ thể về cách lấy dữ liệu vào sh Bang ma NVL ỏ các ô và dòng tương ứng thì tin chắc sẽ có nhiều người giúp bạn dùng VBA để lấy không phải dùng công thức(nhất là những worksheets có nhiều dòng nhiều cột phải lấy dũ liệu bằng công thức)---> file sẽ nhẹ hơn--> load sẽ nhanh hơn.
Mình có sửa lại code của sh DMSP để đảm bảo khi dữ liệu của Sh MASTER nhiều dòng thì khi sửa dữ liệu của sh DMSP sẽ đồng thời sửa lại dữ liệu Sh MASTER ở dòng tương ứng (nhanh hơn).
bạn xem code trong file đính kèm và sửa lại dữ liệu, chạy thử nhé. nếu thấy ưng ý thì thay code trong Sh DMSP.
 

File đính kèm

  • MASTER ĐỊNH MỨC 1-7.xlsm
    323.6 KB · Đọc: 7
Bạn giải thích một cách cụ thể về cách lấy dữ liệu vào sh Bang ma NVL ỏ các ô và dòng tương ứng thì tin chắc sẽ có nhiều người giúp bạn dùng VBA để lấy không phải dùng công thức(nhất là những worksheets có nhiều dòng nhiều cột phải lấy dũ liệu bằng công thức)---> file sẽ nhẹ hơn--> load sẽ nhanh hơn.
Mình có sửa lại code của sh DMSP để đảm bảo khi dữ liệu của Sh MASTER nhiều dòng thì khi sửa dữ liệu của sh DMSP sẽ đồng thời sửa lại dữ liệu Sh MASTER ở dòng tương ứng (nhanh hơn).
bạn xem code trong file đính kèm và sửa lại dữ liệu, chạy thử nhé. nếu thấy ưng ý thì thay code trong Sh DMSP.
file bác em đã up vào file em chạy ngon luôn bác. nhưng cái code này em mò mãi không hiểu. định tự làm cái chạy mã nguyên liệu nhưng không ra. bác giúp em lốt phát này là File em ngon lành. :)
- Cũng giống như cái cái trước là mã thành phẩm thì cái này là nhập mã nguyên liệu thì nó chạy tự động và tự động cập nhật các thông số từ Sheet "Ma NL"sang sheet " MASTER Danpla"
#cập nhật# Em nay chèn thêm 4 hàng mã sản phẩm mới ở sh DMSP thì sang sh MASTER nó lại không cập nhật lên. mà phải thao tác vào từng ô dữ liệu cửa các mã mới đó thì nó mới load sang.
 

File đính kèm

  • MASTER ĐỊNH MỨC 1-7 (nhập liệu nguyê liệu ).xlsm
    307 KB · Đọc: 4
Lần chỉnh sửa cuối:
file bác em đã up vào file em chạy ngon luôn bác. nhưng cái code này em mò mãi không hiểu. định tự làm cái chạy mã nguyên liệu nhưng không ra. bác giúp em lốt phát này là File em ngon lành. :)
- Cũng giống như cái cái trước là mã thành phẩm thì cái này là nhập mã nguyên liệu thì nó chạy tự động và tự động cập nhật các thông số từ Sheet "Ma NL"sang sheet " MASTER Danpla"
#cập nhật# Em nay chèn thêm 4 hàng mã sản phẩm mới ở sh DMSP thì sang sh MASTER nó lại không cập nhật lên. mà phải thao tác vào từng ô dữ liệu cửa các mã mới đó thì nó mới load sang.

Đã sửa lại code, có sửa tự cập nhật Dic khi có thay đổi rồi, chạy thử nhé. Các cột AC,AD,AF mình đã làm cho tự cập nhật công thức rồi đó nếu thấy không cần thì gỡ bỏ.
Còn cái đoạn code
Set SRng = Intersect(Range("AB5:AB60000"), Target)
If Not SRng Is Nothing Then
sRow = SRng.Rows.Count
For i = 1 To sRow
....... đến đoạn
ElseIf UCase(DonVi) Like "T?M" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/RC[-8]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))"
ElseIf UCase(DonVi) Like "THANH" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/INT(RC[2]/RC[-10])"
Else
Rng.Offset(, 1) = Empty
End If
Next i
End If
End If

ở sh MASTER đấy để làm gì nếu không cần thiết thì gỡ bỏ cho code chạy nhanh và mượt hơn (tùy bạn- mình không can thiệp)
Dữ liệu ở cột O sh MaNVL được lấy ở đâu vào?
Nên đặt tên file bằng TÊN TIẾNG VIỆT -nhưng viết tắt cũng được, Tên Sh nên đặt bằng tiếng việt không dấu- viết tắt và ngắn bấy nhiêu , gọn bấy nhiêu)
 

File đính kèm

  • MASTER ĐỊNH MỨC 1-7 (nhập liệu nguyê liệu ).xlsb
    185.6 KB · Đọc: 14
Đã sửa lại code, có sửa tự cập nhật Dic khi có thay đổi rồi, chạy thử nhé. Các cột AC,AD,AF mình đã làm cho tự cập nhật công thức rồi đó nếu thấy không cần thì gỡ bỏ.
Còn cái đoạn code
Set SRng = Intersect(Range("AB5:AB60000"), Target)
If Not SRng Is Nothing Then
sRow = SRng.Rows.Count
For i = 1 To sRow
....... đến đoạn
ElseIf UCase(DonVi) Like "T?M" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/RC[-8]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))"
ElseIf UCase(DonVi) Like "THANH" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/INT(RC[2]/RC[-10])"
Else
Rng.Offset(, 1) = Empty
End If
Next i
End If
End If

ở sh MASTER đấy để làm gì nếu không cần thiết thì gỡ bỏ cho code chạy nhanh và mượt hơn (tùylỗi.png bạn- mình không can thiệp)
Dữ liệu ở cột O sh MaNVL được lấy ở đâu vào?
Nên đặt tên file bằng TÊN TIẾNG VIỆT -nhưng viết tắt cũng được, Tên Sh nên đặt bằng tiếng việt không dấu- viết tắt và ngắn bấy nhiêu , gọn bấy nhiêu)
- Anh ơi! em chạy thay đổi mã nguyên liệu nó cú báo lỗi như trên rồi out ra. bác xem giúp em.
- đoạn code đó em để chạy công thức tự động cho cột AC và AF theo mỗi loại nguyên liệu dựa vào đơn vị nguyên liệu ở cột AB và AE ( file trước em để ví dụ hơn ít và ít loại nguyên liệu khác nhau lên không thể hiện rõ, em có gửi lai file nhiều dữ kiệm ở sheet MASTER ).
- dữ liệu ở cộ O Sheet Ma NVL là công thức cộng tổng nguyên liệu ở Sheet Master ạ. tại em xóa bớt Sheet nên nó bị lỗi.
 

File đính kèm

  • Dinh Muc NVL.xlsm
    254.9 KB · Đọc: 5
- Anh ơi! em chạy thay đổi mã nguyên liệu nó cú báo lỗi như trên rồi out ra. bác xem giúp em.
- đoạn code đó em để chạy công thức tự động cho cột AC và AF theo mỗi loại nguyên liệu dựa vào đơn vị nguyên liệu ở cột AB và AE ( file trước em để ví dụ hơn ít và ít loại nguyên liệu khác nhau lên không thể hiện rõ, em có gửi lai file nhiều dữ kiệm ở sheet MASTER ).
- dữ liệu ở cộ O Sheet Ma NVL là công thức cộng tổng nguyên liệu ở Sheet Master ạ. tại em xóa bớt Sheet nên nó bị lỗi.

Bạn gửi file có Pass nên không mở được VBE.
 

File đính kèm

  • MASTER ĐỊNH MỨC 1-7 (nhập liệu nguyê liệu ).xlsb
    185.6 KB · Đọc: 10
file bạn gửi không có code mà mình đã gửi. lấy code ở trong file mình gửi lại và chạy thử
nhớ là copy toàn bộ code ở các modul và ở các sh (kể cả ở This WorkBook) nhé!
- File em up lại là em mới up code bài #245 cửa bác. em đang để thấy shett MASTER sử dụng nhiều lại nguyên liệu nhiều công thưc tính khác nhau thôi ạ.
- File bác mới Up ở bài #247 và #251 em tải về thi đổi mã nguyên liệu khác ở cột Z thì nó báo lỗi như anh bác ak. hay do máy em nó thiếu phần j nên báo vậy nhi?
 

File đính kèm

  • báo lỗi.png
    báo lỗi.png
    464.7 KB · Đọc: 6
- File em up lại là em mới up code bài #245 cửa bác. em đang để thấy shett MASTER sử dụng nhiều lại nguyên liệu nhiều công thưc tính khác nhau thôi ạ.
- File bác mới Up ở bài #247 và #251 em tải về thi đổi mã nguyên liệu khác ở cột Z thì nó báo lỗi như anh bác ak. hay do máy em nó thiếu phần j nên báo vậy nhi?

File mình up cho bạn là mình đã thử và sửa rất nhiều lần trên máy mình rồi chạy êm ru, không vấp lỗi gì mà.
bạn up lại file bi lỗi lên mình xem lại xem có vấn đề gì tại máy hay tại code.
 
File mình up cho bạn là mình đã thử và sửa rất nhiều lần trên máy mình rồi chạy êm ru, không vấp lỗi gì mà.
bạn up lại file bi lỗi lên mình xem lại xem có vấn đề gì tại máy hay tại code.
em chỉ tải về chạy luôn khôn động chạm j cả. chắc máy em nó thiếu cái j đó rùi. em dùng win 7, off13.
mà code cũ không thêm cái phần mã nguyên liệu thì được. lạ thật!
 

File đính kèm

  • lỗi 1.png
    lỗi 1.png
    459.1 KB · Đọc: 4
  • lỗi 2.png
    lỗi 2.png
    464.4 KB · Đọc: 4
  • MASTER ĐỊNH MỨC 1-7 (nhập liệu nguyê liệu ) (1).xlsb
    185.6 KB · Đọc: 3
em chỉ tải về chạy luôn khôn động chạm j cả. chắc máy em nó thiếu cái j đó rùi. em dùng win 7, off13.
mà code cũ không thêm cái phần mã nguyên liệu thì được. lạ thật!

Có thể do máy bạn. máy mình cài win 10, offce 2016 chạy êm du chẳng vấp lỗi nào. Bạn thử quét virut rồi chạy thử, hoặc copy sang máy khác chạy thử xem sao. Hoặc đăng bài mới trên diễn đàn hỏi mọi người xem nó bị sao, để có hướng khắc phục.
Mình gửi lại file đã có sửa lại code để cứ tắt máy thì máy tự xóa bỏ dic đã lưu để tiết kiệm tài nguyên (không ảnh hưởng đến dữ liệu của file), khi mở sub Auto_Open lại được kích hoạt để nạp Dic sủa dụng cho các Modul appdate và các sự kiện khi thay đổi ở các sh Bang NVL, DMSP .
Và thêm phần tự điền công thức ở cột O và Q rồi nhé. từ đây về sau cứ khi bạn có sự thay đổi nào ở vùng C5:K100000 của sh Bang NVL thì cột O và Q sẽ tự động cập nhật công thức, các dữ liệu của Sh MASTER cũng thay đổi theo.
 

File đính kèm

  • Dinh Muc NVL 9-7.xlsm
    271 KB · Đọc: 17
Có thể do máy bạn. máy mình cài win 10, offce 2016 chạy êm du chẳng vấp lỗi nào. Bạn thử quét virut rồi chạy thử, hoặc copy sang máy khác chạy thử xem sao. Hoặc đăng bài mới trên diễn đàn hỏi mọi người xem nó bị sao, để có hướng khắc phục.
Mình gửi lại file đã có sửa lại code để cứ tắt máy thì máy tự xóa bỏ dic đã lưu để tiết kiệm tài nguyên (không ảnh hưởng đến dữ liệu của file), khi mở sub Auto_Open lại được kích hoạt để nạp Dic sủa dụng cho các Modul appdate và các sự kiện khi thay đổi ở các sh Bang NVL, DMSP .
Và thêm phần tự điền công thức ở cột O và Q rồi nhé. từ đây về sau cứ khi bạn có sự thay đổi nào ở vùng C5:K100000 của sh Bang NVL thì cột O và Q sẽ tự động cập nhật công thức, các dữ liệu của Sh MASTER cũng thay đổi theo.
Vâng! Chắc tại máy em để em thử máy khác xem ạ.
Thank bác rất nhiều!!!
 
Thật ra tôi rất thích tranh luận để chứng minh vấn đề
Vậy thay vì nói suông ta làm cuộc thí nghiệm với 10000 dòng dữ liệu giữa code của tôi VS với VLOOKUP nhé (xem file)
Tại sheet ChiTiet, điền dữ liệu vào cột C rồi lookup 16 cột còn lại bên phải
Code của tôi như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rTarget As Range, aTarget, i As Long, j As Long, n As Long, TG As Double
  Dim Arr(), tmp
  On Error Resume Next
  TG = Timer
  If Dic Is Nothing Then Auto_Open
  If Not Intersect(Range("C6:C65536"), Target) Is Nothing Then
    Set rTarget = Intersect(Range("C6:C65536"), Target)
    If IsArray(rTarget.Value) Then
      aTarget = rTarget.Value
    Else
      ReDim aTarget(1 To 1, 1 To 1)
      aTarget(1, 1) = rTarget.Value
    End If
    ReDim Arr(1 To UBound(aTarget, 1), 1 To 17)
    For i = 1 To UBound(aTarget, 1)
      If aTarget(i, 1) <> "" Then
        tmp = aTarget(i, 1)
        If Dic.Exists(tmp) Then
          For j = 2 To 17
            Arr(i, j - 1) = aResult(Dic.Item(tmp), j)
          Next
        End If
      End If
    Next
    rTarget.Offset(, 1).Resize(, 16).Value = Arr
    MsgBox Timer - TG
  End If
End Sub
- Còn code "mượn" VLOOKUP như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rTarget As Range, aTarget, i As Long, j As Long, n As Long, TG As Double
  Dim Arr(), tmp
  On Error Resume Next
  TG = Timer
  If Not Intersect(Range("C6:C65536"), Target) Is Nothing Then
    Set rTarget = Intersect(Range("C6:C65536"), Target)
    With rTarget.Offset(, 1).Resize(, 16)
      .Value = "=IF(RC3="""","""",VLOOKUP(RC3,LLNV!R5C2:R10000C18,2,0))"
      .Value = .Value
    End With
    MsgBox Timer - TG
  End If
End Sub
Code này tương đương bạn tự tay gõ hàm VLOOKUP vào rồi copy/paste value thôi (tôi nghĩ không khó hiểu đối với bạn)
----------------
Giờ so sánh khi copy paste 10000 dòng dữ liệu vào cột C của sheet ChiTiet (dữ liệu tôi đã làm sẵn tại sheet1)
- Code tôi viết trên nền tảng xử lý mảng cho kết quả trong vòng 1.1 giây
- Code dùng VLOOKUP cho kết quả không vòng 25 giây
Đó là chưa nói code dùng VLOOKUP chỉ tìm duy nhất trên cột 2 ---> Nếu tìm 1 lần 16 cột như code của tôi dùng Array chắc là cách dùng VLOOKUP sẽ... đói luôn
Nếu thay đoạn "VLOOKUP(RC3,LLNV!R5C2:R10000C18, 2,0)" thành "VLOOKUP(RC3,LLNV!R5C2:R10000C18, COLUMNS(RC3:RC),0)" để lookup luôn 16 cột thì... Ẹc.. Ẹc... tôi không kiên nhẩn để chờ (lâu quá, treo máy luôn)
Đương nhiên khi làm cuộc thí nghiệm này tôi đã thử bằng rất nhiều cách với VLOOKUP... Chẳng hạn dùng WorksheetFunction.Vlookup ---> Kết quả còn tệ hơn rất nhiều

Bạn muốn dữ liệu "chuẩn" thế nào, hoặc muốn sửa VLOOKUP như thế nào, cứ đưa lên đây, chúng ta sẽ cùng thí nghiệm để bạn tâm phục khẩu phục về tốc độ của xửF

Thật ra tôi rất thích tranh luận để chứng minh vấn đề
Vậy thay vì nói suông ta làm cuộc thí nghiệm với 10000 dòng dữ liệu giữa code của tôi VS với VLOOKUP nhé (xem file)
Tại sheet ChiTiet, điền dữ liệu vào cột C rồi lookup 16 cột còn lại bên phải
Code của tôi như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rTarget As Range, aTarget, i As Long, j As Long, n As Long, TG As Double
  Dim Arr(), tmp
  On Error Resume Next
  TG = Timer
  If Dic Is Nothing Then Auto_Open
  If Not Intersect(Range("C6:C65536"), Target) Is Nothing Then
    Set rTarget = Intersect(Range("C6:C65536"), Target)
    If IsArray(rTarget.Value) Then
      aTarget = rTarget.Value
    Else
      ReDim aTarget(1 To 1, 1 To 1)
      aTarget(1, 1) = rTarget.Value
    End If
    ReDim Arr(1 To UBound(aTarget, 1), 1 To 17)
    For i = 1 To UBound(aTarget, 1)
      If aTarget(i, 1) <> "" Then
        tmp = aTarget(i, 1)
        If Dic.Exists(tmp) Then
          For j = 2 To 17
            Arr(i, j - 1) = aResult(Dic.Item(tmp), j)
          Next
        End If
      End If
    Next
    rTarget.Offset(, 1).Resize(, 16).Value = Arr
    MsgBox Timer - TG
  End If
End Sub
- Còn code "mượn" VLOOKUP như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rTarget As Range, aTarget, i As Long, j As Long, n As Long, TG As Double
  Dim Arr(), tmp
  On Error Resume Next
  TG = Timer
  If Not Intersect(Range("C6:C65536"), Target) Is Nothing Then
    Set rTarget = Intersect(Range("C6:C65536"), Target)
    With rTarget.Offset(, 1).Resize(, 16)
      .Value = "=IF(RC3="""","""",VLOOKUP(RC3,LLNV!R5C2:R10000C18,2,0))"
      .Value = .Value
    End With
    MsgBox Timer - TG
  End If
End Sub
Code này tương đương bạn tự tay gõ hàm VLOOKUP vào rồi copy/paste value thôi (tôi nghĩ không khó hiểu đối với bạn)
----------------
Giờ so sánh khi copy paste 10000 dòng dữ liệu vào cột C của sheet ChiTiet (dữ liệu tôi đã làm sẵn tại sheet1)
- Code tôi viết trên nền tảng xử lý mảng cho kết quả trong vòng 1.1 giây
- Code dùng VLOOKUP cho kết quả không vòng 25 giây
Đó là chưa nói code dùng VLOOKUP chỉ tìm duy nhất trên cột 2 ---> Nếu tìm 1 lần 16 cột như code của tôi dùng Array chắc là cách dùng VLOOKUP sẽ... đói luôn
Nếu thay đoạn "VLOOKUP(RC3,LLNV!R5C2:R10000C18, 2,0)" thành "VLOOKUP(RC3,LLNV!R5C2:R10000C18, COLUMNS(RC3:RC),0)" để lookup luôn 16 cột thì... Ẹc.. Ẹc... tôi không kiên nhẩn để chờ (lâu quá, treo máy luôn)
Đương nhiên khi làm cuộc thí nghiệm này tôi đã thử bằng rất nhiều cách với VLOOKUP... Chẳng hạn dùng WorksheetFunction.Vlookup ---> Kết quả còn tệ hơn rất nhiều

Bạn muốn dữ liệu "chuẩn" thế nào, hoặc muốn sửa VLOOKUP như thế nào, cứ đưa lên đây, chúng ta sẽ cùng thí nghiệm để bạn tâm phục khẩu phục về tốc độ của xử lý Array
Ví dụ như trong bài này có 17 cột , nếu em muốn lấy chỉ một số cột nhất định trong 17 cột đó thì sẽ thay đổi ở đâu ạ
 

File đính kèm

  • ThiNghiem (1).rar
    285.3 KB · Đọc: 6
(1) Ví dụ như trong bài này có 17 cột , nếu em muốn lấy chỉ một số cột nhất định trong 17 cột đó thì sẽ thay đổi ở đâu ạ
(2) Hãy copy B6:B10000 ở sheet LLNV rồi paste vào C6 tại sheet này
(1) Bạn phải cho biết những cột nào cần Ccopy.
(2) ???
 
(1) Bạn phải cho biết những cột nào cần Ccopy.
(2) ???
Em muốn biết cách thay đổi code ở đâu luôn ấy ạ, ví dụ như file này em muốn lấy 2 cột là người phụ trách và số đt người phụ trạch. Vì em muốn biết để custom vào những file sau luôn
 

File đính kèm

  • VBA.xlsm
    669.8 KB · Đọc: 6
Có thể do máy bạn. máy mình cài win 10, offce 2016 chạy êm du chẳng vấp lỗi nào. Bạn thử quét virut rồi chạy thử, hoặc copy sang máy khác chạy thử xem sao. Hoặc đăng bài mới trên diễn đàn hỏi mọi người xem nó bị sao, để có hướng khắc phục.
Mình gửi lại file đã có sửa lại code để cứ tắt máy thì máy tự xóa bỏ dic đã lưu để tiết kiệm tài nguyên (không ảnh hưởng đến dữ liệu của file), khi mở sub Auto_Open lại được kích hoạt để nạp Dic sủa dụng cho các Modul appdate và các sự kiện khi thay đổi ở các sh Bang NVL, DMSP .
Và thêm phần tự điền công thức ở cột O và Q rồi nhé. từ đây về sau cứ khi bạn có sự thay đổi nào ở vùng C5:K100000 của sh Bang NVL thì cột O và Q sẽ tự động cập nhật công thức, các dữ liệu của Sh MASTER cũng thay đổi theo.
bác cho em hỏi! em muốn bỏ phần tự chạy công thức ở cột AC; AD; AF để nó chạy như code cũ cửa em. em có xóa đoạn code này đi thì nó lại không chạy được NVL luôn.
"
kTarget.Offset(, -1).Resize(, 15).Value = arr1
kTarget.Offset(, 3).FormulaR1C1 = "=(RC[-7]/1000*RC[-8]/1000)/RC[-5]"
kTarget.Offset(, 4).FormulaR1C1 = "=RC[-1]*RC[-13]"
kTarget.Offset(, 6).FormulaR1C1 = "=RC[-15]/RC[-8]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))"
' kTarget.Offset(, 10).FormulaR1C1 = "=(RC[-5]+RC[-5]*RC[-1])*RC[1]"' DUA VAO CODE CHAY SAI--> CHÂM "
 
Web KT
Back
Top Bottom