Trích lọc nhiều vùng trong một Sheets

  • Thread starter Thread starter khoa_pr
  • Ngày gửi Ngày gửi
Liên hệ QC

khoa_pr

Thành viên hoạt động
Tham gia
16/6/09
Bài viết
141
Được thích
13
Xin chào tất cả các thành viên!
Tôi Đang làm một bảng điểm dùng cho giáo viên chủ nhiệm. Tuy nhiên khi viết code VBA để trích lọc danh sách học sinh Giỏi (DSHS_G), DSHS tiên tiến (DSHS_TT) thì bị kẹt, mong mọi người giúp đỡ.
Thông thường thì Điểm HK1 làm 1 sheet, HK2 làm 1 sheet, Cả năm làm 1 sheet. Nhưng để cho gọn tránh nhiều Sheet trong một Workbook, tôi làm cả 3 trong một Sheet, nên khi trích lọc có rắc rối.
Tôi có đính kém tập tin, mong mọi người đọc ở trang Yêu cầu, xem nội dung và giúp đỡ.
Cám ơn.
 

File đính kèm

Nó đây rồi

Trong macro:

Mã:
[COLOR=Gray][B]Sub GPE(Rng As Range)[/B]
 Dim sRng As Range, dRng As Range
 Const Dong As Integer = 135
[/COLOR][COLOR=Gray]'.. . . . . . '
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         [B]DanhSTT Cells(7, Col).Offset(, -1)
         DanhSTT Cells(141, Col).Offset(, -1)   [/B]   
   Else
      MsgBox ""
   End If
 Next jJ
[B]End Sub[/B][/COLOR]

Bạn thêm các dòng lệnh như sau:

PHP:
Sub GPE(Rng As Range)
' . . . . . . . '
'. . . . . . . .'
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
      If Zz = 1 Then      '<=|'
         DanhSTT Cells(7, Col).Offset(, -1)
      Else                    '<=|'
         DanhSTT Cells(141, Col).Offset(, -1)
      End If                 '<=|'      
   Else
      MsgBox ""
   End If
 Next jJ
End Sub

Lúc đó nó chỉ Format những vùng cần thiết thôi;

(2) Mình nghĩ, các macro mình để chỉ module2 vậy nên bạn sửa trong file của mình & chạy thử;
Khi nào thêm êm ru thì chép toàn bô module này sang workBook mới của bạn. Hãy thử đi, sẽ được trợ giúp nếu bạn đầu hàng! :-=
 
Upvote 0
Cảm ơn bạn HYen17. Minh se thu lai va thong bao sau nhe.
 
Upvote 0
Nhờ giải thích Code

Chào HYen17 và các thành viên khác!
Nhờ bạn giải thích giúp code sau
1- Trong Sub Danh STT "=IF(RC[1]="""","""",N(R[-1]C)+1)" chữ N có nghĩa là gì, có phải là từ Number hay Numeric không? tại sao phải thêm chữ N thay vì R[-1]C+1?
2- Trong Sub FormatBorder, jJ = 7 to 12 có nghĩa là gì?
3- Trong Sub HockyI, khi định nghĩa Sh As Worksheet ,bêntrong nội dung ta dùng Sh.Select nhưng khôngchỉ rõ Sh bằng Sheet nào nhưng VBA vẫn hiểu là Sheets("HSG-HSTT"). tại sao thế? có phải do ở Sub GPE ta đã chỉ rõ Set Sh = Sheets("HSG-HSTT") ?
Cảm ơn tất cả nhé
 
Upvote 0
Nhờ bạn giải thích giúp code sau
1- Trong Sub Danh STT "=IF(RC[1]="""","""",N(R[-1]C)+1)" chữ N có nghĩa là gì, có phải là từ Number hay Numeric không? tại sao phải thêm chữ N thay vì R[-1]C+1?
2- Trong Sub FormatBorder, jJ = 7 to 12 có nghĩa là gì?
3- Trong Sub HockyI, khi định nghĩa Sh As Worksheet ,bêntrong nội dung ta dùng Sh.Select nhưng khôngchỉ rõ Sh bằng Sheet nào nhưng VBA vẫn hiểu là Sheets("HSG-HSTT"). tại sao thế? có phải do ở Sub GPE ta đã chỉ rõ Set Sh = Sheets("HSG-HSTT") ?


1./ N là hàm của excel Khi đó, nếu [B1] đang có chuỗi "STT"
Tại [B2] ta nhập =N(B1)+1 bạn đoán xem sẽ là bao nhiêu?
Và tìm chữ thập mãnh trong [B2] & kéo chép công thức xuống [B3] xem sao;

2./ Cái ni là các hệ số mặc định của excel khi định kể đường ngang-dưới, Ngang-trên, hông phải & hông trái của 1 ô. (Còn 2 chỉ số nữa bạn tìm hiểu xem sao!, Gợi í, nếu ta cần định dạng 4 ô của 2 hàng & 2 cột liền kề nhau, thì còn 2 đường là trục đối xứng đó)

3./ Biến Sh là biến toàn cục, xài chung cho tất cả các macro thuộc trang tính; Do vậy, tại bất kỳ macro nào thuộc trang tính cũng có thể gán nó cho 1 đối tượng thích hợp cùng thể loại (As WorkSheet) nào.

Hi vọng giúp được bạn ít nhiều

Chúc vui vẽ! --=0 :-= --=0


 
Lần chỉnh sửa cuối:
Upvote 0
Hệ số mặc định kẻ Bỏder trong excel



2./ Cái ni là các hệ số mặc định của excel khi định kể đường ngang-dưới, Ngang-trên, hông phải & hông trái của 1 ô. (Còn 2 chỉ số nữa bạn tìm hiểu xem sao!, Gợi í, nếu ta cần định dạng 4 ô của 2 hàng & 2 cột liền kề nhau, thì còn 2 đường là trục đối xứng đó)

Chúc vui vẽ! --=0 :-= --=0

Chào bạn!
Nhờ bạn cho mình biết thêm các hệ số mặc định khi kẻ Border của Excel, vì dùng các hệ số này code kẻ Border sẽ gọn gàng hơn là đoạn code dưới đây. Qua đoạn code dưới đây mong giải thích thêm nếu dùng hệ số mặc định để kẻ khung thì sẽ thay thế như thế nào ?

Sub Format(Rng As Range)
With Rng
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
If Rng.Rows.Count > 1 Then .Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
End Sub

Cảm ơn

Học thì dốt, càng học càng thấy dốt hơn !
 
Upvote 0
Chào bạn!
Nhờ bạn cho mình biết thêm các hệ số mặc định khi kẻ Border của Excel, vì dùng các hệ số này code kẻ Border sẽ gọn gàng hơn là đoạn code dưới đây. Qua đoạn code dưới đây mong giải thích thêm nếu dùng hệ số mặc định để kẻ khung thì sẽ thay thế như thế nào ?
Sub Format(Rng As Range)
With Rng
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
If Rng.Rows.Count > 1 Then .Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
End Sub Cảm ơn
Để biết các tham số đó, cách tiện nhất là ta cho hiện cửa sổ Immediate:
Mở macro nào đó; Vô menu View & chọn dòng Immediate Window
Sau đó trong CS này, bạn nhập

? xlEdgeBottom & nhấn fím {ENTER}

CS này nó sẽ cung cấp cho ta tất thẩy các tham số nếu bạn biết tên của nó;
Ví dụ xlPart, xlFormulas, xlValues, . . . .

Nhưng mình khuyên bạn hết sức tránh lạm dụng; Vì thực ra excel mê các chữ dài hơn đó hơn các con số khô khan bạn đưa vô. Giống như các con số là tiếng nước ngoài, còn các từ khóa là tiếng mẹ đẽ của nó vậy!

Nói đi cũng nên nói lại: Tại sao mình dùng, nhưng lại khuyên người khác không dùng; Vì là mình dùng vòng lặp, khi các tham số đó cho phép do tính liên tục giữa chúng.





 
Upvote 0
Web KT

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

Back
Top Bottom