Board logo

標題: 一個星期天的問題 [打印本頁]

作者: 周大偉    時間: 2011-6-16 22:55     標題: 一個星期天的問題

大大們, 好
小弟有一難題, 想了數天還是沒想到用何函數, 或因本沒有其函數, 故衷心請教大大們, 附件中有說明, 謝謝!!
[attach]6683[/attach]
作者: Hsieh    時間: 2011-6-16 23:08

無法得知年分
作者: 周大偉    時間: 2011-6-16 23:26

本帖最後由 周大偉 於 2011-6-16 23:27 編輯

hsieh大大好,
謝謝回應, 是否一定需要年份, 假若小弟於AL,1填入如2011/1, 這代表2011年1月, 這就是否可行, 附圖,
若日期參考年份自行顯示, 1-31號就是否相同, 因想起月份也有月大月小及2月份28天等問題,
[attach]6684[/attach]
作者: Hsieh    時間: 2011-6-16 23:38

本帖最後由 Hsieh 於 2011-6-16 23:48 編輯

回復 3# 周大偉

[attach]6686[/attach]
作者: 周大偉    時間: 2011-6-16 23:54

謝謝hsieh大大,
說真的, 小弟也曾想過if函數, 但功力太淺, 去到hsieh大大這個級數實太勁, 因小弟如何設想, 也沒法想到這樣運用, 勁, 勁, 勁.. 祝快樂.. 謝謝!!
作者: 317    時間: 2011-6-17 15:16

hsieh前輩, 安好
利用名稱用於函數, 小妹也獲益良多, 同時亦有問題請教, 每月有月大月小, 星期天按年份及月份變更,  如果該月是月小, 第二列多出的如31號, 或2月份29及30號可否自行消失, 若月大, 尾數則顯示,,,如31...
作者: 周大偉    時間: 2011-6-19 08:40

Hsieh版主大大好,
得大大協助解決星期天函數問題, 實感激萬分,
現時因小弟需要處理一堆由1950年至今的舊檔案入機, 工作表太多, 故希望大大能再度協助表中日期問題, 附件, 先行謝謝!!
[attach]6699[/attach]
作者: Hsieh    時間: 2011-6-19 09:40

本帖最後由 Hsieh 於 2011-6-19 09:46 編輯

回復 6# 317


以4#檔案為例
原來第2列是由使用者自行輸入
改用公式
G2=IF(MONTH(DATE($AL$1,y,COLUMN(A1)))<>--y,"",DAY(DATE($AL$1,y,COLUMN(A1))))
G3=IF(G2="","",CHOOSE(WEEKDAY(--($AL$1&"/"&SUBSTITUTE(MID(x,FIND("]",x)+1,3),"月","")&"/1")+G2-1,2),"一","二","三","四","五","六","日"))
向右複製
因為工作表名稱是月份,所以使用公共定義取出工作表名稱的數字部分當作月份,這樣更改工作表名稱與年份的數值就能正確顯示日期
[attach]6702[/attach]
作者: Hsieh    時間: 2011-6-19 10:02

回復 7# 周大偉
看不懂你要如何整理多年資料
看看8#檔案是否你能應用,再把你的需求講清楚
作者: 周大偉    時間: 2011-6-19 12:41

回復 9# Hsieh

謝謝, 這正是小弟所需要, 其實整理的檔案, 是把公司多年來每月一些記錄重新整理, 而檔案第二列第第三列是日期及星期天,
假若日期及星期天能自行變更為對應, 便節省了很多時間, 故請教大大們, 得版主大大協助, 衷心感謝.....
作者: 317    時間: 2011-6-19 15:47

回復 8# Hsieh

前輩, 安好
就G3=IF(G2="","",CHOOSE(WEEKDAY(--($AL$1&"/"&SUBSTITUTE(MID(x,FIND("]",x)+1,3),"月","")&"/1")+G2-1,2),"一","二","三","四","五","六","日"))這條函數, 前輩可否簡描述制作流程,
因我正在鑽研中, 一些地方實有不明, 如("]",x), 就代表什麼, 小妹實想從中吸收多少, 謝過前輩..
作者: Hsieh    時間: 2011-6-19 17:07

回復 11# 317


    公式中的x是使用cell函數得到的filename
你在其它空白處寫入公式=x就知道x內容是什麼
看中括號內代表的是參照中的什麼位置就知道find的作用了
作者: 317    時間: 2011-6-19 17:37

謝謝前輩解答, 我會用心去鑽研, 再三謝過, 祝健康,快樂!!
作者: 周大偉    時間: 2011-6-21 20:14

Hsieh版主大大好,
先謝過大大給予解決一星期天的問題, 而大大給予的函數的確很勁, 但小弟發現一問題, 假若我復製函數貼到其它檔案, 便會彈出提示訊息,附圖, 如何可把這麼好的函數復製到其它檔案運用, 請大大教導..感恩..謝謝!!

[attach]6730[/attach]
作者: Hsieh    時間: 2011-6-21 23:02

回復 14# 周大偉


    巨集公式?
我的方法沒有用到巨集阿
應該是定義名稱的問題
你要把定義名稱在新活頁簿中建立
並且該檔案已經儲存
至於該訊息我就沒遇過不知是為何產生的
作者: 317    時間: 2011-6-26 17:53

Hsieh前輩, 好
大大的星期天函數, 我研究两天, 若沒有留意到定義名稱, 真的是沒法完成, 我亦親自動手寫入一個新的檔案, 先行設定3個定義名稱, 再從資料編輯列寫入公式, 成功了, 在這條函數學了及變通了, 謝過大大,
大大, ,若把這函數轉成vba程式, 放在模組中, 用家設一按鈕運動就是否可以..謝謝...
作者: 317    時間: 2011-6-29 19:07

Hsieh好
上次的提問, 應是表達不清色, 故重新整理問題發問, 附檔有明細說明, 先行謝過...

[attach]6874[/attach]
作者: Hsieh    時間: 2011-6-29 19:35

回復 17# 317
  1. Sub Ex()
  2. Dim Ar()
  3.    y = [AL1]
  4.    m = Val(ActiveSheet.Name)
  5.    If m < 1 Or m > 12 Then MsgBox "工作表名稱需要符合1~12月": Exit Sub
  6.    d = 1
  7.    mydate = DateSerial(y, m, d)
  8.    Do Until Month(mydate) <> m
  9.      ReDim Preserve Ar(s)
  10.      k = Format(mydate, "aaa")
  11.      Ar(s) = Array(d, Format(mydate, "aaa"))
  12.      s = s + 1
  13.      d = d + 1
  14.      mydate = DateSerial(y, m, d)
  15.    Loop
  16.    [G2:AK3] = ""
  17.    [G2].Resize(2, s) = Application.Transpose(Ar)
  18. End Sub
複製代碼

作者: 317    時間: 2011-6-29 21:01

回復 18# Hsieh

謝謝大大回應,
已試過, 而且無須用上名稱, 快捷很多, 再謝謝,
大大, 在顯示星期天中, 傳回是星期一, 星期二, 可否把星期這两字刪除, 如星期一, 顯示一, 如星期二, 顯示二, 感恩..
作者: Hsieh    時間: 2011-6-29 23:05

回復 19# 317


         Ar(s) = Array(d, Replace(Format(mydate, "aaa"), "週", ""))
作者: 317    時間: 2011-6-29 23:10

b]回復 18# Hsieh

大大好,
上文中恐表達不好, 現附上圖片, 可否把把程式改成圖1星期一星期二類轉換成下圖中單一數字, 一,二,三,四,五,六,日,謝謝, 祝快樂..

[attach]6878[/attach][attach]6878[/attach]
作者: 317    時間: 2011-6-29 23:17

本帖最後由 317 於 2011-6-29 23:20 編輯

Hsieh大大, 安好..
已把程式轉成 Ar(s) = Array(d, Replace(Format(mydate, "aaa"), "週", "")), 但還是不成功, 原因何解..請大大協助

Sub Ex()

Dim Ar()

   y = [Am1]

   m = Val(ActiveSheet.Name)

   If m < 1 Or m > 12 Then MsgBox "工作表名稱需要符合1~12月": Exit Sub

   d = 1

   mydate = DateSerial(y, m, d)

   Do Until Month(mydate) <> m

     ReDim Preserve Ar(s)

     k = Format(mydate, "aaa")

     Ar(s) = Array(d, Replace(Format(mydate, "aaa"), "週", ""))

     s = s + 1

     d = d + 1

     mydate = DateSerial(y, m, d)

   Loop

   [G2:AK3] = ""

   [G2].Resize(2, s) = Application.Transpose(Ar)

End Sub
作者: Hsieh    時間: 2011-6-29 23:33     標題:

本帖最後由 Hsieh 於 2011-6-30 08:09 編輯

回復 22# 317

可能是版本問題
Format的格式用"aaa"在我的電腦上是顯示"週日"
如果你的電腦上顯示是"星期日"
那就將Replace的字串改成"星期"即可
Ar(s) = Array(d, Replace(Format(mydate, "aaa"), "星期", ""))

Ar(s) = Array(d, Right(Format(mydate, "aaa"),1))
作者: 317    時間: 2011-6-30 01:28

本帖最後由 317 於 2011-6-30 07:25 編輯

真是大大所說, 版本問題,
在此謝過大大, 祝願快樂, 感恩..
作者: 周大偉    時間: 2011-10-8 22:45

Hsieh版主大大,
先行謝過早前於這帖子的回覆, 有一疑問, vba程式中可否變為附件中, 按下按鈕, 同時把12張月份工作表星期及日期變更, 如可以的話, 的確節省了很多時間, 謝謝!!
[attach]8203[/attach]
作者: Hsieh    時間: 2011-10-8 23:38

回復 25# 周大偉
  1. Sub Ex()
  2. Dim y$, Ar(), w$, j%, i%
  3. y = InputBox("輸入年分", , Year(Date))
  4. If y = "" Then Exit Sub
  5. For i = 1 To 12
  6.    d = Day(DateAdd("m", 1, DateSerial(CInt(y), i, 1)) - 1)
  7.    ReDim Preserve Ar(1 To 2, 1 To d)
  8.    For j = 1 To d
  9.    w = Replace(Format(Weekday(DateSerial(CInt(y), i, j), 2), "aaa"), "週", "")
  10.       Ar(1, j) = j
  11.       Ar(2, j) = w
  12.    Next
  13.    Sheets(i & "月").[G2:AK3] = ""
  14.    Sheets(i & "月").[G2].Resize(2, d) = Ar
  15.    Erase Ar
  16. Next
  17. End Sub
複製代碼

作者: oobird    時間: 2011-10-8 23:55

  1. Sub Ex()
  2.     Dim y%, m%, n%, d%
  3.     y = [am1]
  4.     For m = 1 To 12
  5.         With Sheets(m & "月")
  6.             .[g2:ak3] = ""
  7.             n = Day(DateSerial(y, m + 1, 1) - 1)
  8.             ReDim arr(1 To 2, 1 To n)
  9.             For d = 1 To n
  10.                 arr(1, d) = d
  11.                 arr(2, d) = Right(Application.Text(DateSerial(y, m, d), "aaa"), 1)
  12.             Next
  13.             .[g2].Resize(2, n) = arr
  14.         End With
  15.     Next
  16. End Sub
複製代碼
[attach]8204[/attach]
作者: 周大偉    時間: 2011-10-9 09:44

hsieh大大 oobord大大,
衷心謝過两位版主大大回應,  祝願健康快樂...




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)