Le Minh Duc
Le Minh Duc
Thảo luận 47 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 293 lượt xem

Mình sử dụng hàm IF lồng nhiều điều kiện, thầy giúp mình đặt điều kiện trong khoảng với.

Nhờ Thầy hướng dẫn cách lồng hàm có nhiều điều kiện, nhưng tính điều kiện trong khoảng giúp. Mình làm sáng giờ nhưng nó ko hiểu?

Nó chỉ hiện lên 2 mục là hàng bán được nhưng chậm và hàng tồn thôi. 

Mong Thầy hướng dẫn: 

Thảo luận 47 câu trả lời
Lượt xem 293 lượt xem
Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 14, 2021

Với biến r  bạn có thể xác định bằng công thức SUMIFS để tổng hợp theo:

- Điều kiện 1: từ ngày

- Điều kiện 2: đến ngày

- Điều kiện 3: loại nhập/xuất: là Xuất kho

- Điều kiện 4: mã hàng hóa

Với biến v bạn dùng hàm SUMIFS để tổng hợp theo:

- Điều kiện 1: từ ngày

- Điều kiện 2: đến ngày

- Điều kiện 3: loại nhập/xuất: là Nhập kho

- Điều kiện 4: mã hàng hóa

Biến k ở đây mình hiểu là so sánh tỷ lệ giữa Hàng xuất - Hàng nhập trên tổng số hàng xuất.

Cách viết hàm SUMIFS bạn xem lại hướng dẫn trong khóa học nhé.

Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 14, 2021

Ah ko Thầy oi! 

Thầy chỉ hướng dẫn giúp em lồng cái hàm IF thôi. Vì em đã có kết quả của K rồi.

Thầy chỉ giúp em hàm IF để ra kết quả trong ô màu xanh em tô thôi Thầy. 

Vì em có sử dụng hàm IFS như trên mà ko ra? nên nhờ Thầy hướng dẫn

Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 14, 2021

=IFS(I9<-1,"HÀNG TỒN",I9>-1,"BÁN ĐƯỢC NHƯNG CHẬM", I9<-0.3,"BÁN ĐƯỢC NHƯNG CHẬM", I9>-0.3,"BÁN BÌNH THƯỜNG",I9<-0.1,"BÁN BÌNH THƯỜNG",I9>-0.1,"BÁN CHẠY",I9<0.2,"BÁN CHẠY",I9>0.2,"KHAN HÀNG",I9<1,"Khan hàng")


Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 14, 2021

Dùng 4 hàm if lồng nhau như thế này bạn nhé:

=IF(I9<-1, "Hàng tồn", 
      IF(I9<-0.3, "Bán được nhưng chậm",
           IF(I9<-0.1, "Bán bình thường", 
                IF(I9<0.2, "Bán chạy", "Khan hàng"))))
Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 14, 2021

Dạ Cảm ơn Thầy. 

Nhưng Điều kiện của hệ số lưu kho K nằm trong khoảng, mình ko sử dụng trong khoảng được hay sao Thầy ah?


Vỗ tay vỗ tay
Le Minh Duc 15:04 - Apr 14, 2021

Chào bạn bạn có thể đọc thêm bài này:

https://gitiho.com/blog/huong-dan-cac...

Vỗ tay vỗ tay
Le Minh Duc 14:04 - Apr 27, 2021

Thầy ơi!  Em đang nhờ các bạn trên Facebook của GITIHO giúp đỡ về cách lồng hàm theo điều kiện này. Có post bài trên Facebook nhưng lại bị xóa bài rồi ah. 

Đọc bài viết Thầy gợi ý nhưng cũng ko viết dc hàm có điều kiện trong khoảng. Nhờ Thầy chỉ giúp. 

Thanks

Vỗ tay vỗ tay
Le Minh Duc 10:04 - Apr 29, 2021

Chào bạn bạn có thể lồng hàm như ở trên nhé, hoặc đẩy file giúp gitiho

Vỗ tay vỗ tay
Le Minh Duc 15:05 - May 19, 2021

Thầy ơi!  Em có 1 File dữ liệu mà 15.000 dòng và 16 cột. Tổng cộng khoảng 5 sheet.

Hiện tại dữ liệu dùng công thức khá nhiêu. Thầy có thể giúp em giải pháp nào cho nhẹ dữ liệu được không Thầy?  Thầy hỗ trợ giúp em với, với 15.000 dòng thì công thức nó rất nặng File, em có tìm hiểu VBA trên diễn dàn và Group Gitiho, nhưng cũng chỉ Fiildown công thức các ô.

Có giải pháp nào mà làm nhẹ File nhất không Thầy? Thầy cho em địa chỉ mail em đẩy File nhờ Thầy hỗ trợ giúp em học viên với ah. 

Thanks Thầy

Vỗ tay vỗ tay
Le Minh Duc 15:05 - May 19, 2021

chào bạn, bạn cần sử dụng vòng lặp hoặc sql để thực hiện công việc trên nhé.

Vỗ tay vỗ tay
Le Minh Duc 16:05 - May 19, 2021

Chào Thầy! 

Sử dụng vòng lặp là sao Thầy ah? Em chỉ cần duy nhất 1 dòng đầu có copy, và các dòng sau tới n dòng thì chỉ cần copy dòng liền kề. Để không bị giản nở quá nhiều dữ liệu có cột công thức sẽ khiến File quá nặng. 

Còn SQL thì em đa đăng ký nhưng chưa học. Thầy có thể hỗ trợ Em với ah?

Vỗ tay vỗ tay
Le Minh Duc 16:05 - May 19, 2021

Chào bạn trong phần này bạn cần sử dụng vòng lặp thay cho công thức, nghĩa là vba sẽ thay thế toàn bộ công thức của bạn, bạn chỉ cần ấn 1 nút là ra kết quả, bỏ qua công thức.

Vỗ tay vỗ tay
Le Minh Duc 16:05 - May 19, 2021

Chào Thầy! 

Thầy hướng dẫn giúp em 1 câu lệnh cho vòng lặp dc không Thầy. Em sẽ sử dụng cho 1 dòng đầu tiên sử dụng công thức và áp dụng cho 15000 dòng còn lại. Tương tự vậy em sẽ áp dụng cho 5 Sheet còn lại. 

Cảm ơn Thầy

Vỗ tay vỗ tay
Le Minh Duc 16:05 - May 19, 2021

Chào Thầy ah

Những cột em đánh dấu vàng là sử dụng công thức, và những cột này mang tính chất là copy công thức của dòng đầu tiên, vì đa phần là công thức Vlookup; Sum; IF. 

Nhưng nếu sử dụng cho 16 cột và 15000 dòng thì nó rất năng. 

Nên vì vậy nhờ Thầy hỗ trợ giúp ah. Chứ File nặng quá mỗi lần thao tác là đợi File load dữ liệu rất lâu. 

Thầy hỗ trợ và hướng dẫn giúp học trò với ah


Vỗ tay vỗ tay
Le Minh Duc 17:05 - May 19, 2021

Chào bạn bạn sẽ cho dữ liệu vào mảng và đưa ra kết quả bằng cách lặp trong vòng lặp đó có điều kiện nhé.

Vỗ tay vỗ tay
Le Minh Duc 17:05 - May 19, 2021

Dạ Chào Thầy! 

Lập trình VBA em mới học tới chương 5 thôi Thầy ah. Vẫn đang tiếp tục học để nâng cao kiến thức. Vì vậy Thầy giúp em 1 code VBA vòng lập để em hiểu rõ hơn và sau đó tự học và tự làm các công thức khác dc ko ah?

Ví dụ: Em có cột công thức như sau: =IFERROR(IFS(D8="COOP",VLOOKUP(F8,DMMH!$B$4:$H$1305,5,0), D8="STNS",VLOOKUP(F8,DMMH!$B$4:$H$1305,6,0), D8="HS",VLOOKUP(F8,DMMH!$B$4:$H$1305,7,0)),"")

Công thức này sẽ lập tới dòng 15000. Vậy Thầy Code giúp em 1 đoạn để em tự học và tự tìm hiểu thêm dc ko Thầy. 

Em cảm ơn Thầy. 

Vỗ tay vỗ tay
Le Minh Duc 15:06 - Jun 25, 2021

Dạ Chào Thầy! 


Thầy có thể xem qua File Excel của em được không ah? Chứ công thức nhiều quá. Mà dùng công thức cho cả 5 sheet với số dòng và cột lớn. Nó đơ luôn.

Thầy hướng dẫn giúp code VBA để hoàn thiện File được không Thầy? 

Vỗ tay vỗ tay
Le Minh Duc 15:06 - Jun 25, 2021

Chào bạn bạn có thể gửi file lên giúp gitiho nhé.

Vỗ tay vỗ tay
Le Minh Duc 10:06 - Jun 26, 2021

Dạ Chào Thầy! 

Cảm ơn Thầy hỗ trợ. 

Link File ah:  https://drive.google.com/file/d/1rOCS...

Vỗ tay vỗ tay
Le Minh Duc 11:06 - Jun 26, 2021

File bạn dùng nhiều công thức động quá, lại sử dụng phương pháp copy paste nên file sẽ càng nặng và chậm khi chạy code.

Bạn có thể làm theo phương pháp sau:

Mỗi báo cáo có 1 nút update. Khi bấm nút thì mới đưa công thức tính toán cho báo cáo, còn ở trạng thái bình thường thì báo cáo không có công thức (chỉ có kết quả công thức dưới dạng giá trị, ko phải công thức sống).

Code mẫu như sau:

Bước 1: tìm dòng cuối của báo cáo

Dim lr as long
lr = Sheets(...).Range(...).End(xlUp).Row

Bước 2: công thức ở dòng đầu của báo cáo, filldown xuống dòng cuối

ví dụ vùng công thức áp dụng là cột D, từ dòng 6 tới dòng cuối

range("D6:D" & lr).FillDown

Bước 3: bỏ công thức, giữu lấy kết quả

range("D7:D" & lr).Value = range("D7:D" & lr).Value

Chú ý là ở bước 3 vùng xóa công thức tính từ dòng 7, không phải dòng 6 nhé. Như vậy chỉ có công thức sống trong dòng 6 thôi, còn các dòng khác là kết quả của công thức.

=> Khi lặp lại bước này cho lần cập nhật sau thì không phải lo chuyện bị mất công thức.

Bạn gom toàn bộ code trong 1 sub và gán macro vào nút update báo cáo

Vỗ tay vỗ tay
Le Minh Duc 11:06 - Jun 26, 2021

Chú ý đây chỉ là biện pháp hỗ trợ thôi nhé. Vì file của bạn có đặc điểm là số lượng dữ liệu lớn => để làm tốt hơn thì cần thành thạo toàn bộ kiến thức VBA, sau đó mới áp dụng sẽ tốt hơn là vừa học vừa áp dụng. Bởi để dùng VBA tốt thì kiến thức phải có hệ thống và nền tảng, nên bạn hãy học hết 1 lượt rồi mới học sâu vào từng phần mà bạn quan tâm, tiếp đến khi áp dụng vào thực tế cần luyện tập nhiều lần để phát triển tư duy lập trình và viết code.

Tại thời điểm này rất khó để có 1 phương pháp tốt nhất cho bạn được, nên bạn thử áp dụng cách ở trên để giảm bớt công thức sống nhé. Như thế file cũng nhẹ và tính nhanh hơn rồi.

Vỗ tay vỗ tay
Le Minh Duc 15:06 - Jun 26, 2021

Dạ Cảm ơn Thầy! 

Thầy ơi nó báo lỗi vậy là sao Thầy ah?


Vỗ tay vỗ tay
Le Minh Duc 15:06 - Jun 26, 2021

dạ Cảm ơn Thầy em viết sai Row thành Rom và sửa lại rồi. 

Em đang mò chọn nhiều sheet và nhiều cột. và Filldown 1 lần được ko Thầy?

Vỗ tay vỗ tay
Le Minh Duc 16:06 - Jun 26, 2021

Dạ Chào Thầy! 

Em sử dụng cho nhiều dòng dc rồi ah. Tuy nhiên vẫn chưa làm dc cho nhiều sheet ( sheet khác ở đây bằng đúng cột và dòng cần Filldown). 

Vậy thì có sử dụng chung 1 code áp dụng cho nhiều sheet khác nhau dc không vậy Thầy ah? 

Cảm ơn Thầy

Vỗ tay vỗ tay
Le Minh Duc 16:06 - Jun 26, 2021

Dạ Chào Thầy! 

Còn 1 chút xíu vấn đề nữa, Thầy hướng dẫn em với ah. Các bảng khác khi em Filldown xuống thì nó copy mất luôn cả dòng Tổng cộng. ( dòng subtotal cuối cùng) của bảng. 

vậy làm thế nào để nó hiểu và chừa dòng tổng cộng ra dc vậy Thầy ah

Vỗ tay vỗ tay
Le Minh Duc 21:06 - Jun 27, 2021

Chào bạn bạn xem lại biến dongcuoi của bạn đâng bị sai nhé.

Vỗ tay vỗ tay
Le Minh Duc 21:06 - Jun 27, 2021

Chào bạn, nếu bạn muốn nhanh hơn trong quá trình viết ra ứng dụng như tổng hợp có thể xem thêm khoá vbag02 của gitiho

https://by.com.vn

Trong phần này có phần dic dùng tổng hợp dữ liệu

Vỗ tay vỗ tay
Le Minh Duc 10:06 - Jun 28, 2021

Chào Thầy!  

Link Thầy gửi ko vào được ah?

Với Thầy chỉ giúp em: 

Còn 1 chút xíu vấn đề nữa, Thầy hướng dẫn em với ah. Các bảng khác khi em Filldown xuống thì nó copy mất luôn cả dòng Tổng cộng. ( dòng subtotal cuối cùng) của bảng. 

vậy làm thế nào để nó hiểu và chừa dòng tổng cộng ra dc vậy Thầy ah


Thanks Thầy

Vỗ tay vỗ tay
Le Minh Duc 11:06 - Jun 28, 2021

Chào bạn, phần này bạn cần đăng ký khoá học sẽ có phần dic dùng để tổng hợp dữ liệu nhé.

Vỗ tay vỗ tay
Le Minh Duc 09:06 - Jun 30, 2021

Dạ Chào Thầy! 

Nhờ Thầy chỉ em giúp!  Em thêm cột G vào thì báo lỗi này. 

Nhưng bỏ cột G đi thì code chạy bình thường. 

Em có tra google về lỗi này thì báo là sai đối số or thuộc tính. 

Thầy hướng dẫn giúp em với ah? 

Vỗ tay vỗ tay
Le Minh Duc 10:06 - Jun 30, 2021

Chào bạn bạn lấy từng cột riêng lẻ bạn nhé

range("D7:D"&dongcuoi).value = range("D7:D"&dongcuoi).value

kiểu này nhé bạn thử xem hi vọng giúp được bạn

Vỗ tay vỗ tay
Le Minh Duc 10:07 - Jul 01, 2021

Dạ chào Thầy! 

Cảm ơn Thầy đã hỗ trợ. 

Về công thức tìm dòng cuối có áp dụng dc cho các sheet giống nhau và cùng fiildow cột bằng nhau dc ko Thầy.???

Em có chạy code này cho 2 sheet vì cùng dòng cột. Nhưng báo lỗi, Thầy hướng dẫn giúp em  ah? Thanks Thầy.


Vỗ tay vỗ tay
Le Minh Duc 11:07 - Jul 01, 2021

Chào bạn bạn kiểm tra lại code dongcuoi nhé, nếu bạn muốn chỉ từng sheets bạn nên gõ tên sheets trước range nhé.

Vỗ tay vỗ tay
Le Minh Duc 15:07 - Jul 02, 2021

Dạ Chào Thầy! 

Thầy hướng dẫn giúp em đoạn code sau với ah. 

Với Sub hamIFS_tinhluong ( trong hình): thì chạy bình thường và đưa dữ liệu vào dc. 

Nhưng với sub VonglapIFS_tinhluong . EM chỉ khai báo biến thôi thì báo lỗi. Mặc dù em dò kỹ lại rồi thì khai báo biến đã đúng và đủ. 

Thầy hướng dẫn giúp em vói ah. Thanks Thầy. 


Vỗ tay vỗ tay
Le Minh Duc 15:07 - Jul 02, 2021

Chào bạn bạn thêm then vào cuối nữa nhé, do cú pháp của bạn thiếu.

Để tương tác với gitiiho tốt hơn, với câu hỏi khác nhau bạn nên tạo ra chủ đề riêng biệt, cảm ơn bạn

Vỗ tay vỗ tay
Le Minh Duc 15:07 - Jul 02, 2021

Dạ Chào Thầy! 

Em chưa hiểu rõ ý Thầy nói luôn ah.

Sub hamIFS_tinhluong ( trong hình): thì chạy bình thường và đưa dữ liệu vào dc. 

Nhưng với sub VonglapIFS_tinhluong thì nó không chạy. 


Thêm then ở đâu nữa Thầy!?? Vì câu nào cũng Có THEN rồi tới lương. = .

Vậy thêm Then ở vị trí nào ah?



Vỗ tay vỗ tay
Le Minh Duc 16:07 - Jul 02, 2021

Nghĩa là bạn tách ra như sau:

IF dieu kien then
  //kq1
ElseIf dk then
 //kq2
end if

Chủ đề mới là bạn tạo ra câu hỏi mới ấy nếu không không liên quan đến phần cũ

Vỗ tay vỗ tay
Le Minh Duc 17:07 - Jul 02, 2021

Dạ Chào Thầy! 

Vậy bảng trên của em là đúng chỉ có là phải xuống dòng phải ko Thầy. 

Vì Then luong = 11000000

Vì vậy đúng với code hình trên của em rồi. 

Giờ em xuống dòng mà cũng báo lỗi Thầy ah. 


Vỗ tay vỗ tay
Le Minh Duc 17:07 - Jul 02, 2021

bạn gửi file lên giúp gitiho nhé./

Vỗ tay vỗ tay
Le Minh Duc 18:07 - Jul 02, 2021

Dạ Chào Thầy! 

Mong Thầy giúp đở. sub VonglapIFS_ tinhluong ( có khai báo biến nha Thầy). Thanks Thầy ah

https://drive.google.com/file/d/1MiA6...

Vỗ tay vỗ tay
Le Minh Duc 08:07 - Jul 03, 2021

Chào bạn bạn cho gitiho xin quyền truy cập nhé.

Vỗ tay vỗ tay
Le Minh Duc 09:07 - Jul 03, 2021

Dạ Chào Thầy! 

https://drive.google.com/file/d/1MiA6...

Thanks Thầy! 

Vỗ tay vỗ tay
Le Minh Duc 10:07 - Jul 03, 2021

Chào bạn bạn thử code sau nhé

Sub VonglapIFS_tinhluong()
Dim i As Long, BP As String, ngay As String, luong As Variant
    For i = 2 To 10
        BP = Sheet1.Range("E" & i).Value
        ngay = Sheet1.Range("S" & i).Value
' Bo phan BGD
        If BP = "BGD" And ngay < 31 Then
                luong = 10000000
        ElseIf BP = "BGD" And ngay < 720 Then
            luong = 11000000
        ElseIf BP = "BGD" And ngay < 1080 Then
            luong = 12000000
        ElseIf BP = "BGD" And ngay < 1440 Then
            luong = 13000000
        ElseIf BP = "BGD" And ngay < 2160 Then
            luong = 14000000
        ElseIf BP = "BGD" And ngay < 2880 Then
            luong = 15000000
        End If
        Sheet1.Range("G" & i).Value = luong
    Next
End Sub
Vỗ tay vỗ tay
Le Minh Duc 10:07 - Jul 03, 2021

Dạ chào Thầy ah! 

Cảm ơn Thầy đã hỗ trợ. 

Code vào thì chạy nhưng biến i chạy từ 2 đến 10 đều cho ket quả là 14000000

Em sợ bị thiếu điều kiện nên cho thêm điều kiện của quản đốc QDO vào. 

Nhưng cho vào thì code báo lỗi " Next without for" 

Thầy hướng dẫn giúp em ah. Thanks 

Vỗ tay vỗ tay
Le Minh Duc 10:07 - Jul 03, 2021

chào bạn cú pháp if là phải end if để kết thúc mới mở được thêm nhé.

Vỗ tay vỗ tay
Le Minh Duc 16:07 - Jul 03, 2021

Dạ Chào Thầy! 

Cảm ơn Thầy đã hỗ trợ Em ah. Em làm dc hết rồi, cảm giác sướng lắm. Nhưng với 14 bộ phận và câu lệnh dài. Có vẻ nó cũng khá là nặng. Nên chạy là văng ra khỏi Excel.

Em cũng đang loay hoay tìm xem có cách nào khác ko? Chứ ko thì phải sử dụng công thức tay cho từng bộ phận như cũ.

Code rồi mà nó khá năng đó Thầy.

Cảm ơn Thầy

Vỗ tay vỗ tay
Le Minh Duc 23:07 - Jul 04, 2021

Chào bạn nếu bạn muốn nhẹ nữa có thể dùng mảng và sql thì nó sẽ nhanh và nhẹ hơn bạn có thể tham khảo tại đây

https://by.com.vn/

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông