Giúp chuyển công thức sang macro (1 người xem)

Người dùng đang xem chủ đề này

Xuân hiếu

Thành viên thường trực
Tham gia
23/5/08
Bài viết
235
Được thích
72
Mình có cái công thức thống kê tổng số (ts), nữ (n), dân tộc (dt), nữ dân tộc (ndt) mình muốn chuyển sang mác rô có cái nút tên thông kê cho nhẹ sau khi nhập điểm xong rùi nhấn cái nút thống kê thì chương trình thông kê mới chạy mới hiện lên dữ liệu thông kê. Cảm ơn các anh chị nhiều

ví dụ mẫu

Tạo một cái nút có chữ thống kê nằm phía trên sau khi nhập xong nhấn vào nút đó nó xuất ra như trong ví dụ được không?
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Biết nói thế này bạn sẽ giận, nhưng cũng chỉ muốn chúng ta khá hơn thôi:

Bạn vô trách nhiệm với câu hỏi của mình & với cộng đồng:

(*) Tên các học sinh làm gì lại giống nhau hết vậy?! Chuyện làm 1 dẫy tên tăng dần trong excel có khó gì lắm đâu cơ chứ!

Đã muốn thống kê theo dân tộc, thì có trên 2 dân tộc trở lên mới dễ kiểm đúng sai chứ!

(*) Bạn nói phải thống kê rất nhiều môn; Vậy không thể định lượng là bao nhiêu môn được ư?

(*) Mình đoán bạn muốn thống kê số loại giỏi, khá, Trung bình, Kém, yếu,. . . Vậy như thế nào là đạt loại giỏi vậy?, Các loại khác nữa. Có phải ai cũng phải biết như bạn là loại khá là điểm trên hay = 6.5 đến 8, . . .

Vấn đề bạn nêu ra càng khúc chiết, càng nhận được nhiều những ý kiến xác đán; & quan trọng hơn là đỡ tốn thời gian của bạn cũng như của cộng đồng.

Cũng những mong ngày càng tốt hơn mà thôi!

Thân ái!
 
Xin các bạn chuyển giúp công thức nay sang macro

Xin các anh chị chuyển giúp cái công thức trong ví dụ đính kèm vào macro (dùng Macro để điền hàm nhưng mình chưa biết phần này xin cảm ơn). Xin cảm ơn nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Xin các anh chị chuyển giúp cái công thức trong ví dụ đính kèm vào macro (dùng Macro để điền hàm nhưng mình chưa biết phần này xin cảm ơn). Xin cảm ơn nhiều
Việc chuyển công thức thành code quá đơn giản ---> Tóm lại viết trong bảng tính thế nào thì trong code cũng y chang vậy ---> Có thể dùng chức năng record macro để thử nghiệm
Tuy nhiên nếu là tôi thì tôi cóc làm thế ---> Nếu vì nguyên nhân cho "nhẹ" máy, vậy thì tôi nhập công thức 1 cell đầu tiên... đến cuối cùng tôi fill 1 nhát là ra
Bạn so sánh giữa cách dùng macro với cách làm của tôi thì nhanh chậm thế nào?
 
Nếu bạn thích nghiên cứu về VBA, thì xin giới thiệu đặc sản hàm người dùng

PHP:
Option Explicit:        Option Base 1
Function ThongKe(LookUpRange As Range, Chuan As Range)
 ReDim MDL(4, 4) As Integer:           Dim Lop As Double, jJ As Byte
 Dim Rng As Range, Clls As Range
 
 Set Rng = LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count)
 For jJ = 1 To Chuan.Count
   With Application.WorksheetFunction
      MDL(1, jJ) = .CountIf(Rng, Cells(5, 3 + jJ))
   End With
   Lop = Chuan.Cells(1).Offset(, jJ - 1).Value
   For Each Clls In Rng
      If Clls.Offset(, 1).Value <> "Nam" And Clls.Value = Lop Then
         MDL(2, jJ) = MDL(2, jJ) + 1
         If Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
            MDL(4, jJ) = MDL(4, jJ) + 1
      End If
      If Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
         MDL(3, jJ) = MDL(3, jJ) + 1
   Next Clls
 Next jJ
 ThongKe = MDL
End Function
Chú í: Đó là hàm mảng nha!
(Xem thêm trong file)
 

File đính kèm

Nếu bạn thích nghiên cứu về VBA, thì xin giới thiệu đặc sản hàm người dùng
PHP Code:
Option Explicit: Option Base 1
Function ThongKe(LookUpRange As Range, Chuan As Range)
ReDim MDL(4, 4) As Integer: Dim Lop As Double, jJ As Byte
Dim Rng
As Range, Clls As Range

Set Rng
= LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count)
For
jJ = 1 To Chuan.Count
With Application
.WorksheetFunction
MDL
(1, jJ) = .CountIf(Rng, Cells(5, 3 + jJ))
End With
Lop
= Chuan.Cells(1).Offset(, jJ - 1).Value
For Each Clls In Rng
If Clls.Offset(, 1).Value <> "Nam" And Clls.Value = Lop Then
MDL
(2, jJ) = MDL(2, jJ) + 1
If Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
MDL
(4, jJ) = MDL(4, jJ) + 1
End
If
If
Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
MDL
(3, jJ) = MDL(3, jJ) + 1
Next Clls
Next jJ
ThongKe
= MDL
End
Function

Chú í: Đó là hàm mảng nha!
(Xem thêm trong file)
Tập tin đính kèm
rar.gif
GPE.rar (12.3 KB, 2 lần tải)

Xin cảm ơn bạn nhiều nhưng mình muốn bạn tạo một cái nút tên thống kê giả sử cái nút này nằm ở ô A1 khi nhấn cái nút nó mới hiện lên kết quả thống kê và một cái nút kết thúc để khi nhấn nó thì hủy lệnh thống kê mục đích là khi cần mới thống kê còn không thì thôi cho nó nhẹ.
Bạn giúp mình với nhé
 
Việc chuyển công thức thành code quá đơn giản ---> Tóm lại viết trong bảng tính thế nào thì trong code cũng y chang vậy ---> Có thể dùng chức năng record macro để thử nghiệm
Tuy nhiên nếu là tôi thì tôi cóc làm thế ---> Nếu vì nguyên nhân cho "nhẹ" máy, vậy thì tôi nhập công thức 1 cell đầu tiên... đến cuối cùng tôi fill 1 nhát là ra
Bạn so sánh giữa cách dùng macro với cách làm của tôi thì nhanh chậm thế nào?

Không phải ý đó đâu bạn ơi. Vì trong cái phần mình thiết kế nó nặng lắm lung tung cả lên đến 50M luôn nên rất chậm đặt biệt là khi lưu do đó mình muốn là một số công thức, thống kê, có một cái nút riêng khi bình thường không nhấn cái nút đó thì nó không hoạt động giống như chưa có cái bảng thống kê đó. khi nào muốn thống kê báo cáo ta nhấn cái nút đó thì nó xuất hiện dữ liệu thống kê để lấy ra mà báo cáo,... đó bạn. Với lại sau khi lấy xong dữ liệu đó có cái nút đóng lại để tắt cái thống kê đó đi nhằm làm cho cái phần tính điểm cho nó nhẹ đó bạn
Mình cảm ơn bạn rất nhiều
Giúp mình với nhé bạn

 

File đính kèm

Xin cảm ơn bạn nhiều nhưng mình muốn bạn tạo một cái nút tên thống kê giả sử cái nút này nằm ở ô A1 khi nhấn cái nút nó mới hiện lên kết quả thống kê và một cái nút kết thúc để khi nhấn nó thì hủy lệnh thống kê mục đích là khi cần mới thống kê còn không thì thôi cho nó nhẹ.
Bạn giúp mình với nhé
Vầy được không?
- Bấm nút Thống kê, 1 InputBox hiện ra cho bạn chọn vùng dữ liệu điểm
- Chọn xong, OK 1 nhát thì ĐTB sẽ hiện ra tại cột kế bên
- Bấm nút Xóa nếu muốn xóa toàn bộ điểm TB
Xem file
-----------
Chán đồng chí quá... Gợi ý sử dụng record macro mà dường như chẳng chịu nghiên cứu gì cả
 

File đính kèm

Thì đây, muốn ma "cá rô" hay "cá chép" gì cũng được
Thân

Cò Già chưa bẫy lỗi chia cho 0 à nha! Vì hàm Average cũng dùng phép chia (nếu chọn vùng là rỗng thì lỗi ngay). điều thứ 2 là tôi nghĩ không phải ý tác giả muốn chép công thức rồi Fill hoặc gán vào cell công thức mà là khi ra kết quả, chỉ hiển thị là giá trị thôi chứ không có công thức! Như vậy, Cò Già phải thêm cái copy value vào nữa là đúng ý tác giả đó!
 
Lần chỉnh sửa cuối:
Không phải ý đó đâu bạn ơi. Vì trong cái phần mình thiết kế nó nặng lắm lung tung cả lên đến 50M luôn nên rất chậm đặt biệt là khi lưu do đó mình muốn là một số công thức, thống kê, có một cái nút riêng khi bình thường không nhấn cái nút đó thì nó không hoạt động giống như chưa có cái bảng thống kê đó. khi nào muốn thống kê báo cáo ta nhấn cái nút đó thì nó xuất hiện dữ liệu thống kê để lấy ra mà báo cáo,... đó bạn. Với lại sau khi lấy xong dữ liệu đó có cái nút đóng lại để tắt cái thống kê đó đi nhằm làm cho cái phần tính điểm cho nó nhẹ đó bạn
Mình cảm ơn bạn rất nhiều
Giúp mình với nhé bạn
Nếu vì lý do file năng do công thức nhiều thì tôi nghĩ có dù bạn có chuyển nó thành code nó vẫn cứ nặng như thường
File Excel mà lên đến 50 MB thì quả thật rất bất thường, bạn nên xem lại việc bố trí dữ liệu và tìm xem liệu có phải file bị virus hay không?
- File bạn bao nhiểu sheet?
- Mổi sheet có bao nhiêu dòng, bao nhiêu cột?
 
Nhưng sao khi làm xong khóa (protect) lại thì gọi macro macro báo lỗi làm sao đây. Chưa thành công gì cả
 
Nhưng sao khi làm xong khóa (protect) lại thì gọi macro macro báo lỗi làm sao đây. Chưa thành công gì cả

Khi dùng protect, bạn phải mở khóa trước rồi chạy macro, sau đó khóa lại. Như vậy, bạn phải thêm đoạn code mở khóa trước rồi mới đến macro thống kê, sau đó là khóa lại.
 
Nhưng sao khi làm xong khóa (protect) lại thì gọi macro macro báo lỗi làm sao đây. Chưa thành công gì cả
Khi khóa bảng tính ông BIU cho phép mình khóa HẾT, TỪNG VÙNG, 1 CELL.... có khóa thì khóa vừa vừa thôi, làm ơn chừa những khu vực muốn chạy "ma cá rô" vào đó chứ
Khóa hết thì nó "tèo" là phải "zồi"
Thân
 
Khi dùng protect, bạn phải mở khóa trước rồi chạy macro, sau đó khóa lại. Như vậy, bạn phải thêm đoạn code mở khóa trước rồi mới đến macro thống kê, sau đó là khóa lại.

bạn giúp mình tạo một đoạn code unprotect được không?
Xin cảm ơn nhiều
Với lại tại vị trí xuất hiện dữ liệu mình muốn không có công thức chỉ hiện số liệu thì làm sao bạn
 
Lần chỉnh sửa cuối:
Khi dùng protect, bạn phải mở khóa trước rồi chạy macro, sau đó khóa lại. Như vậy, bạn phải thêm đoạn code mở khóa trước rồi mới đến macro thống kê, sau đó là khóa lại.
Bộ "zảnh" lắm sao bồ tèo, khóa thì khóa nhưng chừa chỗ chạy macro thôi, vì chưa chạy trong đó có cái quái gì đâu mà sợ người khác chỏ mũi vào phá đám
Còn nếu muốn "ziết" thì cứ "ziết", phức tạp hóa vấn đề "zồi"
Thân
 
bạn giúp mình tạo một đoạn code unprotect được không?
Xin cảm ơn nhiều
Như vầy nha, giả sử bạn có 1 macro ABC nào đó, bạn thêm thủ tục này vào:

Sub ABC()
ActiveSheet.Unprotect ("password")
............ (thủ tục của bạn)............
ActiveSheet.Protect ("password")
End Sub.
 
em không muốn chỗ hiện kết quả hiện công thức thì làm như thế nào? cảm ơn nhiều
Thì trong lúc ghi, bạn tiếp tục copy vùng đó , xong lại paste value chính vùng đó thì nó mất tiêu công thức, ý định muốn làm thêm cái gì gì nữa thì cứ tiếp tục tới khi nào chán thì thôi, lúc đó bạn sẽ hiểu và nhớ lâu chứ
Thân
 
không phải đâu bạn ơi do ở trường mình công tác nhiều người đâu có biết máy tính nhập điểm còn chưa được nữa nên mình sợ mở lộn làm hư công thức thì sửa thì rất là lâu nên mới hỏi mà.
Cảm ơn bạn nhiều

Đã là công thức chạy bằng macro thì sợ quái gì chỉnh sửa thay đổi chứ! Góp ý bạn nè, như hồi này tôi nói cái nút trích dẫn nằm cạnh nút CẢM ƠN, thế mà rất nhiều người giúp bạn, sao không thấy bạn "RỜ" vào nó nhỉ?

Muốn khóa, giấu công thức, chọn tất cả (Ctrl+A) rồi vào Format Cell (Ctrl+1) sau đó, tại thẻ Protection bạn có 2 lựa chọn là Lock và Hidden, bạn bỏ chọn tất cả, OK. Sau đó, bạn chọn những ô chứa công thức của bạn, lại Ctrl+1, lần này, bạn chọn lại lock và hidden. Rồi sau đó bạn muốn khóa ô hay không tùy bạn.
 
Đã là công thức chạy bằng macro thì sợ quái gì chỉnh sửa thay đổi chứ! Góp ý bạn nè, như hồi này tôi nói cái nút trích dẫn nằm cạnh nút CẢM ƠN, thế mà rất nhiều người giúp bạn, sao không thấy bạn "RỜ" vào nó nhỉ?

Muốn khóa, giấu công thức, chọn tất cả (Ctrl+A) rồi vào Format Cell (Ctrl+1) sau đó, tại thẻ Protection bạn có 2 lựa chọn là Lock và Hidden, bạn bỏ chọn tất cả, OK. Sau đó, bạn chọn những ô chứa công thức của bạn, lại Ctrl+1, lần này, bạn chọn lại lock và hidden. Rồi sau đó bạn muốn khóa ô hay không tùy bạn.

Bạn ơi trong lúc reco macro thì có chỗ không cho reco vậy thì bó tay hả bạn
Cảm ơn

Được!
Lại tiếp tục với record macro đi
Cái nào không thể record được thì ta mới tính kiểu khác

Anh ơi như sao có cái công hức không reco được thì làm như thế nào anh.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Anh ơi như sao có cái công hức không reco được thì làm như thế nào anh.

Khi ghi lại những hành động trong sheet, chúng sẽ ghi lại những thao tác mình thực hiện, nhưng khi đang ghi macro, bạn lại sử dụng lệnh macro, nó sẽ không ghi lại hành động này, undo, redo gì đó cũng không ghi và rất nhiều cái khác liên quan đến ứng dụng.

Ưu điểm của chức năng tự ghi macro:

Chức năng Record Macro ghi lại những ghì mà VBA thực hiện là cách học hay, giúp ta có thể nắm bắt được các đối tượng và thuộc tính của nó, nắm được trình tự của các bước thực hiện công việc. Chức năng này hỗ trợ tích cực những người mới bắt đầu tìm hiểu VBA. Có thể ghi lại một số công việc, sau đó xem lại những mã lệnh được ghi và tìm hiểu chức năng của chúng.
Bạn có thể ghi lại các hành động như Sort, Filter v.v... rất dễ dàng.

Nhược điểm của chức năng tự ghi macro:

Bạn không thể ghi lại được nội dung, không so sánh giá trị giữa các ô, không tự tạo hàm người dùng... bằng chức năng ghi macro.
Các công việc mà ghi macro không thể tự thực hiện được:
+ Các kiểu vòng lặp (Do ... Loop)
+ Các kiểu hành động theo điều kiện (If ... Then)
+ Khai báo kiểu giá trị cho biến
+ Gán giá trị cho biến
+ Xử lý và chuyển đổi giữa các kiểu giá trị
+ Hiện các thông báo giao tiếp với người sử dụng (Msgbox)
+ Hiện các hộp thoại điều khiển (Dialog)
+ Tạo liên kết tự động với các chương trình khác trong môi trường Windows, v.v...
Theo như trên, bắt buộc bạn phải bổ sung mã lệnh của VBA vào trong macro tự ghi hoặc phải xây dựng một macro mang tính độc lập để thực hiện những bài toán phức tạp. Khi đó, việc sử dụng chức năng ghi macro thuần túy trở nên không còn hữu dụng nữa. Tuy thế, không có nghĩa là chức năng này đã mất tác dụng mà nó vẫn song song hỗ trợ tích cực cho bạn trên con đường học tập VBA.

Khi bạn mới vào môi trường học VBA, nên tìm hiểu những sách về VBA căn bản như sách "Lập trình VBA trong Excel" của Phan Tự Hướng để tham khảo bạn nhé!
http://www.giaiphapexcel.com/forum/showpost.php?p=153955&postcount=1

Thân ái.
 
PHP:
Option Explicit:        Option Base 1
Function ThongKe(LookUpRange As Range, Chuan As Range)
 ReDim MDL(4, 4) As Integer:           Dim Lop As Double, jJ As Byte
 Dim Rng As Range, Clls As Range
 
 Set Rng = LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count)
 For jJ = 1 To Chuan.Count
   With Application.WorksheetFunction
      MDL(1, jJ) = .CountIf(Rng, Cells(5, 3 + jJ))
   End With
   Lop = Chuan.Cells(1).Offset(, jJ - 1).Value
   For Each Clls In Rng
      If Clls.Offset(, 1).Value <> "Nam" And Clls.Value = Lop Then
         MDL(2, jJ) = MDL(2, jJ) + 1
         If Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
            MDL(4, jJ) = MDL(4, jJ) + 1
      End If
      If Clls.Offset(, 2).Value <> "Kinh" And Clls.Value = Lop Then _
         MDL(3, jJ) = MDL(3, jJ) + 1
   Next Clls
 Next jJ
 ThongKe = MDL
End Function
Chú í: Đó là hàm mảng nha!
(Xem thêm trong file)
Code bị lỗi runtime error 1004 khi mình chọn môn ở A6
 
Cái đó do thử nghiệm macro trước hàm nhưng quên bỏ đi đó mà, Xin lỗi bạn

Code bị lỗi runtime error 1004 khi mình chọn môn ở A6

Thực ra, lúc đầu chưa rõ hết ý tác giả, nên mình viết 1 macro sự kiện. Macro này báo lỗi khi bạn rờ đến [A6] vì macro muốn thay đổi 1 vài ô của hàm mảng tự tạo có sau này. Tuy nhiên việc chỉ thay 1 bộ fận trong các ô hàm mảng là Excel không chịu;

Để tránh xung đột này bạn sửa lại con số 6 trong dòng báo lỗi thành con số 4 là được; Như sau:

Mã:
[COLOR=Silver]Option Explicit
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
 If Not Intersect(Target, [A6]) Is Nothing Then
  Dim Rng As Range, Sh As Worksheet
  Dim jJ As Byte
  
  Set Sh = Sheet1
  Set Rng = Sh.Range(Sh.[d1], Sh.[d65500].End(xlUp))
   With Application.WorksheetFunction
      For jJ = 4 To 7[/COLOR]
         Cells([B]4[/B], jJ).Value = .CountIf(Rng, Cells(5, jJ).Value) [COLOR=Blue]'Trước đây nó là con 6'[/COLOR]
  [COLOR=Silver]    Next jJ
   End With
 End If
[B]End Sub[/B][/COLOR]
Một lần nữa xin cảm ơn & vô cùng xin lỗi bạn!
 
Cảm ơn Bạn Hyen Bạn giúp chuyển nội dung trong sheet (TH KI) SANG MACRO GIÚP mình với được không vì mình làm bằng công thức thì đúng rùi nhưng nó chạy chậm quá mình muốn chuyển sang Macro bạn giúp mình với nhen. Cách chuyển như sau Mẫu tương tự như trên như khi cột HK (cột hạnh kiểm của Học sinh nhập vào xong) thì nhấn cái nút xếp loại thì các cột điểm, xếp loại mới xuất hiện công thức như trên xin cảm ơn nhiềuCảm ơn Bạn Hyen Bạn giúp chuyển nội dung trong sheet (TH KI) SANG MACRO GIÚP mình với được không vì mình làm bằng công thức thì đúng rùi nhưng nó chạy chậm quá mình muốn chuyển sang Macro bạn giúp mình với nhen.
Cách chuyển như sau
Mẫu tương tự như trên như khi cột HK (cột hạnh kiểm của Học sinh nhập vào xong) thì nhấn cái nút xếp loại thì các cột điểm, xếp loại mới xuất hiện công thức như trên xin cảm ơn nhiều


http://www.4shared.com/file/240236028/6db7e8db/CHUONG_TRINH_DANG_NGHIEN_CUU.html
 
Lần chỉnh sửa cuối:
File của bạn diêm dúa & màu mè quá đi mất;

Bạn nên đưa file khác chỉ vài trang tính liên quan đến câu hỏi thôi nha!

Tốn tiền của & tài nguyên với bạn quá đi mất!
 
bạn chuyển giúp thì chuyển chứ màu mè gì mình đưa cả file mình thiết kế lên mà phải màu mè chứ

Nhờ mọi người giúp đở
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Bạn dùng code sau:
Mã:
Sub Rectangle1_Click()
Dim cl As Range
For Each cl In Sheet1.[a3:a9]
cl = UCase(cl)
If cl <> "" And Asc(cl) > 64 And Asc(cl) < 91 Then cl.Offset(, 1) = Asc(cl) - 64
Next
End Sub
Bạn có thể gõ chữ thường hay chữ hoa, code sẽ chuyển sang chữ hoa
Bạn có thể gõ từ A đến Z
 

File đính kèm

Lần chỉnh sửa cuối:
Hay có thể xài macro sự kiện như sau

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("A3:A99")) Is Nothing Then
   Target.Offset(, 1).Value = Asc(UCase(Target.Value)) - 64
 End If
End Sub

Lúc đó bạn gỏ vô bất kỳ hàng nào trong vùng 'A3:A99' các chữ cái, thì ô bên fải liền kề sẽ cho bạn con số tương ứng.
 
Vậy nếu trong trường hợp này mình làm như thế nào các cao thủ giúp mình với nhen.
Cảm ơn các anh chị nhiều
 

File đính kèm

Dùng thử code này, nếu cột môn nào mà trống thì sẽ không cộng.
Option Explicit
Dim endR As Long
Sub TinhTong()
With Sheet1
endR = .Cells(65000, 1).End(xlUp).Row
If endR = 1 Then Exit Sub
With .Range(.Cells(2, 6), .Cells(endR, 6))
.FormulaR1C1 = "=IF(COUNTA(RC2:RC5)<4,"""",SUM(RC2:RC5))"
.Value = .Value
End With
End With
End Sub
 
Thêm 1 tham khảo

PHP:
Option Explicit
Sub TTong()
 Dim Rng As Range, Clls As Range
 
 Set Rng = Range("B2:B" & [A65500].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 1)
 For Each Clls In Rng
   With Application.WorksheetFunction
      Clls.Offset(, 5).Value = .Sum(Clls.Resize(, 4))
   End With
 Next Clls
End Sub
 
Các bạn đã có nhiều giải pháp giải quyết vấn để, mình muốn đề cập 1 vấn đề khác là tối ưu code. Hầu hết các bạn (Xin lỗi có cả bác Sa_DQ) là vẫn đi soát toàn bộ vùng dữ liệu. Khi dữ liệu lớn thì vấn đề này sẽ ảnh hưởng nhiều đến tốc độ code. Căn cứ yêu cầu của bài, mình đề xuất 1 phương án :
Chỉ chọn các ô trong môn toán có điểm-->Nếu có tên thì cộng: Như vậy số vòng lặp sẽ giảm đi đáng kể nếu dữ liệu không đầy đủ.

Mã:
Option Explicit
Sub Rectangle1_Click()
Dim Rng, cl As Range
Range("F2:F56536").ClearContents
Set Rng = Sheet1.Range("b2:b56536").SpecialCells(2)
For Each cl In Rng.Cells
If cl.Offset(, -1) <> "" Then cl.Offset(, 4) = _
WorksheetFunction.Sum(cl, cl.Offset(, 1).Resize(, 3))
Next
Set Rng = Nothing: Set cl = Nothing
End Sub

Xin lỗi bác Sa_DQ, đây là những vấn đề em rất thích trong các bài của bác đấy.
 

File đính kèm

Lần chỉnh sửa cuối:
Mình áp dụng tính tổng các các anh chị cho tính trung bình nhưng không được mong các cao thủ giúp đỡ
 

File đính kèm

(1) Thực ra macro của Sealand & macro #40 là i chang nhau; Thâm chí Ở #40 sẽ nhanh hơn tẹo í chứ!

(2)
PHP:
Option Explicit
Sub TTong()
 Dim Rng As Range, Clls As Range
'Chi Lay Cac O Tai Cot "B" có dữ liệu kiểu (hằng) số:' 
 Set Rng = Range("B2:B" & [A65500].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 1)
 'Tính Trung Bình Cho Các O Dó:'
 For Each Clls In Rng
   With Application.WorksheetFunction
      Clls.Offset(, 5).Value = .Average(Clls.Resize(, 4))
   End With
 Next Clls
End Sub
 
Làm thế nào để chèn thêm hàm round để làm tròn lấy 1 chữ số ở phần thập phân cảm ơn nhiều
 
Làm thế nào để chèn thêm hàm round để làm tròn lấy 1 chữ số ở phần thập phân cảm ơn nhiều

Có chí ít 2 cách sau:

(1) Ta format cột tính trung bình này trước hay sau khi chạy macro;

(2) Dùng lệnh format trong VBA:
PHP:
Clls.Offset(, 5).Value = Format(.Average(Clls.Resize(, 4)), "#.#")
 
Cảm ơn bạn hyên nhiều nhưng môn toán hệ số 2 thì ta tính trung binh như thế nào?
có chí ít 2 cách sau:

(1) ta format cột tính trung bình này trước hay sau khi chạy macro;

(2) dùng lệnh format trong vba:
PHP:
clls.offset(, 5).value = format(.average(clls.resize(, 4)), "#.#")
 

File đính kèm

Bạn sửa lại macro cuối như sau

Option Explicit
Sub TTong
()
Dim Rng As Range, Clls As Range
'Chi Lay Cac O Tai Cot "B" có dữ liệu kiểu (hằng) số:'
Set Rng = Range("B2:B" & [A65500].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 1)
'Tính Trung Bình Cho Các O Dó:'
Rng.Offset(, 5).NumberFormat = "#,##0.0"
For Each Clls In Rng
With Application
.WorksheetFunction
Clls
.Offset(, 5).Value = .Average(Union(Clls, Clls.Resize(, 4)))
End With
Next Clls
End Sub
 
Lần chỉnh sửa cuối:
Nhưng nếu điểm môn toán hệ số 2 thì phải làm sao vậy bạn
 
Xin lỗi bạn, đúng là tính theo công thức không được

Bạn thử kiểm theo macro sau:
PHP:
Option Explicit
    Sub TBinh()
    Dim Rng As Range, Clls As Range
  
    Set Rng = Range("B2:B" & [A65500].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 1)
    'Tính Trung Bình Cho Các O Dó:'
    Rng.Offset(, 5).NumberFormat = "#,##0.0"
    For Each Clls In Rng
    With Application.WorksheetFunction
    Clls.Offset(, 4).Value = (.Sum(Clls.Resize(, 4)) + Clls.Value) / 5
    End With
    Next Clls
    End Sub
 
Trong trường hợp này các bạn dùng macro như thế nào chỉ mình với cảm ơn nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Có một vấn đề như sau hỏi các anh chị giúp đở
Trong Ẽcel cột A là tên Cột B là Điểm Toán, C (Lý), D(Hóa), E(trung bình môn) Cột TBM = (Toán*2+Lý+Hóa)/4 làm tròn 2 chữ số ở phần thập phân nếu dùng công thức thì Round((B1*2+c1+d1)/4,1) còn nếu dùng chức năng format như trong code thì giả sử kết quả là 4.76 trên màng hình là 4.8 như so kết quả đó với kết quả 4.8 thì là sai do đó mình mong các bạn giúp đở 1 code để làm mình cảm ơn nhiều. Mình có tập tin đính kèm theo ở phía dưới là hoi.rar
 
Trong Ẽcel cột A là tên Cột B là Điểm Toán, C (Lý), D(Hóa), E(trung bình môn) Cột TBM = (Toán*2+Lý+Hóa)/4 làm tròn 2 chữ số ở phần thập phân nếu dùng công thức thì Round((B1*2+c1+d1)/4,1) còn nếu dùng chức năng format như trong code thì giả sử kết quả là 4.76 trên màng hình là 4.8 như so kết quả đó với kết quả 4.8 thì là sai do đó mình mong các bạn giúp đở 1 code để làm mình cảm ơn nhiều. Mình có tập tin đính kèm theo ở phía dưới là hoi.rar

Bạn thử với hàm tự tạo sau:
PHP:
Option Explicit
Function FormatTB(HS1 As Range, HS2 As Range, HS3 As Range)
 Dim Clls As Range, Dem As Byte, Rng As Range
 Dim jJ As Byte
 
 For jJ = 1 To 3
   Set Rng = Switch(jJ = 1, HS1, jJ = 2, HS2, jJ = 3, HS3)
   For Each Clls In Rng
      If Clls <> "" Then
         FormatTB = FormatTB + jJ * Clls.Value
         Dem = Dem + jJ
      End If
   Next Clls
 Next jJ
 FormatTB = FormatTB / Dem
 FormatTB = Application.WorksheetFunction.Round(FormatTB, 1)
End Function

Tại [Al5] bạn nhập cú fáp: =FormatTB(V5:AB5,AC5:AI5,AJ5)
 
Mình có cái công thức thống kê tổng số (ts), nữ (n), dân tộc (dt), nữ dân tộc (ndt) mình muốn chuyển sang mác rô có cái nút tên thông kê cho nhẹ sau khi nhập điểm xong rùi nhấn cái nút thống kê thì chương trình thông kê mới chạy mới hiện lên dữ liệu thông kê. Cảm ơn các anh chị nhiều

ví dụ mẫu
Bạn tham khảo thêm cái này nữa nhé! có code trong sheet
 

File đính kèm

Cảm ơn bạn rất là nhiều với code này à mình muốn hỏi thêm vấn đề này bạn có thể thiết kế giúpmình 1 cái nút trong đó khi chọn học kỳ I, thì phần học kỳ II ẩn đi còn chọn học kỳ II thì phần học kỳ I ẩn đi cảm ơn bạn nhiều. À mà mình muốn nó có cái nút tính điểm khi nhấn nút đó thì công thức mới làm việc thì làm như thế nào bạn ơi?
Bạn thử với hàm tự tạo sau:
PHP:
Option Explicit
Function FormatTB(HS1 As Range, HS2 As Range, HS3 As Range)
 Dim Clls As Range, Dem As Byte, Rng As Range
 Dim jJ As Byte
 
 For jJ = 1 To 3
   Set Rng = Switch(jJ = 1, HS1, jJ = 2, HS2, jJ = 3, HS3)
   For Each Clls In Rng
      If Clls <> "" Then
         FormatTB = FormatTB + jJ * Clls.Value
         Dem = Dem + jJ
      End If
   Next Clls
 Next jJ
 FormatTB = FormatTB / Dem
 FormatTB = Application.WorksheetFunction.Round(FormatTB, 1)
End Function
Tại [Al5] bạn nhập cú fáp: =FormatTB(V5:AB5,AC5:AI5,AJ5)
 
Lần chỉnh sửa cuối:
(1) À, mình hỏi thêm vấn đề này bạn có thể thiết kế giúpmình 1 cái nút trong đó khi chọn học kỳ I, thì phần học kỳ II ẩn đi còn chọn học kỳ II thì phần học kỳ I ẩn đi . (2) mà mình muốn nó có cái nút tính điểm khi nhấn nút đó thì công thức mới làm việc thì làm như thế nào bạn ơi?

(1) Mình đã gán macro với tổ hợp fím {CTRL}+{SHIFT}+M

Để chuyển đổi sự ẩn hiện 2 học kỳ, bạn cứ nhấn tổ hợp fím, khi nào chán thì nghỉ!

(*) Bạn sẽ quan sát thấy rằng các nút tính điểm cũng ẩn hiện theo.
Cho nên để làm 2 cái nút cho chạy macro (thay vì bấm tổ hợp fím) bạn cần đặt nó đúng chổ. để không bị ẩn đi

Cách tạo nút lệnh để chạy macro có trên diễn đàn; Chịu khó tìm cái nha.

(Bạn xem thêm trong file kèm theo nha)

(2) Chưa rõ bạn cần tính vào cột nào?
Hàm tự tạo bên trên tính cho bạn đủ số liệu theo yêu cầu chưa vậy? Còn thiếu cột nào bạn cần tính?
 

File đính kèm

Tính tại ba cột lạ trung bình học kỳ I, TBMHKII, TBMCN, mình muốn là tạo cái nút khi nhấn nút thì mới tính còn chưa nhấn nút tính điểm thì không tính gì cả. điều kiện là ở cột C và cột HS3 <>"" thì công thức mới tính tới còn không thì bỏ qua. Nút lệnh Macro thì mình biết rồi nhưng muốn viết thủ tục tính theo yêu cầu trên thì chưa biết các bạn giúp đở mình nhen
(1) Mình đã gán macro với tổ hợp fím {CTRL}+{SHIFT}+M

Để chuyển đổi sự ẩn hiện 2 học kỳ, bạn cứ nhấn tổ hợp fím, khi nào chán thì nghỉ!

(*) Bạn sẽ quan sát thấy rằng các nút tính điểm cũng ẩn hiện theo.
Cho nên để làm 2 cái nút cho chạy macro (thay vì bấm tổ hợp fím) bạn cần đặt nó đúng chổ. để không bị ẩn đi

Cách tạo nút lệnh để chạy macro có trên diễn đàn; Chịu khó tìm cái nha.

(Bạn xem thêm trong file kèm theo nha)

(2) Chưa rõ bạn cần tính vào cột nào?
Hàm tự tạo bên trên tính cho bạn đủ số liệu theo yêu cầu chưa vậy? Còn thiếu cột nào bạn cần tính?
 
Lần chỉnh sửa cuối:
Xuân hiếu
Tính tại ba cột lạ trung bình học kỳ I, TBMHKII, TBMCN, mình muốn là tạo cái nút khi nhấn nút thì mới tính còn chưa nhấn nút tính điểm thì không tính gì cả. điều kiện là ở cột C và cột HS3 <>"" thì công thức mới tính tới còn không thì bỏ qua.

Hai cột đầu bạn dùng hàm tại #47 mà tính thôi; Còn cột cả năm thì mỗi năm tính 1 lần thì cứ gì fải macro; Bạn lập fép tính ở ô đầu cột , sau đó kéo xuống dưới thôi.

Còn không bạn tự ghi lại macro thử xem sao.
 
ghi macro không cho dùng hàm if do đó hơi khó khăn bạn giúp mình đi. cảm ơn nhiều.
Hai cột đầu bạn dùng hàm tại #47 mà tính thôi; Còn cột cả năm thì mỗi năm tính 1 lần thì cứ gì fải macro; Bạn lập fép tính ở ô đầu cột , sau đó kéo xuống dưới thôi.

Còn không bạn tự ghi lại macro thử xem sao.
 
À đúng rồi; Fải chỉnh sửa nhiều mới ổn.

ghi macro không cho dùng hàm if do đó hơi khó khăn bạn giúp mình đi. cảm ơn nhiều.

Bạn có thể chỉ cần dùng hàm tự tạo sau đây; Nó đúng với trường hợp 'Tên HS' còn để trống & điểm HS3 cũng vậy

Nội dung hàm bài #47 trên được sửa như sau:
PHP:
Option Explicit
Function FormatTB(HS1 As Range, HS2 As Range, HS3 As Range, Ten As Range)
 Dim Clls As Range, Dem As Byte, Rng As Range
 Dim jJ As Byte
 If Ten.Value = "" Or HS3.Value = "" Then
   FormatTB = "":                         Exit Function
 End If
 For jJ = 1 To 3
   Set Rng = Switch(jJ = 1, HS1, jJ = 2, HS2, jJ = 3, HS3)
   For Each Clls In Rng
      If Clls <> "" Then
         FormatTB = FormatTB + jJ * Clls.Value
         Dem = Dem + jJ
      End If
   Next Clls
 Next jJ
 FormatTB = FormatTB / Dem
 FormatTB = Application.WorksheetFunction.Round(FormatTB, 1)
End Function
Lúc đó cú fáp hàm tại ô [T5] sẽ là =formatTB(E5:K5,L5:R5,S5,C5)



Nếu bạn vẫn giữ quan điểm chạy macro, thì xin mời bạn macro tính diểm trung bình cho HK I như sau:
PHP:
Sub TinhDiemHK1()
 Dim Clls As Range, HS3 As Range
 
 For Each Clls In Range([C5], [C65500].End(xlUp))
   Set HS3 = Cells(Clls.Row, "S")
   If Clls.Value <> "" And HS3.Value <> "" Then
      HS3.Offset(, 1).Value = FormatTB(Clls.Offset(, 2).Resize(, 7), Clls.Offset(, 9).Resize(, 7), HS3, Clls)
   End If
 Next Clls
End Sub

Để tính cho HK 2 bạn thử trước việc thay các vùng tương đương cho học kỳ 2 vào macro đó xem sao.

Rất mong bạn sẽ thành công mỹ mãn!
 
Lần chỉnh sửa cuối:
Thật sự rất cảm ơn bạn. Cảm ơn rất là nhiều. Nhưng bạn giúp mình macro ma trong hoc ky II thì tính luôn cột TBCN (Trung bình môn của cả năm):= Trung bình môn của học kỳ I + Trung bình môn của học kỳ II *2 tất cả chia ba. các bạn giup mình nhen
 
Lần chỉnh sửa cuối:
Một lần nữa cảm ơn bạn nhưng mình muốn như sau là thiết kế 1 hộp có hai cái nút 1 là học kỳ I, hai là học Kỳ II có cột cả năm phần này ở trang bìa. Khi mình kích chọn học kỳ I thì tất các các cột của học kỳ II và cả năm của các môn học Toán, Lý, Hóa,... đều ẩn hết còn khi muốn kích vào học kỳ II thì phần học kỳ I của các môn đều ẩn hết bạn giúp mình với nhen.
(1) Mình đã gán macro với tổ hợp fím {CTRL}+{SHIFT}+M

Để chuyển đổi sự ẩn hiện 2 học kỳ, bạn cứ nhấn tổ hợp fím, khi nào chán thì nghỉ!

(*) Bạn sẽ quan sát thấy rằng các nút tính điểm cũng ẩn hiện theo.
Cho nên để làm 2 cái nút cho chạy macro (thay vì bấm tổ hợp fím) bạn cần đặt nó đúng chổ. để không bị ẩn đi

Cách tạo nút lệnh để chạy macro có trên diễn đàn; Chịu khó tìm cái nha.

(Bạn xem thêm trong file kèm theo nha)

(2) Chưa rõ bạn cần tính vào cột nào?
Hàm tự tạo bên trên tính cho bạn đủ số liệu theo yêu cầu chưa vậy? Còn thiếu cột nào bạn cần tính?
 
Cung cấp macro 2 trong 1 luôn đây

Nhưng bạn giúp mình macro mả trong hoc ky II thì tính luôn cột TBCN (Trung bình môn của cả năm):= Trung bình môn của học kỳ I + Trung bình môn của học kỳ II *2 tất cả chia ba. các bạn giup mình nhen

PHP:
Option Explicit
Sub TinhDiemHK()
 Dim Clls As Range, HS3 As Range, Rng As Range
 Dim jJ As Integer
 
 jJ = InputBox("Ban Càn Tính Cho HK Nào?", , "1")
 For Each Clls In Range([C5], [C65500].End(xlUp))
   Set HS3 = Cells(Clls.Row, Switch(jJ = 1, "S", jJ = 2, "AJ")) '*'
   If Clls.Value <> "" And HS3.Value <> "" Then
      HS3.Offset(, 1).Value = FormatTB(HS3.Offset(, -14).Resize(, 7), _
         HS3.Offset(, -7).Resize(, 7), HS3, Clls)
9      If jJ = 2 Then
         With HS3.Offset(, 2)
            .Value = (2 * .Offset(, -1).Value + .Offset(, -18).Value) / 3
            .Value = Application.WorksheetFunction.Round(.Value, 1)
         End With
      End If
   End If
 Next Clls
End Sub

Nhưng dù sao mình vẫn khuyên bạn nên dùng hàm.
 
Lần chỉnh sửa cuối:
- Cảm ơn bạn nhiều nhưng ở cột trung bình cả năm nếu một trong hai học kỳ chưa tính điểm trung bình thì cột cả năm cũng chưa tính điểm trung bình chứ bạn trong trường hợp trên cột cả năm vẫn tính điểm trung bình trong khi một trong hai học kỳ chưa tính điểm.
- Mình muốn có một button chon học kỳ I thì tất các các phần của học kỳ II đều ẩn hết còn nếu chọn học kỳ II thì cột học kỳ I ẩn hết (của tất cả các môn). Mong các bạn giúp đở nhiều.
PHP:
Option Explicit
Sub TinhDiemHK()
 Dim Clls As Range, HS3 As Range, Rng As Range
 Dim jJ As Integer
 
 jJ = InputBox("Ban Càn Tính Cho HK Nào?", , "1")
 For Each Clls In Range([C5], [C65500].End(xlUp))
   Set HS3 = Cells(Clls.Row, Switch(jJ = 1, "S", jJ = 2, "AJ")) '*'
   If Clls.Value <> "" And HS3.Value <> "" Then
      HS3.Offset(, 1).Value = FormatTB(HS3.Offset(, -14).Resize(, 7), _
         HS3.Offset(, -7).Resize(, 7), HS3, Clls)
      If jJ = 2 Then
         With HS3.Offset(, 2)
            .Value = (2 * .Offset(, -1).Value + .Offset(, -18).Value) / 3
            .Value = Application.WorksheetFunction.Round(.Value, 1)
         End With
      End If
   End If
 Next Clls
End Sub

Nhưng dù sao mình vẫn khuyên bạn nên dùng hàm.
 
(1) -nhưng ở cột trung bình cả năm nếu một trong hai học kỳ chưa tính điểm trung bình thì cột cả năm cũng chưa tính điểm trung bình chứ bạn trong trường hợp trên cột cả năm vẫn tính điểm trung bình trong khi một trong hai học kỳ chưa tính điểm.

(2)- Mình muốn có một button chon học kỳ I thì tất các các phần của học kỳ II đều ẩn hết còn nếu chọn học kỳ II thì cột học kỳ I ẩn hết (của tất cả các môn). Mong các bạn giúp đở nhiều.

(1) Nếu HS3 chưa có thì cột HK(x) tương ứng với nó cũng sẽ không được tính. Vậy bạn không thể giả lập những gì mà trong thực tiển không sẩy ra. Chẳng lẽ mới học kỳ I mà đã bấm tính học kỳ 2?

(2) Bạn tự ên đi; Bạn làm được mà!

Chúc thành công.
 
(1) Mình hỏi như sau trong macro hai trong một của bạn thì mình thấy như thế này. Ở cột cả năm nếu em học sinh A nào đó mà học kỳ I vì một lý do nào đó chưa tổng kết nhưng sang học kỳ II thì điểm trung bình được tổng kết trong trường hợp này thì cột cả năm phải không được tổng kết chứ bạn nhưng trong macro của bạn viết thì trong trường hơp45 này cũng tổng kết nên nhờ bạn sữa giúp.
(2) Mình không biết là giữa hàm và macro thì cái nào sẽ thực hiện nhanh hơn bạn hay là sao mà bạn khuyên mình nên dùng hàm. và hàm tự tạo vào dùng hàm có sẵng cái nào hoạt động chậm hơn xin chỉ giúp cảm ơn bạn nhiều.
(1) Nếu HS3 chưa có thì cột HK(x) tương ứng với nó cũng sẽ không được tính. Vậy bạn không thể giả lập những gì mà trong thực tiển không sẩy ra. Chẳng lẽ mới học kỳ I mà đã bấm tính học kỳ 2?

(2) Bạn tự ên đi; Bạn làm được mà!

Chúc thành công.
 
Tìm lại file của chúng ta đã xử lý cũng gần 10'

(1) Để không tính điểm trung bình cả năm cho những em chưa có điểm TB học kỳ kỳ I thì chúng ta thay dòng lệnh số 9 #58 bằng dòng lệnh

PHP:
If jJ = 2 And Cells(Clls.Row, "S").Value <> "" Then

& xin lỗi bạn, do mình không rành lắm, nên mắng oan bạn!

(2) Thực ra macro cũng gọi hàm để tính mà thôi; Nhưng mình nói vậy để bạn đề fòng trường hợp có người nào đó sửa điểm 1 vài em học sinh, nhưng mà bạn chưa cho chạy lại macro thì kết quả sẽ không fản ảnh các điểm của những em được sửa đó.
(Tất nhiên hàm có thể cập nhật, nếu đang ở chế độ tính toán tự động)

Thân ái! --=0
 
Lần chỉnh sửa cuối:
Cảm ơn bạn nhiều.
(1) Bạn có thể giúp mình code mà khi con trỏ ở dòng nào thì nền dòng đó thay đổi màu nền được không bạn.
(2) Các bạn giúp chuyển công thức xếp loại này sang macro dùm mình với xin cảm ơn các bạn nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
các bác giúp chuyển công thức ở câu hỏi 2 với #63
 
Lần chỉnh sửa cuối:
Hàm tự tạo đây, xài thử trước đi

các bác giúp chuyển công thức ở câu hỏi 2 với #63

Nếu ưng í thì bạn hay 1 ai đó sẽ viết cho bạn macro gọi hàm này & gán danh hiệu cho học sinh của bạn.
PHP:
Option Explicit
Function XepLoaiHS(Rng As Range)
 Dim Clls As Range
 Dim Gioi As Byte, Kha As Byte, TrB As Byte, Yeu As Byte, Kem As Byte
 Dim Col As Byte, Tg As Byte
 
 Col = Rng.Count
 If Rng.Cells(, Col).Value = "" Then
   XepLoaiHS = "":                                       Exit Function
 End If
 For Each Clls In Rng
   With Clls
      If .Value <> "" Then
         Tg = Tg + 1
         Select Case .Value
         Case "G"
            Gioi = Gioi + 1
         Case "K":                                       Kha = Kha + 1
         Case "Tb":                                      TrB = TrB + 1
         Case "Y":                                       Yeu = Yeu + 1
         Case "Kém":                                     Kem = Kem + 1
         End Select
      End If
   End With
 Next Clls
 If (Kem + Yeu = 0) And TrB / Tg <= 0.25 And Gioi / Tg >= 0.5 Then
   XepLoaiHS = "G"
 ElseIf (Kem = 0 And Yeu / Tg < 0.25 And (Gioi + Kha) / Tg >= 0.5) Or _
   (Kem / Tg <= 0.25 And (Gioi + Kha) / Tg >= 0.7 And Gioi / Tg = 0.5) Then
   XepLoaiHS = "K"
 ElseIf (Gioi + Kha) / Tg >= 0.5 Or Kem / Tg <= 0.25 Or (Yeu + Kem) / Tg <= 0.5 Then '<=|'
   XepLoaiHS = "TB"
 ElseIf Kem / Tg > 0.5 Then
   XepLoaiHS = "Kém"
 Else
   XepLoaiHS = "Y"
 End If
End Function

(Bạn kiểm theo file nha)
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem lại giúp mình một tí vì có trường hợp sai đó là nếu có 6 cột điểm mà 4 cột xếp loại yếu(y) hai cột cỏn lại trung bình trở lên thì xếp loại yếu chứ bạn. Bạn xem lại công thức của mình cái nhen.
Cảm ơn bạn nhiều
nếu ưng í thì bạn hay 1 ai đó sẽ viết cho bạn macro gọi hàm này & gán danh hiệu cho học sinh của bạn.
PHP:
option explicit
function xeploaihs(rng as range)
dim clls as range
dim gioi as byte, kha as byte, trb as byte, yeu as byte, kem as byte
dim col as byte, tg as byte

col = rng.count
if rng.cells(, col).value = "" then
xeploaihs = "": Exit function
end if
for each clls in rng
with clls
if .value <> "" then
tg = tg + 1
select case .value
case "g"
gioi = gioi + 1
case "k": Kha = kha + 1
case "tb": Trb = trb + 1
case "y": Yeu = yeu + 1
case "kém": Kem = kem + 1
end select
end if
end with
next clls
if (kem + yeu = 0) and trb / tg <= 0.25 and gioi / tg >= 0.5 then
xeploaihs = "g"
elseif (kem = 0 and yeu / tg < 0.25 and (gioi + kha) / tg >= 0.5) or _
(kem / tg <= 0.25 and (gioi + kha) / tg >= 0.7 and gioi / tg = 0.5) then
xeploaihs = "k"
elseif (gioi + kha) / tg >= 0.5 or kem / tg <= 0.25 or (yeu + kem) / tg <= 0.5 then
xeploaihs = "tb"
elseif kem / tg > 0.5 then
xeploaihs = "kém"
else
xeploaihs = "y"
end if
end function

(bạn kiểm theo file nha)
 
Thật ra mình cũng chưa hiểu hết chổ này:

IF(OR(AND(COUNTIF(E13:T13,"G")+COUNTIF(E13:T13,"K")>=0.5*COUNTA(E13:T13)),AND(COUNTIF(E13:T13,"Kem")<=0.25*COUNTA(E13:T13),COUNTIF(E13:T13,"Y")+COUNTIF(E13:T13,"Kem")<=0.5*COUNTA(E13:T13))),"Tb"

Giờ thì mình vừa sửa câu lệnh
Mã:
ElseIf Gioi + Kha) / Tg >= 0.5 Or Kem / Tg <= 0.25 Or (Yeu + Kem) / Tg <= 0.5 Then

Thành ra:
PHP:
ElseIf ((Gioi + Kha) / Tg >= 0.5 And Kem / Tg <= 0.25) Or (Yeu + Kem) / Tg <= 0.5 Then

Thì tạm được cho trường hợp đó, nhưng chưa biết các trường hợp khác ra sao

Rất mong bạn sửa lại trong hàm tự tạo dùm & xét xem còn trường hợp nào sai nữa để cùng hoàn chỉnh.

Thân ái & chúc tuần làm việc kết quả!
 
Lần chỉnh sửa cuối:
Cảm ơn bạn nhiều để mình kiểm tra lại nếu có vấn đề gì mình hỏi tiếp thật sự cảm ơn bạn rất nhiều. Bạn viết cho mình code cho cột cả năm luôn nhé cảm ơn nhiều.
IF(OR(AND(COUNTIF(E13:T13,"G")+COUNTIF(E13:T13,"K")>=0.5*COUNTA(E13:T13)),AND(COUNTIF(E13:T13,"Kem")<=0.25*COUNTA(E13:T13),COUNTIF(E13:T13,"Y")+COUNTIF(E13:T13,"Kem")<=0.5*COUNTA(E13:T13))),"Tb"

Giờ thì mình vừa sửa câu lệnh
Mã:
ElseIf Gioi + Kha) / Tg >= 0.5 Or Kem / Tg <= 0.25 Or (Yeu + Kem) / Tg <= 0.5 Then

Thành ra:
PHP:
ElseIf ((Gioi + Kha) / Tg >= 0.5 And Kem / Tg <= 0.25) Or (Yeu + Kem) / Tg <= 0.5 Then

Thì tạm được cho trường hợp đó, nhưng chưa biết các trường hợp khác ra sao

Rất mong bạn sửa lại trong hàm tự tạo dùm & xét xem còn trường hợp nào sai nữa để cùng hoàn chỉnh.

Thân ái & chúc tuần làm việc kết quả!
 
Cảm ơn bạn nhiều để mình kiểm tra lại nếu có vấn đề gì mình hỏi tiếp thật sự cảm ơn bạn rất nhiều. Bạn viết cho mình code cho cột cả năm luôn nhé cảm ơn nhiều.

Để trách sai sót như vừa rồi, bạn hãy dịch ra tiếng Việt công thức này dùm đi:

=IF(COUNTIF(AL10:AM10,"")=2,"",
IF(AND(COUNTIF(AL10:AM10,"G")>=1,COUNTIF(AL10:AM10,"Tb")=0,COUNTIF(AL10:AM10,"Y")=0,COUNTIF(AL10:AM10,"Kém")=0),"G",
IF(OR(AND(COUNTIF(AL10:AM10,"Tb")=1,COUNTIF(AL10:AM10,"G")=1),
AND(COUNTIF(AL10:AM10,"K")>=1,COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"Y")=0,COUNTIF(AL10:AM10,"Kém")=0)),"K",
IF(OR(AND(COUNTIF(AL10:AM10,"Tb")=1,COUNTIF(AL10:AM10,"Kém")=1),AND(COUNTIF(AL10:AM10,"Y")>=1, COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"K")=0,COUNTIF(AL10:AM10,"Tb")=0)),"Y",IF(AND(COUNTIF(AL10:AM10,"Kém")>=1, COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"K")=0,COUNTIF(AL10:AM10,"Tb")=0),"Kém","Tb")))))
 
Lần chỉnh sửa cuối:
dịch công thức
nếu tổng hai cell AL10 vầ AM10 NẾU CÓ HAI CỘT TRỐNG THÌ BỎ TRỐNG NGƯỢC LẠI THÌ TIẾN HÀNH LÀM NHƯ SAU
XẾP LOẠI GIỎI: NẾU TRONG HAI CỘT HỌC KỲ I, HỌC KỲ II CÓ TỪ 1 GIỎI (G) TRỞ LÊN KHÔNG CÓ CỘT TRUNG BÌNH(Tb), YẾU(Y), KÉM(Kém)
XẾP LOẠI KHÁ: NẾU THỎA MÃN MỘT TRONG CÁC TRƯỜNG HỢP SAU:
(1) NẾU HAI HỌC KỲ CÓ 1 TRUNG BÌNH THÌ HỌC KỲ CÒN LẠI PHẢI ĐẠT GIỎI HOẶC KHÁ
(2) CẢ HAI HỌC KỲ ĐỀU XẾP LOẠI KHÁ.
XẾP LOẠI YẾU: NẾU THỎA MÃN MỘT TRONG CÁC TRƯỜNG HỢP SAU:
(1) NẾU HAI HỌC KỲ CÓ 1 TRUNG BÌNH THÌ HỌC KỲ CÒN LẠI PHẢI XẾP LOẠI KÉM
(2) NẾU HAI HỌC KỲ CÓ 1 YẾU THÌ HỌC KỲ CÒN LẠI PHẢI LÀ KÉM HOẶC YẾU
XẾP LOẠI KÉM: KHI CẢ HAI HỌC KỲ ĐẠT LOẠI KÉM
XẾP LOẠI TRUNG BÌNH: LÀ NHỮNG ĐIỀU KIỆN CÒN LẠI

Một lần nữa xin cảm ơn bạn rất nhiều.
À nếu trong bảng điểm đó mình không chuyển cột học kỳ I bên cạnh cột Học kỳ II để tính cho cột cả năm Nếu không chuyển thì code như thế nào hả bạn. Cảm ơn bạn nhiều (Nước được bạn giúp mình hai code luôn nhen

câu hỏi 2:
Chuyển công thức xếp loại cho bảng điểm xếp loại chung sang macro mình gửi kèm tệp tin mong mọi người giúp đở cảm ơn nhiều.


Để trách sai sót như vừa rồi, bạn hãy dịch ra tiếng Việt công thức này dùm đi:

=IF(COUNTIF(AL10:AM10,"")=2,"",
IF(AND(COUNTIF(AL10:AM10,"G")>=1,COUNTIF(AL10:AM10,"Tb")=0,COUNTIF(AL10:AM10,"Y")=0,COUNTIF(AL10:AM10,"Kém")=0),"G",
IF(OR(AND(COUNTIF(AL10:AM10,"Tb")=1,COUNTIF(AL10:AM10,"G")=1),
AND(COUNTIF(AL10:AM10,"K")>=1,COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"Y")=0,COUNTIF(AL10:AM10,"Kém")=0)),"K",
IF(OR(AND(COUNTIF(AL10:AM10,"Tb")=1,COUNTIF(AL10:AM10,"Kém")=1),AND(COUNTIF(AL10:AM10,"Y")>=1, COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"K")=0,COUNTIF(AL10:AM10,"Tb")=0)),"Y",IF(AND(COUNTIF(AL10:AM10,"Kém")>=1, COUNTIF(AL10:AM10,"G")=0,COUNTIF(AL10:AM10,"K")=0,COUNTIF(AL10:AM10,"Tb")=0),"Kém","Tb")))))
 

File đính kèm

Lần chỉnh sửa cuối:
(1) Hàm xếp loại cả năm đâym xin mời:
PHP:
Option Explicit
Function XepLoaiNH(HK_1 As Range, HK_2 As Range) As String
 Const TbYK As String = "TBYKém"
 Dim HK1 As String, HK2 As String
 
 HK1 = HK_1.Value:                           HK2 = HK_2.Value
 If HK1 = "K" Then HK1 = "Kh":               If HK2 = "K" Then HK2 = HK2 & "h"
 
 If HK1 = "" And HK2 = "" Then
   Exit Function
 End If
 XepLoaiNH = "TB"
 If (HK1 = "G" And InStr(TbYK, HK2) = 0) Or (HK2 = "G" And InStr(TbYK, HK1) = 0) Then
   XepLoaiNH = "G"
 ElseIf (HK1 = "Kh" And HK2 = "Kh") Or _
   ((HK1 = "TB" And (HK2 = "G" Or HK2 = "Kh")) Or (HK2 = "TB" And (HK1 = "G" Or HK1 = "Kh"))) Then
   XepLoaiNH = "Kh"
 ElseIf ((HK1 = "TB" And HK2 = "Kém") Or (HK2 = "TB" And HK1 = "Kém")) Or _
   ((HK1 = "Y" And (HK2 = "Kém" Or HK2 = "Y")) Or (HK2 = "Y" And (HK1 = "Kém" Or HK1 = "Y"))) Then
   XepLoaiNH = "Y"
 ElseIf HK1 = "Kém" And HK2 = "Kém" Then
   XepLoaiNH = "Kém"
 End If
End Function

À nếu trong bảng điểm đó mình không chuyển cột học kỳ I bên cạnh cột Học kỳ II để tính cho cột cả năm Nếu không chuyển thì code như thế nào hả bạn

2uan trọng là cú fáp hàm thôi; Hãy thử trên file đính kém nha

(2) Macro dùng để gọi hàm tự tạo nhập loại cho HS học kì I đây (Bạn xem các địa chỉ trong macro mà thử đổi để tính cho HK2 nha.
Nếu bạn tự ên được cho xếp loại cả năm thì mình rất vui!

PHP:
Sub XepLoai()
 Dim lRw As Long, Timer_ As Double
 Dim Clls As Range
 
 Timer_ = Timer:                       Sheet1.Select
 Application.ScreenUpdating = False
 lRw = Columns("E:T").Find(What:="*", After:=[E4], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
 
 For Each Clls In Range("U5:U" & lRw)              '<=|'
   Clls.Value = XepLoaiHS(Clls.Offset(, -16).Resize(, 16))
 Next Clls
 [U1].Value = Timer - Timer_                       '<=|'
End Sub

(Thời gian tính cho hơn 500 em chưa tới 0.2 gy)
 

File đính kèm

Một lần nữa xin cảm ơn bạn rất nhiều. Mình tìm trên mạng bài của các anh chị trên diễn đàn thấy có nhiều bài rất là hay bạn có thể giải thích thêm cho mình code này được không ah.

Code:
Option Explicit
Option Base 1
Dim nDong As Long, endR As Long, k As Long
Dim iMon As Long
Dim shName As String
Dim WF As WorksheetFunction
Dim HS11, HS21, Thi1, HS12, HS22, Thi2
Const fR As Long = 5
Sub TinhDiemTN() ' Sub cua Ptm0412
Dim Arr() As Variant
Dim MonArr
Dim t As Variant
t = Timer
MonArr = Array("TOAN", "LY", "HOA", "SINH", "TIN", "VAN", "SU", "DIA", "ANH", "GDCD", "CNGHE", "GDQP")
Set WF = WorksheetFunction
With Application
.ScreenUpdating = False: .Calculation = xlCalculationManual
End With
Dim SumHS1, SumHS2, iCount1, iCount2, iCol
For iMon = 1 To UBound(MonArr)
shName = MonArr(iMon)
With Sheets(shName)
endR = .Cells(10000, 1).End(xlUp).Row
ReDim Arr(endR - fR + 1, 3)
ReDim HS11(endR - fR + 1, 6)
ReDim HS21(endR - fR + 1, 5)
ReDim HS12(endR - fR + 1, 6)
ReDim HS22(endR - fR + 1, 5)
ReDim Thi1(endR - fR + 1, 1)
ReDim Thi2(endR - fR + 1, 1)

HS11 = .Range("F" & fR & ":K" & endR)
HS21 = .Range("L" & fR & ":P" & endR)
HS12 = .Range("R" & fR & ":W" & endR)
HS22 = .Range("X" & fR & ":AB" & endR)
Thi1 = .Range("Q" & fR & ":Q" & endR)
Thi2 = .Range("AC" & fR & ":AC" & endR)

For k = 1 To endR - fR + 1

'diem HK1'
For iCol = 1 To 6
SumHS1 = SumHS1 + HS11(k, iCol)
iCount1 = iCount1 + IIf(HS11(k, iCol) > 0, 1, 0)
Next

For iCol = 1 To 5
SumHS2 = SumHS2 + HS21(k, iCol) * 2
iCount2 = iCount2 + IIf(HS21(k, iCol) > 0, 2, 0)
Next
If SumHS1 = 0 Or SumHS2 = 0 Then GoTo bien

Arr(k, 1) = (SumHS1 + SumHS2 + Thi1(k, 1) * 3) / (iCount1 + iCount2 + 3)
'diem HK2'
SumHS1 = 0: SumHS2 = 0: iCount1 = 0: iCount2 = 0
For iCol = 1 To 6
SumHS1 = SumHS1 + HS12(k, iCol)
iCount1 = iCount1 + IIf(HS12(k, iCol) > 0, 1, 0)
Next

For iCol = 1 To 5
SumHS2 = SumHS2 + HS22(k, iCol) * 2
iCount2 = iCount2 + IIf(HS22(k, iCol) > 0, 2, 0)
Next

If SumHS1 = 0 Or SumHS2 = 0 Then GoTo bien

Arr(k, 2) = (SumHS1 + SumHS2 + Thi2(k, 1) * 3) / (iCount1 + iCount2 + 3)
Arr(k, 3) = Round((2 * Arr(k, 2) + Arr(k, 1)) / 3, 1)
bien:
Next k
'gan vao'
.Range("AD" & fR & ":AF" & endR) = Arr

End With
Next iMon '
Set WF = Nothing
Set HS11 = Nothing: Set HS21 = Nothing
Set HS12 = Nothing: Set HS22 = Nothing
Set Thi1 = Nothing: Set Thi2 = Nothing
With Application
.ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
MsgBox Timer - t
End Sub

Đây là code của bạn Ptm0412 trong bài của Bate mình kiểm tra thì thấy code này là nhanh nhất
dữ liệu của Ba Tê (bảng 1) Mình muốn chuyển sang dữ liệu kiểu này thì code trên phải chuyển lại như thế nào hả các bạn xin mọi người giúp đở cảm ơn các bạn nhiều
du74 liệu của mình (bảng 2)
 

File đính kèm

Giải thích thì sẽ có người như ThuNghi, NDU hay chính tác giả PTM, nhưng để hiểu . .

Bạn fải có vốn kiến thức cơ bản về lập trình (như đọc xong quyễn sách của PhanTuHuong mà GPE fát hành.)

Trong ngành bạn biết rồi đó: Ta không thể lấy cách giải dùng tích fân để tính diện tích 1 hình nào đó đem giải thích cho người có trình độ fổ thông cơ sở được. Mong bạn chớ fật lòng.

Chúc tuần làm việc kết quả.
 
Cảm ơn bạn nhiều. Bạn c1 thể chuyển giúp cái công thức sau sang macro mình với mình có tập tin đính kèm theo sau. Sau khi chuyển xong bạn cho mình 1 cái macro luôn nhen vì mình làm chưa được mới hỏi đó mà. Cảm ơn bạn nhiều
 

File đính kèm

Cảm ơn bạn nhiều. Bạn c1 thể chuyển giúp cái công thức sau sang macro mình với mình có tập tin đính kèm theo sau. Sau khi chuyển xong bạn cho mình 1 cái macro luôn nhen vì mình làm chưa được mới hỏi đó mà. Cảm ơn bạn nhiều
Tôi đang chập chững học VBA, thấy bài của Bạn giống giống bài của mình nên ngứa tay chứ thật ra tôi không biết gì nhiều lắm đâu.
Chỉ làm được phần tính TB HK, còn Xếp loại thì phải nghiên cứu thêm dài dài.
Như Sa_DQ viết ở bài trên:
Trong ngành bạn biết rồi đó: Ta không thể lấy cách giải dùng tích fân để tính diện tích 1 hình nào đó đem giải thích cho người có trình độ fổ thông cơ sở được. Mong bạn chớ fật lòng.
Bạn phải có một ít "vốn" VBA mới học hỏi thêm được, chứ chưa biết gì mà yêu cầu giải thích thì ... khó quá!
 

File đính kèm

Các bạn ơi chuyển giúp mình công tức này sang Macro với nhen (mình cảm ơn nhiều)
=IF(AC5="","",IF(AND(AC5>=8,OR(L5>=8,P5>=8),MIN(L5:W5)>6.4,COUNTIF(X5:Z5,"G")+COUNTIF(X5:Z5,"")+COUNTIF(X5:Z5,"K")=COUNTA(X5:Z5)),"G",IF(OR(AND(AC5>=6.5,OR(L5>=6.5,P5>=6.5),MIN(L5:W5)>=5,COUNTIF(X5:Z5,"Y")=0,COUNTIF(X5:Z5,"Keùm")=0),AND(AC5>=8,OR(L5>=8,P5>=8),OR(AND(MIN(L5:W5)>=3.5,COUNTIF(L5:W5,"<5.0")=1,COUNTIF(X5:Z5,"G")+COUNTIF(X5:Z5,"")+COUNTIF(X5:Z5,"K")=COUNTA(X5:Z5))))),"K",IF(OR(AND(AC5>=5,OR(L5>=5,P5>=5),MIN(L5:W5)>=3.5,COUNTIF(X5:Z5,"Y")+COUNTIF(X5:Z5,"Keùm")=0),AND(COUNTIF(L5:W5,"<3.5")+COUNTIF(X5:Z5,"Y")<=1,COUNTIF(X5:Z5,"Keùm")=0,MIN(L5:W5)>=2,AC5>=6.5,OR(L5>=6.5,P5>=6.5),COUNTIF(L5:W5,">=5")>=COUNT(L5:W5)-1),AND(COUNTIF(L5:W5,"<3.5")+COUNTIF(X5:Z5,"Y")+COUNTIF(X5:Z5,"Keùm")<=1,COUNTIF(L5:W5,">=6.5")>=COUNT(L5:W5)-1,AC5>=8,OR(L5>=8,P5>=8))),"Tb",IF(OR(AND(AC5>=3.5,MIN(L5:W5)>=2,COUNTIF(X5:Z5,"Keùm")=0),AND(COUNTIF(L5:W5,"<2")+COUNTIF(X5:Z5,"Keùm")<=1,COUNTIF(L5:W5,">=5")>=COUNT(L5:W5)-1,AC5>=6.5,OR(L5>=6.5,P5>=6.5))),"Y","Keùm")))))

Mình dịc công thu6c1 này cho các bạn dễ nhìn.
Nếu ô Ac5 ="" thì bỏ trống ngược lại tại ô AD5 sẽ thực hiện công thức sau
Điểm trung bình các môn tính điểm cột AC
Điểm trung bình môn Toán cột L
Điểm trung bình môn Ngữ văn cột P
Xếp loại Giỏi (G) nếu thỏa mãn tiêu chí sau:
Ô AC5>=8 và có một trong hai môn Toán (L5) hoặc Ngữ văn (P5) đạt từ 8 trở lên đồng thời không có môn nào có điểm trung bình nhỏ hơn 6.5 đồng thời các môn xếp loại phải thỏa mãn là loại Giỏi (G) + Loại khá (K)
Xếp loại khá (K) nếu thỏa mã tiêu chí sau:
Tiêu chí 1: Trung bình môn >=6.5 và có một trong hai môn Toán hoặc Ngữ văn đạt từ 6.5 trở lên các môn tính điểm còn lại không có môn nào dưới điểm 5 các môn xếp loại không có xếp loại Yếu (Y) loại kém
Tiêu chí 2: (trường hợp điều chỉnh)
Trung bình môn >=8.0 và có một trong hai môn Toán hoặc Ngữ văn đạt từ 8.0 trở lên và các môn tính điểm còn lại không có môn nào dưới 3.5 và tổng những môn tính điểm nhỏ hơn 5.0 chỉ có một môn (có một môn nhỏ hơn 5.0 nhưng lớn hơn 3.5 các môn tính điểm còn lại lớn hơn 6.4) và các môn xếp loại đạt loại Giỏi hay loại khá
Loại Trung bình (Tb) nêu thỏa mãn các tiêu chí sau:
Tiêu chi 1: Cột Trung bình >=5.0 và có một trong hai môn Toán hoặc Ngữ văn đạt từ 5.0 trở lên và các môn tính điểm còn lại không có môn nào dưới 3.5 và các môn xếp loại không có môn nào xếp loại Yếu hoặc kém.
Tiêu chí 2: (trường hợp điều chỉnh 1)
Nếu tổng số cột tính điểm (từ cột L đến cột W) + tổng các cột của các môn xếp loại xếp loại Y <=1 và không có xếp loại kém và điểm các môn tính điểm có điểm >=2 và cột trung bình môn >=6.5 và trong đó cột Toán hoặc Ngữ văn có ít nhất 1 môn >=6.5 và tổng số cột >=5 kết quả này bằng tổng số cột có dữ liệu -1
Tiêu chí 3 (trường hợp điều chỉnh)
Tổng các cột cố điểm <3.5 + cột xếp loại Y + cột xếp loại Kém <=1 và tổng số cột tính điểm từ L đến W có điểm trung bình >=6.5 phải >= tổng số cột có dữ liệu từ L đến W -1 và cột trung bình các môn >=8.0 đồng thời có ít nhất 1 cột Toán hoặc ngữ văn >=8.0
Loại Yếu (Y) nếu thỏa một trong các trường hợp sau:
Tiêu chí 1: trung bình môn >=3.5 Toán hoặc Văn phải có môn >=3.5 và không có môn nào điểm dưới 2 đồng thơi không có môn nào xếp loại kém
Tiêu chí 2: Tổng số cột từ L đến W nhỏ hơn 2 điểm + số cột xếp loại kém <=1 và tổng số cột >=5 phải >= tổng số cột từ L đến W có dữ liệu trừ 1 và cột trung bình >=6.5 đồng thời có ít nhất một môn Toán hoặc Ngữ văn lớn hơn 6.5
Loại kém là các trường hợp còn lại


Tôi đang chập chững học VBA, thấy bài của Bạn giống giống bài của mình nên ngứa tay chứ thật ra tôi không biết gì nhiều lắm đâu.
Chỉ làm được phần tính TB HK, còn Xếp loại thì phải nghiên cứu thêm dài dài.
Như Sa_DQ viết ở bài trên:
Bạn phải có một ít "vốn" VBA mới học hỏi thêm được, chứ chưa biết gì mà yêu cầu giải thích thì ... khó quá!
 

File đính kèm

Lần chỉnh sửa cuối:

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

Back
Top Bottom