Dùng code gì để thay thế công thức = if(and()) trong excel

Liên hệ QC

minhcong.tckt

Thành viên thường trực
Tham gia
13/4/11
Bài viết
385
Được thích
36
Giới tính
Nam
1. Tại sheet 1 : mọi dữ liệu của em được đánh vào tại sheet này. có khoảng 5000 dòng
Sheet 2 em dùng hàm if() để linh dữ liệu từ sheet1 sang với 1 điều kiện nào đó. Nhược điểm là có đến 5000 công thức if() như vậy, nên việc tính toán tự động trong excel khá lâu.

2. Anh chị cho em code để lấy đươc dữ liệu từ sheet 1 tương đương với hàm if() như trên. Việc dùng code này có giảm thời gian tính toán trong excel ko ạ???

Chân thành cảm ơn sự giúp đỡ của các anh chị
 
1. Tại sheet 1 : mọi dữ liệu của em được đánh vào tại sheet này. có khoảng 5000 dòng
Sheet 2 em dùng hàm if() để linh dữ liệu từ sheet1 sang với 1 điều kiện nào đó. Nhược điểm là có đến 5000 công thức if() như vậy, nên việc tính toán tự động trong excel khá lâu.

2. Anh chị cho em code để lấy đươc dữ liệu từ sheet 1 tương đương với hàm if() như trên. Việc dùng code này có giảm thời gian tính toán trong excel ko ạ???

Chân thành cảm ơn sự giúp đỡ của các anh chị
bạn cần đưa file mẫu thì sẽ có người giúp
nói chung chung kể ra cũng khó hình dung
 
Upvote 0
bạn thư cái này chưa: vào tool/options/calcu.../manual/ok.Muốn tính Sheet nào thì nhấn sheet +F9 để bảng tính không tự động chạy
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn cho mình hỏi, vừa nãy mình dùng có 1 hàm if(), vậy sau này mình muốn dùng nhiều hàm if () thì trong VBA mình sửa như thế nào, hay dùng rất nhiều hàm trong đó thì ko ổn lắm nhỉ???

VD: ứng với mã khách A thì tất cả các số liệu trong 5000 hàng và 10 cột mà có liên quan đến mã khách này đều hiển thj theo đúng hàng có mã khách
 
Upvote 0
Em gửi file đính kèm mong anh chị giáo thêm
Bạn có đưa dữ liệu lên thì cũng nên đưa cho giống thật 1 chút (và ít ra cũng được cở 100 dòng)
Đưa dữ liệu không sát thực tế mất công mọi người lắm (vì có làm cũng chẳng đúng)
 
Upvote 0
Em gửi file đính kèm mong anh chị giáo thêm

Cấu trức File như vậy không cần dùng IF iếc gì cả, với code thì dễ dàng, dùng AutoFilter là xong. Tuy nhiên, bạn cần đưa file mẫu có cấu trúc hàng, cột đúng với cấu trúc file thật của bạn, như vậy viết code mới đúng, còn không mọi người lại phải sửa từng chút một, chán lắm!
 
Upvote 0
Cái file này gần giống với thực tế nhất, mong huynh tỷ giúp đỡ
Đúng ra đây là bài toán TRÍCH LỌC. Vậy đã tính đến việc dùng code thì dùng luôn, cần quái gì công thức cho rách việc
Thí nghiệm file của tôi xem. Bảo đảm dữ liệu cở 20000 dòng cũng OK
 

File đính kèm

Upvote 0
Cảm ơn anh rất nhiều, hhihi
Anh ơi cho em hỏi, sheet 1 của em có 8 cột chính, giờ em muốn sheet 2 của em có 7 cột (Trong 8 cột ấy chẳng hạn: bỏ cột :Tên khách khỏi sheet 2) thì sửa code như thế nào hả anh


Chân thành cảm ơn!!!
 
Upvote 0
ở sheet 2 em muốn làm thêm 1 hàng : Tổng Cộng để cộng số tiền ở các cột có số tiền thì mình làm như thế nào ah??? đặt hàng đó ở đâu để dùng = subtotal(9;())

hàm của anh , muốn giới hạn tính toán trong 1 khoảng nhất định, vd 5000 hàng thôi thì thêm Đk gì ạ
 
Upvote 0
Cảm ơn anh rất nhiều, hhihi
Anh ơi cho em hỏi, sheet 1 của em có 8 cột chính, giờ em muốn sheet 2 của em có 7 cột (Trong 8 cột ấy chẳng hạn: bỏ cột :Tên khách khỏi sheet 2) thì sửa code như thế nào hả anh
Chân thành cảm ơn!!!
Vì cắt bỏ lưng lững ở giữa như thế thì cho dù làm bằng tay bạn cũng phải lọc 2 lần
Code cho sự kiện Worksheet_Change:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sArray1, sArray2, Arr1, Arr2
  On Error Resume Next
  If Target.Address = "$B$6" Then
    Range("A9:H20000").ClearContents
    sArray1 = Sheet1.Range(Sheet1.[A9], Sheet1.[A65536].End(xlUp)).Resize(, 9)
    sArray2 = Sheet1.Range(Sheet1.[A9], Sheet1.[A65536].End(xlUp)).Offset(, 3).Resize(, 6)
    Arr1 = Filter2DArray(sArray1, 9, Target.Value, False)
    Arr2 = Filter2DArray(sArray2, 6, Target.Value, False)
    Range("A9").Resize(UBound(Arr1, 1), 2).Value = Arr1
    Range("C9").Resize(UBound(Arr2, 1), 5).Value = Arr2
  End If
End Sub
-----------------------
Còn cái vụ tính tổng như bạn nói:
ở sheet 2 em muốn làm thêm 1 hàng : Tổng Cộng để cộng số tiền ở các cột có số tiền thì mình làm như thế nào ah??? đặt hàng đó ở đâu để dùng = subtotal(9;())
hàm của anh , muốn giới hạn tính toán trong 1 khoảng nhất định, vd 5000 hàng thôi thì thêm Đk gì ạ
Dễ nhất và khỏi cần suy nghĩ là đặt công thức ở trên cùng (tại dòng 6)... Còn như "cố tình" đặt vào dòng cuối cùng thì... suy nghĩ tiếp đi
 

File đính kèm

Upvote 0
Vì cắt bỏ lưng lững ở giữa như thế thì cho dù làm bằng tay bạn cũng phải lọc 2 lần
Code cho sự kiện Worksheet_Change:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sArray1, sArray2, Arr1, Arr2
  On Error Resume Next
  If Target.Address = "$B$6" Then
    Range("A9:H20000").ClearContents
    sArray1 = Sheet1.Range(Sheet1.[A9], Sheet1.[A65536].End(xlUp)).Resize(, 9)
    sArray2 = Sheet1.Range(Sheet1.[A9], Sheet1.[A65536].End(xlUp)).Offset(, 3).Resize(, 6)
    Arr1 = Filter2DArray(sArray1, 9, Target.Value, False)
    Arr2 = Filter2DArray(sArray2, 6, Target.Value, False)
    Range("A9").Resize(UBound(Arr1, 1), 2).Value = Arr1
    Range("C9").Resize(UBound(Arr2, 1), 5).Value = Arr2
  End If
End Sub
-----------------------
Còn cái vụ tính tổng như bạn nói:

Dễ nhất và khỏi cần suy nghĩ là đặt công thức ở trên cùng (tại dòng 6)... Còn như "cố tình" đặt vào dòng cuối cùng thì... suy nghĩ tiếp đi

hihi, em đặt công thức ở ô 20001 là ok, cảm ơn anh nhiều, em sẽ nghiên cứu lại những gì anh viết
 
Upvote 0
Ngoài điều kiện mã khách ở ô B6 sheet 2, em cho thêm 1 điều kiện nưa ỏ ô C6 sheet 2: ngày chứng từ thì mình sửa mã co ntn (Trích lọc 2 điều kiện)

Chân thành cảm ơn các anh chị trong diễn đàn!!!
 
Upvote 0
ở sheet 2 em muốn làm thêm 1 hàng : Tổng cộng để cộng số tiền ở các cột có số tiền thì mình làm như thế nào ah??? đặt hàng đó ở đâu để dùng = subtotal(9;())

hàm của anh , muốn giới hạn tính toán trong 1 khoảng nhất định, vd 5000 hàng thôi thì thêm đk gì ạ
Vậy nếu bạn muốn dùng cột cộng tổng bên dưới giống như subtotal thì đây là phương án tôi đưa ra
dùng pivot table cho khỏe, nhanh
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom