標題:
[發問]
請問這個巨集如何改進
[打印本頁]
作者:
pcwh3
時間:
2012-3-2 13:05
標題:
請問這個巨集如何改進
問題如附件,請各大大幫忙一下.
[attach]9808[/attach]
作者:
register313
時間:
2012-3-2 14:29
回復
1#
pcwh3
Sub XX()
Set Rng = Union(Range("B7:Q7"), Range("B16:Q16"))
For Each R In Rng
If R = "" Then
R.Offset(1, 0) = ""
Else
D = Weekday([A6] + R - 1, 2)
R.Offset(1, 0) = Switch(D = 1, "MON", D = 2, "THU", D = 3, "WED", D = 4, "THU", D = 5, "FRI", D = 6, "SAT", D = 7, "SUN")
If R.Offset(1, 0) = "MON" Then
R.Resize(9, 1).Interior.ColorIndex = 36
Else
R.Resize(9, 1).Interior.ColorIndex = xlNone
End If
End If
Next
End Sub
複製代碼
作者:
GBKEE
時間:
2012-3-2 16:10
回復
1#
pcwh3
Sub Ex()
Dim Rng(4) As Range, xi As Integer, E As Range
Set Rng(0) = Sheets("ABC").Range("A6") '日期
Set Rng(1) = Sheets("ABC").Range("B7:P7,B16:Q16") ' 各工作表 日期 範圍
Set Rng(2) = Sheets("XYZ").Range("B7:P7,B16:Q16")
Set Rng(3) = Sheets("123").Range("B7:P7,B15:Q15")
For xi = 1 To 3
For Each E In Rng(xi) '處理每一日期範圍
If Month(Rng(0) + E.Value - 1) = Month(Rng(0)) Then '檢查 月份
E.Offset(1) = UCase(Format(Rng(0) + E - 1, "ddd")) '參數 "ddd" 傳回 星期字母縮寫
E.Resize(IIf(xi = 3, 8, 9)).Interior.ColorIndex = IIf(E.Offset(1) = "MON", 36, xlNone)
Else
E.Offset(1).Resize(IIf(xi = 3, 8, 9)) = ""
E.Resize(IIf(xi = 3, 8, 9)).Interior.ColorIndex = xlNone
End If
Next
Next
End Sub
複製代碼
作者:
pcwh3
時間:
2012-3-2 16:56
回復
2#
register313
多謝幫忙.
要努力學一下UNION及RESIZE的功能.
作者:
register313
時間:
2012-3-2 17:01
回復
4#
pcwh3
我只有處理第一與第二工作表
GBKEE版大的作法才能處理三個工作表
作者:
pcwh3
時間:
2012-3-2 17:02
回復
3#
GBKEE
多謝指導.又多學一點了.
我用了2樓大大的程式, 進行改進, 再用GOSUB功能完成直接將各工作表資料一次性更新.
作者:
pcwh3
時間:
2012-3-2 17:06
回復
5#
register313
多謝各位. 兩組程式我都會按我的實際情況使用,再去比較.
現時我是先用您的程序, 再自行加上GOSUB功能去一次性完成全部工作表.
作者:
Hsieh
時間:
2012-3-2 18:58
回復
7#
pcwh3
Sub WHREPORT()
Dim Rng As Range, A As Range, i%, k%
With ActiveSheet
st = .[A6]
d = Day(DateAdd("M", 1, st) - 1)
Set Rng = .Range("A6", .[A65536].End(xlUp)).SpecialCells(xlCellTypeBlanks)
Rng.Areas(2)(1).Offset(, 1).Resize(2, 16) = ""
Rng.Areas(1)(1).Offset(, 1).Resize(, 15).FormulaArray = "=COLUMN(A1:O1)"
Rng.Areas(1)(1).Offset(1, 1).Resize(, 15).FormulaR1C1 = "=UPPER(TEXT(TEXT(R6C1,""yyyy/mm/"")&R[-1]C,""ddd""))"
Rng.Areas(1)(1).Offset(, 1).Resize(2, 15) = Rng.Areas(1)(1).Offset(, 1).Resize(2, 15).Value
Rng.Areas(2)(1).Offset(1, 1).Resize(, d - 15).FormulaR1C1 = "=UPPER(TEXT(TEXT(R6C1,""yyyy/mm/"")&R[-1]C,""ddd""))"
Rng.Areas(2)(1).Offset(, 1).Resize(, d - 15).FormulaArray = "=TRANSPOSE(ROW(A16:A" & d & "))"
Rng.Areas(2)(1).Offset(, 1).Resize(2, d - 15) = Rng.Areas(2)(1).Offset(, 1).Resize(2, d - 15).Value
k = Rng.Areas(2).Row - Rng.Areas(1).Row
For i = 1 To 2
For Each A In Rng.Areas(i)(1).Offset(1, 1).Resize(, 15)
If A = "MON" Then
A.Offset(-1, 0).Resize(k, 1).Interior.ColorIndex = 6
Else
A.Offset(-1, 0).Resize(k, 1).Interior.ColorIndex = -4142
End If
Next
Next
End With
End Sub
複製代碼
作者:
pcwh3
時間:
2012-3-3 11:40
回復
8#
Hsieh
多謝hsieh兄. 三個版本相比較, hsieh兄的程式稍為難明一點, 要時間去學習理解.
但足以證明, 條條大路通羅馬.
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)