Nói chứ VBA giờ không nên đầu tư nhiều biết cũng tốt chứ Power Query, SQL, Python nó đơn giản và dễ viết hơn nhiều. VBA đã tồn tại quá lâu nên mọi người thần thánh quá cái gì cũng lôi vào thôi.VBA thì có người làm giùm chứ PQry phải tự học, tự làm. Chả dại![]()
Có hiểu người ta nói gì hôn?Maika8008 đã viết:
VBA thì có người làm giùm chứ PQry phải tự học, tự làm. Chả dại
Nói chứ VBA giờ không nên đầu tư nhiều biết cũng tốt chứ Power Query, SQL, Python nó đơn giản và dễ viết hơn nhiều. VBA đã tồn tại quá lâu nên mọi người thần thánh quá cái gì cũng lôi vào thôi.
Bạn nói vậy thì cũng hơi quá, mỗi cái nó có 1 nhiệm vụ riêng, nếu biết áp dụng và áp dụng đúng chỗ thì bạn sẽ thấy nó ổn, còn không thì cho dù nó hay như thế nào đi nữa thì bạn cũng chả thấy nó ổn, SQL là ngôn ngữ có cấu trúc mà nó cũng được những người code VBA áp dụng thông qua ADO rồi đó, còn học lập trình thì ngôn ngữ nào cũng như ngôn ngữ nào, chỉ cần bạn hiểu rõ kỹ thuật lập trình thì chuyện ngôn ngữ chỉ tầm vài tiếng là ra ngay. Nếu dữ liệu không ngay hàng thẳng lối thì bạn dùng những công cụ như bạn kể có đáp ứng được yêu cầu không? Quan trọng là mình dùng nó áp dụng cho cái gì, chứ đừng đánh đồng VBA chả là gì. Nếu VBA chả ra gì thì tại sao nó vẫn phát triển cho tới ngày này người ta vẫn sử dụng, điển hình là VBNet. Còn đã xác định học lập trình rồi thì ta cứ thử mọi thứ, thử rồi mới biến kiến thức hay dở như thế nào, không ai ngay từ đầu làm được cái hoàn hảo đâu. cũng phải học từ cái dở nhất và có thể không áp dụng, cho dù nó không áp dụng thì nó cũng giúp bạn tiến xa hơn 1 tí nữa về cách tư duy.Mấy cái thống kê này Dir điếc gì cho nó rắc rối chứ SQL với Power Query cho nó nhàn đầu update lên ACE à. Sau biết thêm SQL vs Power Query VBA lâu lâu ms động đến
Cảm ơn bác đã chỉ dẫn.... . . .
(tự xóa phần đàu này vì người hỏi cũng tự xóa bài mình, câu trả ời trở nên rắn mất đầu.)
Nhưng tôi khong khuyến khích cái mớ STT:
- Thứ nhất, tại sao một bảng tổng hợp lại có số thứ tự? Số ấy dùng để làm gì? Cahr thấy lô gic nào cả.
- SQL là ngôn ngữ chú trọng lô gic, và chuyên trên CSDL LH. CSDL LH chân chính không có khái niệm số dòng. Và vì vvaayjphair đi vòng vo tam quốc để lập số dòng.
- Tôi tôn trọng bảng chuẩn hơn bảng hoa lá cành. Chuẩn thì không có STT.
Chú thích:
Thèm STT quá thì thêm dòng code này vào VBA
Ví dụ bắt đầu từ ô Cells(dngBD, cotSTT), và kết thúc ở ô Cells(dngKT, cotSTT)
Range(Cells(dngbd, cotSTT), Cells(dngkt, cotSTT)).Value = _
Evaluate("ROW(" & dngbd & ":" & dngkt & ") - " & (dngbd - 1))
Người mà bạn nói kia ý chỉ muốn khoe trình độ của mình thôi. Nếu càn mách cho các thành viên khác thì bạn chỉ cần điểm thẳng vào chỗ cẩu thả sai bấy của y:Bạn nói vậy thì cũng hơi quá, mỗi cái nó có 1 nhiệm vụ riêng, nếu biết áp dụng và áp dụng đúng chỗ thì bạn sẽ thấy nó ổn, còn không thì cho dù nó hay như thế nào đi nữa thì bạn cũng chả thấy nó ổn,
Chỗ này thì bạn lầm..... Nếu VBA chả ra gì thì tại sao nó vẫn phát triển cho tới ngày này người ta vẫn sử dụng, điển hình là VBNet. ...
Thèm STT quá thì thêm dòng code này vào VBA
Ví dụ bắt đầu từ ô Cells(dngBD, cotSTT), và kết thúc ở ô Cells(dngKT, cotSTT)
Range(Cells(dngbd, cotSTT), Cells(dngkt, cotSTT)).Value = _
Evaluate("ROW(" & dngbd & ":" & dngkt & ") - " & (dngbd - 1))
Tôi nhớ hình như sẽ bị ra trị của dòng đầu tiên. Chưa rảnh để thử.Range(Cells(dngbd, cotSTT), Cells(dngkt, cotSTT)).Value = evaluate("row(R:R)")
là được rồi anh.
Dạ, em dùng hoài, mà trước khi viết lên đây còn cẩn thận test lại 1 lần nữa khỏi bị mắng.Tôi nhớ hình như sẽ bị ra trị của dòng đầu tiên. Chưa rảnh để thử.
Viết vầy có lẽ nhanh hơn một tẹo.Range(Cells(dngbd, cotSTT), Cells(dngkt, cotSTT)).Value = evaluate("row(R:R)")
là được rồi anh.
Range(Cells(dngbd, cotSTT), Cells(dngkt, cotSTT)).Value = Evaluate("row(A1:A" & CStr(dngkt - dngbd + 1) & ")")
Không biết đúng ý chị không?Xin chào tất cả mọi người,
Vậy trong trường hợp dữ liệu tại cột B có dòng trống xen kẽ như dạng ảnh kèm,
OT muốn đánh STT theo cột B nếu có dòng trống thì sẽ bắt đầu lại từ 1.
Thì với cách sử dụng "Evaluate" công thức sẽ như thế nào ạ?
View attachment 289937
=IF(B2="","",IF(ISNUMBER(A1),A1+1,1))
Cảm ơn bạn @THÓC SAMA rất nhiều.Không biết đúng ý chị không?
Công thức tại A2:
Mã:=IF(B2="","",IF(ISNUMBER(A1),A1+1,1))
Đã nghe lời bác ấy thì phải nghe cho trót: "tại sao một bảng tổng hợp lại có số thứ tự? Số ấy dùng để làm gì? Chả thấy lô gic nào cả."Cảm ơn bạn @THÓC SAMA rất nhiều.
Nếu dùng công thức hay vòng lặp OT làm được nhưng OT đang hỏi cách sử dụng "Evaluate" như các bài trên theo cách mà bác @VetMini đã chỉ ấy ạ.
Chào chú Mỹ,Đã nghe lời bác ấy thì phải nghe cho trót: "tại sao một bảng tổng hợp lại có số thứ tự? Số ấy dùng để làm gì? Chả thấy lô gic nào cả."
Tuy nhiên nếu không phải bảng tổng hợp (là 1 báo cáo hoàn chỉnh để in), và quá yêu cái valuate, thì evaluate chính cái công thức excel.
Yêu thì nhận là yêu chứ gì mà ngại. Với công thức của bạn Thóc_Sama =IF(B2="","",IF(ISNUMBER(A1),A1+1,1)), không dùng evaluate:Chào chú Mỹ,
Ở trên con cũng có đồng ý là STT không quan trọng rồi mà.
Nhưng đã lỡ hỏi rồi thì con hỏi luôn tham khảo để mở mang thêm mà chú.
[A2:A10] = ("=IF(RC[1]="""","""",if(isnumber(R[-1]C),R[-1]C + 1,1))")
[A2:A10]=[A2:A10].value
Tại sao không dùng vòng lặp For Next cho đơn giản??? Tại sao cứ phải Evaluate???Xin chào tất cả mọi người,
Vậy trong trường hợp dữ liệu tại cột B có dòng trống xen kẽ như dạng ảnh kèm,
OT muốn đánh STT theo cột B nếu có dòng trống thì sẽ bắt đầu lại từ 1.
Thì với cách sử dụng "Evaluate" công thức sẽ như thế nào ạ?
View attachment 289937