Sử dụng hàm upper hay lower trong vba (1 người xem)

Liên hệ QC

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

hoangmai2605

Thành viên chính thức
Tham gia
27/2/09
Bài viết
92
Được thích
11
- Khi viết code vba, tui sử dụng được hàm Trim nhưng tìm làm mãi mà không sử dụng được hàm Upper hay Lower
- Ví dụ tui tạo 1 function Test(svar:string). Trong code Test tui muốn đổi svar thành chữa hoa hết hay thành chữ thường hết thì phải viết code như thế nào ạ.
- Mong các bạn chỉ giúp. Chân thành cám ơn
 
- Khi viết code vba, tui sử dụng được hàm Trim nhưng tìm làm mãi mà không sử dụng được hàm Upper hay Lower
- Ví dụ tui tạo 1 function Test(svar:string). Trong code Test tui muốn đổi svar thành chữa hoa hết hay thành chữ thường hết thì phải viết code như thế nào ạ.
- Mong các bạn chỉ giúp. Chân thành cám ơn
Bạn thử dùng UCase(Text) và LCase(Text) xem sao!
 
Dử dụng hàm Date trong code vba

Bạn thử dùng UCase(Text) và LCase(Text) xem sao!

Các bạn làm ơn chỉ giúp Tôi cách sử dụng hàm Date(year,month,day) trong code vba.
Và cách kiểm tra 1 ngày có phải là ngày chủ nhật hay không?

VD: Trong 1 sub Test Tôi có nhu cầu kiểm tra 1 biến dtemp kiểu date có phải là ngày chủ nhật hay không, Tôi làm như sau:
Mã:
Dim dtemp as date
Dim scheck as string
 
dtemp= Date(2009,06,15)
if weekday(dtemp)=1 then
scheck = "OK" 'Ngày chủ nhật
else
scheck = "NOT OK" 'Không phải ngày CN
end if
Mong các bạn chỉ giúp
 
Chỉnh sửa lần cuối bởi điều hành viên:
Các bạn làm ơn chỉ giúp Tôi cách sử dụng hàm Date(year,month,day) trong code vba.
Và cách kiểm tra 1 ngày có phải là ngày chủ nhật hay không?

VD: Trong 1 sub Test Tôi có nhu cầu kiểm tra 1 biến dtemp kiểu date có phải là ngày chủ nhật hay không, Tôi làm như sau:
Dim dtemp as date
Dim scheck as string

dtemp= Date(2009,06,15)
if weekday(dtemp)=1 then
scheck = "OK" 'Ngày chủ nhật
else
scheck = "NOT OK" 'Không phải ngày CN
end if

Mong các bạn chỉ giúp
Ủa! Nhớ không lầm tôi trả lời rồi mà ta?
Làm vầy đây:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 If Weekday(dtemp) = 1 Then
   scheck = "OK"
  Else
   scheck = "NOT OK"
  End If
End Sub
Rút gọn lại:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 scheck = Choose(1 - (Weekday(dtemp) = 1), "NOT OK", "OK")
End Sub
Hoặc:
PHP:
Sub Test()
 Dim dtemp As Date, scheck As String
 dtemp = DateSerial(2009, 6, 15)
 scheck = IIf(Weekday(dtemp) = 1, "OK", "NOT OK")
End Sub
 
Lần chỉnh sửa cuối:
Ủa! Nhớ không lầm tôi trả lời rồi mà ta?

Đúng là bạn đã trả lời Mai rồi. Nhưng không biết sao, hôm qua chưa copy về máy mình mà sáng nay vào xem lại đề tài mình post và bạn reply hôm qua thì không thấy. Cám ơn bạn đã trả lời lại sớm giúp mình.

Nhân tiện bạn cho Mai hỏi mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn. Vì mới tập viết macro trong excel nên Mai cần sự trợ giúp của những người đi trước. (tập viết khi đọc cuốn sách mà forum phát hành đó). Lần nữa cám ơn bạn nhiều.
 
Nhân tiện bạn cho Mai hỏi mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn. Vì mới tập viết macro trong excel nên Mai cần sự trợ giúp của những người đi trước. (tập viết khi đọc cuốn sách mà forum phát hành đó). Lần nữa cám ơn bạn nhiều.
Bạn mở Excel lên, Bấm Alt + F11 rồi bấm F2 sẽ thấy toàn bộ các Function trong VBA
 
Mình làm sao để thấy được những function mà dùng trực tiếp luôn trong vba như: trim, ucase, lcase,... hả bạn.
Câu vầy do quen miệng mà nói thôi; Nhưng nó chưa chính xác đâu;

Những hàm mà bạn đề cập đó là những hàm của VBA; Và trong đó còn cơ mang nào là hàm

Những hàm đó có cái còn có thể dùng trong access, . . . .Khà,. . khà, . . .
 
Tô màu tự động ngày chủ nhật

Bạn mở Excel lên, Bấm Alt + F11 rồi bấm F2 sẽ thấy toàn bộ các Function trong VBA

- Khi tạo 1 bảng chấm công, có 1 vấn đề là cần tự động tô màu dữ liệu ngày chủ nhật để phục vụ cho việc tính 1 chỉ tiêu nào đó. Vì thế Tôi mong các bạn chỉ dẫn giúp Tôi 1 yêu cầu mà Tôi đã nêu rõ ràng trong file attached.
- Rất cảm ơn các bạn và mong nhận được sự chỉ dẫn
 

File đính kèm

- Khi tạo 1 bảng chấm công, có 1 vấn đề là cần tự động tô màu dữ liệu ngày chủ nhật để phục vụ cho việc tính 1 chỉ tiêu nào đó. Vì thế Tôi mong các bạn chỉ dẫn giúp Tôi 1 yêu cầu mà Tôi đã nêu rõ ràng trong file attached.
- Rất cảm ơn các bạn và mong nhận được sự chỉ dẫn
Nói thiệt, từ trước đến giờ chưa từng gặp bảng chấm công "kỳ lạ" như file này... Nhìn vào chẳng hiểu tô màu thế nào nữa!
Sao bạn không ghi ngày trong tháng thành 1 dòng, từ ngày 1 đến ngày cuối tháng mà lại chia thành 2 dòng thế kia? Nhìn khó hiểu quá
 
Bảng chấm công này mình gặp rồi; Thậm chí mình còn viết 1 hàm người dùng để tổng hợp công nữa cơ đấy!

Như yêu cầu thì căn cứ vô ngày tại [R1] & [AD1] mà viết macro cho bạn í thôi

Nhu cầu thực tiển là muôn hình vạn trạng mà! Khà, . . khà . . . .

To Tác giả Topic:
Sao bạn không hỏi tiếp trong topic trước đây mà hỏi ở đây vậy! Dễ bị MOD/SMOD tách ra lắm đó nha! Khi đó cũng phải tốn chút thời gian tìm đến nó!
 
Lần chỉnh sửa cuối:
Nói thiệt, từ trước đến giờ chưa từng gặp bảng chấm công "kỳ lạ" như file này... Nhìn vào chẳng hiểu tô màu thế nào nữa!
Sao bạn không ghi ngày trong tháng thành 1 dòng, từ ngày 1 đến ngày cuối tháng mà lại chia thành 2 dòng thế kia? Nhìn khó hiểu quá

- hihihi..., Form chấm công của Mai là như thế đó bạn ạ. Như ví dụ attached thì là dữ liệu chấm công từ 1/6/2009 đến 15/6/2009 nên các ô tô xám ám chỉ không phải là những ngày chấm công.
- Từ qua tời giờ Mai có hỏi bạn những function phục vụ cho việc tô màu này đó. Nhưng suy nghĩ vẫn chưa ra vì dòng bắt đầu cho table thì đã biết (là dòng 7), các cột thì giống nhau ở các sheet rồi, chỉ còn chưa xác định được dòng thứ mấy sẽ nằm bên trên dòng "GHI CHÚ" đó bạn ạ.
- Tiếp nữa Mai chưa biết gắn macro cho nút lệnh với tham số động (vùngchấm) đó bạn.
- Bạn suy nghĩ giúp Mai với. Mai cũng đang tiếp tục suy nghĩ cách làm.
- Cám ơn bạn đã hồi âm và mong bạn giúp.
 
- hihihi..., Form chấm công của Mai là như thế đó bạn ạ. Như ví dụ attached thì là dữ liệu chấm công từ 1/6/2009 đến 15/6/2009 nên các ô tô xám ám chỉ không phải là những ngày chấm công.
- Từ qua tời giờ Mai có hỏi bạn những function phục vụ cho việc tô màu này đó. Nhưng suy nghĩ vẫn chưa ra vì dòng bắt đầu cho table thì đã biết (là dòng 7), các cột thì giống nhau ở các sheet rồi, chỉ còn chưa xác định được dòng thứ mấy sẽ nằm bên trên dòng "GHI CHÚ" đó bạn ạ.
- Tiếp nữa Mai chưa biết gắn macro cho nút lệnh với tham số động (vùngchấm) đó bạn.
- Bạn suy nghĩ giúp Mai với. Mai cũng đang tiếp tục suy nghĩ cách làm.
- Cám ơn bạn đã hồi âm và mong bạn giúp.
Vậy nguyên lý là thế này, bạn xem có đúng không nhé:
1/ Trên dòng chữ "GHI CHÚ:" là dòng cuối của Table, dòng đầu là 7, cái này không khó.
2/ Tìm từ K7-> K... step 2, nếu Date(year(R1), month(R1),K7) có là chủ nhật thì tô 2 cột đó màu đỏ=> xác định cột. Thóat vòng lặp. => (cột + 7) *2 cũng màu đỏ.

Nếu đúng như vậy, bạn dùng thử code sau, nhớ là dước chữ "GHI CHÚ:" không có dữ liệu.
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long
Dim i As Long, iD As Long
ActiveSheet.Select
endR = Cells(65000, 2).End(xlUp).Row
iY = Year(Range("R1")): iM = Month(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(7, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(7, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Exit For
  End If
Next

End Sub
 
Lần chỉnh sửa cuối:
Vậy nguyên lý là thế này, bạn xem có đúng không nhé:
1/ Trên dòng chữ "GHI CHÚ:" là dòng cuối của Table, dòng đầu là 7, cái này không khó.

- Bạn cho Mai hỏi bạn xác định số dòng như thế nào (số dòng từ dòng 7 đến dòng trước dòng Ghi chú). Vì Mai hiểu bạn tô màu trong vòng For 1..6. Nhưng mà số người trong mỗi bảng chấm công là khác nhau nên Mai chưa thấy lệnh bạn xác định số dòng.
- Mới xem qua và hiểu vậy. Nếu chưa đúng mong bạn chỉ giáo. Cám ơn bạn đã hồi âm nhanh.
 
Code của ThuNghi chưa xóa kết quả tô màu lần trước (tháng hay kỳ trước);
Macro sự kiện của mình đây, xin cho í kiến:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [r1]) Is Nothing Then
   Dim Dat As Date:              Dim Rng As Range
   Dim BDau As Byte, jJ As Byte, eR As Byte
   
   Dat = Target.Value:           eR = [C65500].End(xlUp).Row
   Range([k7], Cells(eR, "AP")).Font.ColorIndex = 0
   BDau = IIf(Day(Dat) = 1, 0, 15)
   Set Rng = IIf(Day(Dat) = 1, [k7], [k8])
   For jJ = 1 To 16
      If Weekday(DateSerial(Year(Dat), Month(Dat), jJ + BDau)) = 1 Then
         [k9].Offset(, 2 * jJ - 2).Resize(eR, 2).Font.ColorIndex = 3
         Rng.Offset(, 2 * jJ - 4).Resize(, 2).Font.ColorIndex = 3
      End If
   Next jJ
 End If
End Sub
 
Nhớ là trước dòng chữ "GHI CHÚ:" phải là 1 dòng trống, không có dữ liệu. (1)
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long
Dim i As Long, iD As Long
ActiveSheet.Select
endR = Cells(65000, 2).End(xlUp).Row
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0 (2)
iY = Year(Range("R1")): iM = Month(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(7, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(7, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Exit For
  End If
Next 
End Sub

-Tối về đem bài bạn chỉ dẫn cho Mai suy nghĩ và đã hiểu được endR là dòng thứ mấy trước dòng Ghi chú. (dòng chữ đỏ (1) là bạn chú ý Mai phải có điều kiện như vậy đúng không?).
- Như bạn HYEN17 chỉ dẫn Mai bên dưới nên mạn phép bạn thêm dòng lệnh (2) vào code của bạn. vì trước khi tô màu ngày CN của 1 kỳ thì set lại màu default (ở vd là đen) của range(K7:APendR).
- Do mới tập viết macro nên mong bạn giải thích rõ hơn giúp Mai dòng lệnh
endR = Cells(65000, 2).End(xlUp).Row (nhất là vế sau dấu =).
- Một lần nữa cảm ơn bạn đã chỉ dẫn.
 
To Tác giả Topic:
Sao bạn không hỏi tiếp trong topic trước đây mà hỏi ở đây vậy! Dễ bị MOD/SMOD tách ra lắm đó nha! Khi đó cũng phải tốn chút thời gian tìm đến nó!

Cám ơn bạn đã nhắc nhở. Vì liên tục phía trên Mai hỏi và được trả lời về cách dùng hàm trong vba để xác định ngày chủ nhật nên mới post bài này ở đây luôn bạn.
Xin nhận khuyết điểm và sẽ khắc phục trong bài toán khác.
Chào bạn
 
Code của ThuNghi chưa xóa kết quả tô màu lần trước (tháng hay kỳ trước);
Macro sự kiện của mình đây, xin cho í kiến:
[/php]

- Vâng, bạn giải bài toán Mai bằng 1 macro event rất hay nhưng Mai muốn macro được gắn với nút lệnh ở mỗi sheet bạn ạ.
- Và Mai đã dùng macro của ThuNghi chỉ dẫn chỉ thêm dòng lệnh set về màu default trước khi tô đỏ ngày CN do bạn lưu ý.
- Chân thành cảm ơn chỉ dẫn của bạn. Chào bạn nhe.
 
- Vâng, bạn giải bài toán Mai bằng 1 macro event rất hay nhưng Mai muốn macro được gắn với nút lệnh ở mỗi sheet bạn ạ.
- Chân thành cảm ơn chỉ dẫn của bạn. Chào bạn nhe.

Nhưng macro sự kiện của mình thậm chí không cần gắn vào nút lệnh nào hết; Nó chỉ cần:

(*) Được chép vô tất cả các trang tính nào chứa bảng chấm công các tổ.
Điều này có thể được cải tiến để các macro này chỉ gồm là 1 dòng lệnh để cùng gọi 1 macro chung thực thị việc tô màu.

(*) Chỉ cần nhập ngày bắt đầu vô [R1] (Đó hoặc là MM/01/200y hay MM/16/200y mà thôi) Thì macro sẽ tô ngay màu của trang tính đó.

Chúc vui! :-=
 
-Tối về đem bài bạn chỉ dẫn cho Mai suy nghĩ và đã hiểu được endR là dòng thứ mấy trước dòng Ghi chú. (dòng chữ đỏ (1) là bạn chú ý Mai phải có điều kiện như vậy đúng không?).
Sorry, sau dòng có chữ "Ghi chú", do minh ghi nhầm.
Nghĩa là khi ở dòng 65000 mà nhấn end(up) thì sẽ đến dòng có chữ trên.
Do muốn đơn giản, còn không tìm trong Cột B dòng nào có chữ "Ghi chú" thì cũng không khó mấy. Mai thử làm 1 macro, chọn cột B và nhấn Ctr F, tìm chữ "Ghi chú" thì sẽ thấy PP Find() có ứng dụng ở chỗ này.
 
Sorry, sau dòng có chữ "Ghi chú", do minh ghi nhầm.

Sao kỳ quá bạn ơi, Mai post lại bài tomaucn nè (sau khi đã gắn macro cho nút lệnh) nhưng tô không đúng bạn ơi.
Như tháng 6/2009 thì các ngày 7,14,21,28 là ngày cn mà nó tô các ngày 7,14,22,29 (sheet To1) còn ở sheet To2 thì tô kỳ quá.
Bạn ơi coi giúp mình với
 

File đính kèm

Sao kỳ quá bạn ơi, Mai post lại bài tomaucn nè (sau khi đã gắn macro cho nút lệnh) nhưng tô không đúng bạn ơi.
Như tháng 6/2009 thì các ngày 7,14,21,28 là ngày cn mà nó tô các ngày 7,14,22,29 (sheet To1) còn ở sheet To2 thì tô kỳ quá.
Bạn ơi coi giúp mình với
Lưu ý:
1/ Chữ "Ghi chú" ở cột B
2/ Dưới đó không có dòng nào.
Vậy chắc phải triển khia thêm tìm chữa ghi chú.
Bạn thử copy Chữ "Ghi chú" sang cột B và test lại

Bạn dùng thử code sau, có thể để chữ Ghi chú nằm bất kỳ trong cột A, B, C, D và sau dòng 7.
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long
Dim i As Long, iD As Long
Dim myRng As Range, rngR As Range
ActiveSheet.Select
Set myRng = Range("A7:D1000")
With myRng
Set rngR = .Find(What:="ghi chú", After:=myRng(1), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
End With
endR = rngR.Row 'dong co chu ghi chu'
'endR = Cells(65000, 2).End(xlUp).Row'
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0
iY = Year(Range("R1")): iM = Month(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(7, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(7, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Exit For
  End If
Next
Set myRng = Nothing
Set rngR = Nothing

End Sub
 
Lần chỉnh sửa cuối:
Lưu ý:
1/ Chữ "Ghi chú" ở cột B
2/ Dưới đó không có dòng nào.

Bạn ơi, macro chỉ tô màu đúng trong khoảng ngày 1->15 của tháng thôi bạn ạ.
Còn 2 tuần sau thì tô thế nào bạn.
Bạn lưu ý giúp là bảng chấm công được thực hiện 1 tháng 2 lần. Nếu dữ liệu chấm công là từ 1->15 thì những ô từ 16->31 sẽ tô xám và ngược lại: chấm công cho 16->31 thì những ô 1->15 sẽ tô xám. Số ngày trong tháng đều hiện hết và làm thành 2 dòng là vậy đó bạn ạ. Bạn nghiên cứu tiếp giúp Mai với
 
Bạn ơi, macro chỉ tô màu đúng trong khoảng ngày 1->15 của tháng thôi bạn ạ.
Còn 2 tuần sau thì tô thế nào bạn.
Bạn lưu ý giúp là bảng chấm công được thực hiện 1 tháng 2 lần. Nếu dữ liệu chấm công là từ 1->15 thì những ô từ 16->31 sẽ tô xám và ngược lại: chấm công cho 16->31 thì những ô 1->15 sẽ tô xám. Số ngày trong tháng đều hiện hết và làm thành 2 dòng là vậy đó bạn ạ. Bạn nghiên cứu tiếp giúp Mai với

Vậy dùng thử code sau:
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long, iDay As Long
Dim i As Long, iD As Long
Dim myRng As Range, rngR As Range
ActiveSheet.Select
Set myRng = Range("A7:D1000")
With myRng
Set rngR = .Find(What:="ghi chú", After:=myRng(1), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
End With
endR = rngR.Row 'dong co chu ghi chu'
'endR = Cells(65000, 2).End(xlUp).Row'
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0
iY = Year(Range("R1")): iM = Month(Range("R1")): iDay = Day(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    Range(Cells(9, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
    Range(Cells(9, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    If Cells(7, 11) = iDay Then
      Range(Cells(7, 11 + (2 * i)), Cells(7, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(7, 11 + (2 * i) + 14), Cells(7, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Else
      Range(Cells(8, 11 + (2 * i)), Cells(8, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(8, 11 + (2 * i) + 14), Cells(8, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    End If
    Exit For
  End If
Next
Set myRng = Nothing
Set rngR = Nothing

End Sub
Rất vui lòng giúp bạn.
 
Rất vui lòng giúp bạn.

Vẫn không đúng khi Mai thay ngày ở R1= 15/6/2006 và AD6=30/6/2009 thì tô sai bạn ạ.
Nếu đúng thì phải tô là ngày 21, 28 nhưng nó lại tô 22 và 29 bạn ơi.(với tháng khác cũng sai với 2 tuần sau của tháng bạn ạ).
Rất cám ơn bạn đã nhiệt tình chỉ dẫn
 
Vẫn không đúng khi Mai thay ngày ở R1= 15/6/2006 và AD6=30/6/2009 thì tô sai bạn ạ.
Nếu đúng thì phải tô là ngày 21, 28 nhưng nó lại tô 22 và 29 bạn ơi.(với tháng khác cũng sai với 2 tuần sau của tháng bạn ạ).
Rất cám ơn bạn đã nhiệt tình chỉ dẫn
Sorry, do không để ý, cứ nghĩ bước nhảy là 7, 14
Bạn dùng code sau:
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long, iDay As Long
Dim i As Long, iD As Long
Dim myRng As Range, rngR As Range
ActiveSheet.Select
Set myRng = Range("A7:D1000")
With myRng
Set rngR = .Find(What:="ghi chú", After:=myRng(1), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
End With
endR = rngR.Row 'dong co chu ghi chu'
'endR = Cells(65000, 2).End(xlUp).Row'
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0
iY = Year(Range("R1")): iM = Month(Range("R1")): iDay = Day(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    If Cells(7, 11) = iDay Then
      Range(Cells(9, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(9, 11 + (2 * i) + 14), Cells(endR, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
      Range(Cells(7, 11 + (2 * i)), Cells(7, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(7, 11 + (2 * i) + 14), Cells(7, 11 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    Else
      Range(Cells(9, 9 + (2 * i)), Cells(endR, 9 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(9, 9 + (2 * i) + 14), Cells(endR, 9 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
      Range(Cells(8, 9 + (2 * i)), Cells(8, 9 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(8, 9 + (2 * i) + 14), Cells(8, 9 + (2 * i) + 1 + 14)).Font.ColorIndex = 3
    End If
    Exit For
  End If
Next
Set myRng = Nothing
Set rngR = Nothing

End Sub
 
Sorry, do không để ý, cứ nghĩ bước nhảy là 7, 14

Bạn ơi Mai test đối với tháng có 31 ngày (2 tuần cuối tháng) mới thử 2 tháng là 3 và 5 (16/3/2009-31/3/2009; 16/5/2009-31/5/2009) thì tô bị sót bạn ơi. Mong bạn xem lại giải thuật bài toán. Cám ơn bạn
 
Bạn ơi Mai test đối với tháng có 31 ngày (2 tuần cuối tháng) mới thử 2 tháng là 3 và 5 (16/3/2009-31/3/2009; 16/5/2009-31/5/2009) thì tô bị sót bạn ơi. Mong bạn xem lại giải thuật bài toán. Cám ơn bạn
Lại là quên test, có tháng có 5 CN. Xin lỗi.
Bạn test lại nhé. Phiền bạn quá.
PHP:
Sub TestCN()
Dim iY As Long, iM As Long, iDate As Date, endR As Long, iDay As Long
Dim i As Long, iD As Long, k As Long
Dim myRng As Range, rngR As Range
ActiveSheet.Select
Set myRng = Range("A7:D1000")
With myRng
Set rngR = .Find(What:="ghi chú", After:=myRng(1), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
End With
endR = rngR.Row 'dong co chu ghi chu'
Range([k7], Cells(endR, "AP")).Font.ColorIndex = 0
iY = Year(Range("R1")): iM = Month(Range("R1")): iDay = Day(Range("R1"))
For i = 0 To 6
  iD = Cells(7, 11 + (2 * i))
  iDate = DateSerial(iY, iM, iD)
  If Weekday(iDate) = 1 Then
    If Cells(7, 11) = iDay Then
      Range(Cells(9, 11 + (2 * i)), Cells(endR, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(7, 11 + (2 * i)), Cells(7, 11 + (2 * i) + 1)).Font.ColorIndex = 3
      For k = 1 To 2
        If 11 + (2 * i) + 1 + 14 * k < 43 Then 'cot AQ'
          Range(Cells(9, 11 + (2 * i) + 14 * k), Cells(endR, 11 + (2 * i) + 1 + 14 * k)).Font.ColorIndex = 3
          Range(Cells(7, 11 + (2 * i) + 14 * k), Cells(7, 11 + (2 * i) + 1 + 14 * k)).Font.ColorIndex = 3
        End If
      Next
    Else
      Range(Cells(9, 9 + (2 * i)), Cells(endR, 9 + (2 * i) + 1)).Font.ColorIndex = 3
      Range(Cells(8, 9 + (2 * i)), Cells(8, 9 + (2 * i) + 1)).Font.ColorIndex = 3
      For k = 1 To 2
        If 11 + (2 * i) + 1 + 14 * k < 43 Then 'cot AQ'
          Range(Cells(9, 9 + (2 * i) + 14 * k), Cells(endR, 9 + (2 * i) + 1 + 14 * k)).Font.ColorIndex = 3
          Range(Cells(8, 9 + (2 * i) + 14 * k), Cells(8, 9 + (2 * i) + 1 + 14 * k)).Font.ColorIndex = 3
        End If
      Next
    End If
    Exit For
  End If
Next
Set myRng = Nothing
Set rngR = Nothing

End Sub
 
Tôi xem qua file của tác giả, tuy chưa hiểu lắm về yêu cầu, nhưng chạy code của các cao thủ, xem kết quả thì nhận thấy rằng: Bài này có thể dùng Conditional Formating để tô màu... Tại sao tác giả không dùng mà lại dùng code chi cho lằng nhằng nhỉ?
Với Conditional Formating, quá đơn giản để tô màu theo yêu cầu này!
 

Bạn ơi chạy đúng rồi bạn. Cám ơn bạn nhiều lắm nghe.
Vì trong bảng chấm công của Mai có column Phụ cấp sẽ phụ thuộc vào ngày công là ngày thường hay ngày chủ nhật mà mới tập viết macro thôi nên không làm được chiêu tô màu ngày cn tự động và làm phiền bạn quá. Lúc đầu tính để tô thủ công nhưng tham khảo trong forum có chỉ cách tô màu ngày cuối tuần tự động mới dám đưa cái bí của mình lên nhờ các bạn chỉ dẫn. Lần nữa cảm ơn bạn nghe.
Mong là sẽ được bạn chỉ dẫn ở lần khác. Chào bạn nhe
 
- Khi viết code vba, tui sử dụng được hàm Trim nhưng tìm làm mãi mà không sử dụng được hàm Upper hay Lower
- Ví dụ tui tạo 1 function Test(svar:string). Trong code Test tui muốn đổi svar thành chữa hoa hết hay thành chữ thường hết thì phải viết code như thế nào ạ.
- Mong các bạn chỉ giúp. Chân thành cám ơn
Bạn dùng code: WorksheetFunction.prorper (string)
+ trong đó string là chuỗi mà bạn cần viết hoa
 

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

Back
Top Bottom