Board logo

標題: [發問] EXCEL課程表結合行事曆呈現方式請求協助 [打印本頁]

作者: 520iopiop    時間: 2014-10-2 15:44     標題: EXCEL課程表結合行事曆呈現方式請求協助

本帖最後由 520iopiop 於 2014-10-2 15:46 編輯

大家好:
  小弟實在是迫於沒有更好的方式,所以想發問請求EXCEL高手的協助!!

前言:
  小弟本身有用ASP結合MS SQL寫出一個簡單的行事曆擊點進去後會有相關訊息,而現在主管告知能否已EXCEL方式製作類似的行事曆,目前需求大約如下

1.資料表.JPG內(為主管提供的資料),重點在於綠色框框(日期區間),紅色框框(星期),藍色框框(時段)為主要依據.

2.將黃色框框(學員編號)顯示在Sheet2內的周曆上

問題:
  1.如何將這三個依據去做該欄判斷呢??(我嘗試用INDEX與MATCH都無法呈現學員編號)
  2.會有當日 時段內有兩個以上的學員產生,我該如何去將他呈現呢?
請各位給些意見~謝謝!!
http://61.60.207.9:5000/fbsharing/72AQ8qsf
附件貼不上論壇,用私人空間擺放!!
作者: GBKEE    時間: 2014-10-3 16:09

回復 1# 520iopiop


   
附件貼不上論壇,用私人空間擺放!!
將檔案放在壓縮檔可上傳
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Sh(1 To 2) As Worksheet, Rng(1 To 3) As Range, CRng(1 To 2) As Range
  4.     Dim i As Integer, R As Integer, C As Integer
  5.     Set Sh(1) = Sheets("Sheet1")                                    '資料表
  6.     Set Sh(2) = Sheets("Sheet2")                                    '呈現表
  7.     Set Rng(1) = Sh(1).Range("i3:j3")                               '課程起日~課程迄日
  8.     Set Rng(2) = Sh(2).Range("c4")                                  '排程開始日期
  9.    
  10.     Set CRng(1) = Sh(1).Range("M2:S2")                              '上課星期
  11.     Set CRng(2) = Sh(2).Range("b5", Sh(2).Range("b5").End(xlDown))  '上課時間
  12.    
  13.     Rng(2).Offset(1).Resize(CRng(2).Rows.Count, 7) = ""             '清除呈現表
  14.    
  15.     Do While Rng(1).Cells(1) <> ""                                  '課程起日<>""
  16.         i = 0   '排程開始日期的欄位
  17.         Do While Rng(2).Offset(, i) >= Rng(1).Cells(1) And Rng(2).Offset(, i) <= Rng(1).Cells(2)
  18.             '迴圈的條件:呈現表的日期是[課程起日~課程迄日]的期間
  19.             C = CRng(1).Cells(Application.Match(Format(Rng(2).Offset(, i), "AAAA"), CRng(1), 0)).Column
  20.             'C = 資料表的上課星期中搜尋,排程日期的星期欄數
  21.             Set Rng(3) = Sh(1).Cells(Rng(1).Row, C)    '資料表的上課的時間區段
  22.             If Rng(3) <> "" Then
  23.                 R = Application.Match(Rng(3), CRng(2), 1)
  24.                 'R=列數:呈現表的上課的時間中所對應的,資料表的上課的時間
  25.                 Rng(2).Offset(R, i) = IIf(Rng(2).Offset(R, i) = "", Sh(1).Cells(Rng(1).Row, "B"), Rng(2).Offset(R, i) & vbLf & Sh(1).Cells(Rng(1).Row, "B"))
  26.                 '排程開始日期(R列, i欄)
  27.                 'Sh(1).Cells(Rng(1).Row, "B") =>資料表的學員編號
  28.             End If
  29.            i = i + 1  'Rng(2).Offset(, i)->排程開始日期的欄位,向右移動一欄
  30.         Loop
  31.         Set Rng(1) = Rng(1).Offset(1) '課程起日,向下移動一列
  32.     Loop
  33.     CRng(2).EntireRow.AutoFit
  34. End Sub
複製代碼

作者: 520iopiop    時間: 2014-10-6 13:30

回復 2# GBKEE

謝謝您的幫忙!!  我用您的語法在去做修正(因為判斷的依據又有變更)!!

但我大概了解了~:)   這裡真是高手雲集阿...




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