Xác định ngày chủ nhật trong vòng lập (1 người xem)

Liên hệ QC

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

phuoclocvl

Thành viên thường trực
Tham gia
28/3/12
Bài viết
220
Được thích
32
Dạ xin chào. cho em hỏi giả sử như em có 1 cột là ngày và một cột em muốn thiết lập một ngày khác bang cách trừ đi 5 ngày chẳn hạn. giả sử em có cột B trong file excel là ngày hôm nay chẳn hạn (10-10-2013). giờ em cho nó trừ đi năm ngày [(10-10-2013) -5 ] thì kết quả ở ô A1 là (5-10-2013) nhưng do (6-10-2013) là ngày chủ nhật nên em sẽ trừ thêm 1 ngày nữa như vậy kết quả ở ô A1 là ngày (4-10-2013) có cách nào mình xét như vậy không xin giúp đỡ giùm. cảm ơn. xem giùm em file đính kèm
 

File đính kèm

Lần chỉnh sửa cuối:
Dạ xin chào. cho em hỏi giả sử như em có 1 cột là ngày và một cột em muốn thiết lập một ngày khác bang cách trừ đi 5 ngày chẳn hạn. giả sử em có cột B trong file excel là ngày hôm nay chẳn hạn (10-10-2013). giờ em cho nó trừ đi năm ngày [(10-10-2013) -5 ] thì kết quả ở ô A1 là (5-10-2013) nhưng do (6-10-2013) là ngày chủ nhật nên em sẽ trừ thêm 1 ngày nữa như vậy kết quả ở ô A1 là ngày (4-10-2013) có cách nào mình xét như vậy không xin giúp đỡ giùm. cảm ơn. xem giùm em file đính kèm
Bạn dùng thử công thức:
=B1-5-(WEEKDAY(B1,2)<6)
Thân!
 
Upvote 0
Dạ xin chào. cho em hỏi giả sử như em có 1 cột là ngày và một cột em muốn thiết lập một ngày khác bang cách trừ đi 5 ngày chẳn hạn. giả sử em có cột B trong file excel là ngày hôm nay chẳn hạn (10-10-2013). giờ em cho nó trừ đi năm ngày [(10-10-2013) -5 ] thì kết quả ở ô A1 là (5-10-2013) nhưng do (6-10-2013) là ngày chủ nhật nên em sẽ trừ thêm 1 ngày nữa như vậy kết quả ở ô A1 là ngày (4-10-2013) có cách nào mình xét như vậy không xin giúp đỡ giùm. cảm ơn. xem giùm em file đính kèm
chưa hiểu mấy về vấn đề bạn, thôi làm đại không biết đúng ý bạn ko??
=IF(OR(WEEKDAY(B1-5)=1,WEEKDAY(B1-5)>=WEEKDAY(B1)),B1-6,B1-5)
 
Lần chỉnh sửa cuối:
Upvote 0
em có viết thử code như vầy mà có cell bị sai
Public Sub test()
Dim i, j As Integer
For i = 1 To 5
For j = 1 To 12
If Weekday(Cells(j, 2) - i) = 1 Then
Cells(j, 1).Value = Cells(j, 2) - 6
Else
Cells(j, 1).Value = Cells(j, 2) - 5
End If
Next j
Next i
End Sub
 
Upvote 0
Từ hàm người dùng, mình đi đến công thức sau, hoàn toàn Excel

=B2-5-IF(WEEKDAY(B2)=7,0,1)

PHP:
Option Explicit
Function Ngay_5(Dat As Date) As Date
 Dim jJ As Byte, CN As Byte
 For jJ = 0 To 5
    If Weekday(Dat - jJ) = 1 Then
        CN = 1:         Exit For
    End If
 Next jJ
 Ngay_5 = Dat - 5 - CN
End Function
 
Upvote 0
=B2-5-IF(WEEKDAY(B2)=7,0,1)

PHP:
Option Explicit
Function Ngay_5(Dat As Date) As Date
 Dim jJ As Byte, CN As Byte
 For jJ = 0 To 5
    If Weekday(Dat - jJ) = 1 Then
        CN = 1:         Exit For
    End If
 Next jJ
 Ngay_5 = Dat - 5 - CN
End Function
Cái này đâu cần vòng lập làm gì hả sư phụ?
Giải thuật như bài 2 là đủ rồi, tức chỉ cần ngày đang xét là thứ 7 hoặc CN thì cứ trừ 5 thoải mái, bằng ngược lại thì phải trừ 6
 
Upvote 0
Cái này đâu cần vòng lập làm gì hả sư phụ?
Giải thuật như bài 2 là đủ rồi, tức chỉ cần ngày đang xét là thứ 7 hoặc CN thì cứ trừ 5 thoải mái, bằng ngược lại thì phải trừ 6
,

tại em có nhiều data nữa không phải chỉ đơn thuần vậy đâu thầy, em chỉ lấy ra 1 cái để được hướng dẫn để gán vào những dữ lieu còn lại. Xem giúp em att file nha. thanks
 

File đính kèm

Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
giúp em code này đi, Em muốn count xem trong vòng lập nầy có bao nhiêu ngày chủ nhật

Public Sub countt()
Dim i As Integer
For i = 1 To 20
Cells(1, 1) = Application.Count(Weekday(Cells(1, 2) - i) = 1) // giả sử em có cells(1,2) là ngày 10-10-2013
Next i
End Sub
 
Upvote 0
giúp em code này đi, Em muốn count xem trong vòng lập nầy có bao nhiêu ngày chủ nhật

Public Sub countt()
Dim i As Integer
For i = 1 To 20
Cells(1, 1) = Application.Count(Weekday(Cells(1, 2) - i) = 1)// giả sử em có cells(1,2) là ngày 10-10-2013
Next i
End Sub

Vầy mới đúng:
Mã:
Public Sub countt()
  Dim i As Long, lCount As Long
  For i = 1 To 20
    If Weekday(Cells(1, 2) - i) = 1 Then lCount = lCount + 1
  Next i
  Cells(1, 1) = lCount
End Sub
 
Upvote 0
Vầy mới đúng:
Mã:
Public Sub countt()
  Dim i As Long, lCount As Long
  For i = 1 To 20
    If Weekday(Cells(1, 2) - i) = 1 Then lCount = lCount + 1
  Next i
  Cells(1, 1) = lCount
End Sub

Cảm ơn thầy nhiều. thầy có thể giải thích thêm giúp em, em thấy biến Lcount đâu có dính tới biến kia mà sao nó count được hay vậy hihi. em bị dốt mong thầy thông cảm
 
Upvote 0
Cảm ơn thầy nhiều. thầy có thể giải thích thêm giúp em, em thấy biến Lcount đâu có dính tới biến kia mà sao nó count được hay vậy hihi. em bị dốt mong thầy thông cảm

Sao không "dính"
Nếu weekday của giá trị ngày = 1 (tức CN) thì biến lCount sẽ được cộng thêm 1 đơn vị (cộng dồn). Vậy đến cuối cùng, chẳng phải lCount chính là số ngày CN sao?
 
Upvote 0
Mình thấy code này chạy như vậy thì hơi thừa, nếu vòng lặp lớn thì tốn thời gian không cần thiết. Theo mình chỉ cần:

Mã:
Public Sub countt()
Dim i As Long, lCount As Long  
For i = 1 To 20
    If Weekday(Cells(1, 2) - i) = 1 Then
 lCount = Int((20-i)/7)+1
exit for
end if
  Next i
  Cells(1, 1) = lCount
End Sub


Như vậy i chỉ cần chạy nhiều nhất là đến 7 đã xong rồi.
 
Upvote 0
Mình thấy code này chạy như vậy thì hơi thừa, nếu vòng lặp lớn thì tốn thời gian không cần thiết. Theo mình chỉ cần:

Mã:
Public Sub countt()
Dim i As Long, lCount As Long  
For i = 1 To 20
    If Weekday(Cells(1, 2) - i) = 1 Then
 lCount = Int((20-i)/7)+1
exit for
end if
  Next i
  Cells(1, 1) = lCount
End Sub


Như vậy i chỉ cần chạy nhiều nhất là đến 7 đã xong rồi.
Cái này chỉ là sửa code của tác giả để nó chạy thôi anh ơi... chứ thật ra để làm bài này, em khỏi cần vòng lập luôn: Bài toán đếm số ngày CN giữa 2 thời điểm đã có trên diễn đàn từ đời nào rồi
 
Upvote 0

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

Back
Top Bottom