判定數值為周末後,於下方插入列-->填入特定數值code請益

各位大大 好

先請教如下撰寫code較好,卡關很久...也想不到好的解法
if is weekend then (下面該寫什麼code才可以滿足我的需求)


==>目前已判斷12/30為周末、5/14為周末
==>需要在12/30、5/14下方插入一列 預設為同日期,另一欄預設值為MS

現有數值
12月30日 NS
12月30日 DS
5月9日 DS
5月9日 MS
5月9日 NS
5月10日 DS
5月10日 MS
5月10日 NS
5月11日 DS
5月11日 MS
5月11日 NS
5月12日 DS
5月12日 MS
5月12日 NS
5月13日 DS
5月13日 MS
5月13日 NS
5月14日 DS
5月14日 NS

變更後數值

12月30日 NS
12月30日 DS
12月30日 MS
5月9日 DS
5月9日 MS
5月9日 NS
5月10日 DS
5月10日 MS
5月10日 NS
5月11日 DS
5月11日 MS
5月11日 NS
5月12日 DS
5月12日 MS
5月12日 NS
5月13日 DS
5月13日 MS
5月13日 NS
5月14日 DS
5月14日 NS
5月14日 MS

目前卡在這邊code不知道要寫什麼

v = Application.CountIf(Range("P:P"), "<>")

For zz = 2 To v


checkDate = Cells(zz, 16).Value

Dim isWeekend As Boolean
Set currentRow = Cells(zz, 16)
isWeekend = (Weekday(checkDate) = 1 Or Weekday(checkDate) = 7) ' 判?日期是否?星期日或星期六

If isWeekend Then

Else
MsgBox "日期 " & checkDate & " 不是周末。"
End If

Range("R" & zz) = Format(Range("P" & zz).Value, "mm/dd") & " " & Range("Q" & zz).Value

Next zz

十分感謝!!!
小揮 wrote:
各位大大 好先請教如...(恕刪)

貼個Excel表格讓大家看看你的表長什麼樣比較好幫你,如果只是要判定isWeekend成立則插入一列,你可以錄巨集插入一列然後看代碼,代碼再稍微改一下應該可以完成你的需求。
小揮 wrote:
各位大大 好先請教如...(恕刪)

Try it.
Sub test()
Dim isWeekend As Boolean
Dim zz As Integer
zz = 2
While Cells(zz, 16).Value <> ""
checkDate = Cells(zz, 16).Value
isWeekend = (Weekday(checkDate) = 1 Or Weekday(checkDate) = 7)
If isWeekend Then
If checkDate <> Cells(zz + 1, 16).Value Or Cells(zz + 1, 16).Value = "" Then
Rows(zz + 1 & ":" & zz + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(zz + 1, 16).Value = Cells(zz, 16).Value
Cells(zz + 1, 17).Value = "MS"
Range("R" & zz) = Format(Range("P" & zz).Value, "mm/dd") & " " & Range("Q" & zz).Value
zz = zz + 1
End If
Else
MsgBox "日期 " & checkDate & " 不是周末。"
End If
Range("R" & zz) = Format(Range("P" & zz).Value, "mm/dd") & " " & Range("Q" & zz).Value
zz = zz + 1
Wend
End Sub


小小尉 wrote:
Try it.Sub...(恕刪)


謝謝大大提供code

我自己也是用錄製巨集插入下一列+for迴圈
後來也是有達成目的

只是code比較不同 (當初就是沒有zz=zz+1,回傳的全部變成範例上的12/30)

我是先去判定特定欄位有幾筆資料(P欄)
全部弄完後發現會有幾天日期重複,我再刪除重複項得到我要的



v = Application.CountIf(Range("P:P"), "<>")

For zz = 1 To v + 3


checkDate = Cells(zz, 16).Value

Dim isWeekend As Boolean
isWeekend = (Weekday(checkDate) = 1 Or Weekday(checkDate) = 7) ' 判?日期是否?星期日或星期六

If isWeekend Then

Cells(zz + 1, 16).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(zz + 1, 17).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(zz + 1, 16) = Cells(zz, 16)
Cells(zz + 1, 17) = "MS"
zz = zz + 1

Else
MsgBox checkDate & "不是周末"
End If

Next zz

XX = Application.CountIf(Range("P:P"), "<>")
For zz = 1 To XX
Range("R" & zz) = Format(Range("P" & zz).Value, "m/dd") & " " & Range("Q" & zz).Value
Next zz
小揮 wrote:
==>目前已判斷12/30為周末、5/14為周末
==>需要在12/30、5/14下方插入一列 預設為同日期,另一欄預設值為MS


您的資料是不是打錯?

snare wrote:
您的資料是不是打錯?...(恕刪)


大大 您好

資料應該是沒有錯的

主要是12/30是假日 (假日只有DS/NS 無MS 但為了運作判斷是假日時,插入12/30,MS這樣)

現行狀況判定是假日後,會在DS、NS中間插入,變成

12/30 DS 次數
12/30 MS 0
12/30 NS 次數

不然一般情況下(非假日),資料正常就是會是DS/MS/NS這樣情況

現有數值是人員Key的部分。
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!