Board logo

標題: [發問] 如何記綠動態資料的儲存格 [打印本頁]

作者: kimo5566    時間: 2011-5-3 20:10     標題: 如何記綠動態資料的儲存格

可以請教一下如果 從早十點為例 每隔十分鐘記錄(從十點記錄到十點二十分) 項目一 項目二 的資料
感謝
附註:項目資料會隨時間經過而變動
sheet1                                                
時間        10:00:00           10:00:00       10:00:00      10:00:00               
名稱           甲                 乙             丙           丁               
項目一         10                       20                    30               40        
項目二          3                         4                     5                 6        
                                                
                                                
sheet2                                       (假設十點十分的值如下)          (假設十點二十分的值如下)
             10:00:00                            10:10:00                            10:20:00   
        項目一        項目二        項目一        項目二        項目一        項目二
甲        10             3                    20                 5                 40                  2
乙        20             4                    30                 6                 50                  3
丙        30             5                    40                 7                 60                  4
作者: GBKEE    時間: 2011-5-4 20:01

回復 1# kimo5566
請附上你的檔案
作者: kimo5566    時間: 2011-5-5 02:51

本帖最後由 Hsieh 於 2011-5-5 08:27 編輯

回復 2# GBKEE

板大已經
附上檔案
感謝
作者: GBKEE    時間: 2011-5-5 08:38

本帖最後由 GBKEE 於 2011-5-5 08:59 編輯

回復 3# kimo5566
請將 程式碼 貼於 一般模組內 存檔關閉後 再開啟檔案時自動執行Auto_Open的程序
  1. Option Explicit
  2. Sub Auto_Open()
  3.     Dim T As Date
  4.     T = Time                                       '現在時間
  5.     Sheets("Sheet2").UsedRange.Offset(, 1).Select
  6.     If T < #1:30:00 PM# Then Sheets("Sheet2").UsedRange.Offset(, 1).Clear
  7.     '早於開盤時間時清除舊有資料
  8.     If T < #9:00:00 AM# Then T = #9:00:00 AM# Else T = Now
  9.     '現在時間 早於開盤時間時      [設定的時間] 為 9點
  10.     '現在時間 晚於等於開盤時間時  [設定的時間]為 現在時間    '
  11.     Application.OnTime T, "Ex"          '於[設定的時間]執行 Ex 程序
  12. End Sub
  13. Sub Ex()
  14.     Dim Rng As Range, T As Date
  15.     T = Time
  16.     With Sheets("Sheet2")
  17.         Set Rng = .Cells(2, Columns.Count).End(xlToLeft).Offset(, 1)  '記錄下來的位置
  18.         Rng.Resize(, 2) = T
  19.         Rng.Offset(1).Resize(3, 2) = Sheets("Sheet1").Range("C1").Resize(3, 2).Value
  20.         Rng.Resize(, 2).EntireColumn.AutoFit
  21.     End With
  22.     If Minute(T) Mod 10 Then      '設定時間的分鐘 不是 10 ,20,30....
  23.        T = TimeSerial(Hour(T), Minute(T) + (10 - Minute(T) Mod 10), 0)
  24.            '調整設定時間的分鐘 是 10 ,20,30....
  25.         Rng.Resize(, 2).NumberFormatLocal = "h:mm:ss AM/PM"
  26.     Else
  27.         T = T + #12:10:00 AM#      '[設定時間]+10分鐘  10 ,20,30....
  28.     End If
  29.     If Time < #1:30:00 PM# Then    '於開盤時間時內
  30.         Application.OnTime T, "Ex"  '於[設定的時間]執行 Ex 程序
  31.     End If
  32. End Sub
複製代碼

作者: kimo5566    時間: 2011-5-5 21:42

回復 4# GBKEE

感謝板大已經可以run了

          請問一下  Cells(2====> 是指兩個項目變動寫2  若三項就寫3  請問這樣修正嗎 以下碼不維持不變
           Set Rng = .Cells(2, Columns.Count).End(xlToLeft).Offset(, 1)  '記錄下來的位置
        Rng.Resize(, 2) = T
            Rng.Offset(1).Resize(3, 2) = Sheets("Sheet1").Range("C1").Resize(3, 2).Value
          Rng.Resize(, 2).EntireColumn.AutoFit

       還有一個想問是一分鐘的話 是不是修成以下這樣就好了
   If Minute(T) Mod 1Then      
       T = TimeSerial(Hour(T), Minute(T) + (1 - Minute(T) Mod 1), 0)
作者: luhpro    時間: 2011-5-5 22:11

本帖最後由 luhpro 於 2011-5-5 22:14 編輯

回復 5# kimo5566

1.  Cells(2, ...  的 2 指的是第 2 列.
  語法 : Cells(列號, 欄號)
  Cells( 3, 2) = Range("B3")   <第 2 欄 = B>
  Cells(10, 5) = Range("E10") <第 5 欄 = E>
並非你所想的情形.

2. 你那個公式的結果會變成永遠不會觸發.
若要針對每一分鐘的情形應該是要對秒數 Mod 60 .

原先 xx:x9:59  <--- 分鐘數 Mod 10 結果為 9
        xx:x0:00  <--- 分鐘數 Mod 10 結果為 0
所以每 10 分鐘會變動一次

至於每分鐘都要跳過一次, 若依你的方式
  xx:00:01  <--- 分鐘數 Mod 1 結果為 0
   xx:00:02  <--- 分鐘數 Mod 1 結果為 0
   xx:01:xx  <--- 分鐘數 Mod 1 結果為 0 (餘同)
應該改成這樣
  xx:xx:59  <--- 秒鐘數 Mod 60 結果為 59
   xx:xx:00  <--- 秒鐘數 Mod 60 結果為 0
才對喔.
作者: GBKEE    時間: 2011-5-6 07:53

本帖最後由 GBKEE 於 2011-5-6 07:57 編輯

回復 5# kimo5566
**項目變動需修改 你要擴充為幾列幾欄的範圍**
With Sheets("Sheet2")
Set Rng = .Cells(2, Columns.Count).End(xlToLeft).Offset(, 1)  '寫下記錄的位置
          . => Sheets("Sheet2")
                .Cells(2, Columns.Count) => range("iv2")
                .End(xlToLeft)=>所在範圍向左移動直到有資料的位置
                .Offset(, 1)=>所在範圍向右移動 1欄

Rng.Resize(, 2) = T    => 寫下記錄的位置.擴充為1列2欄的範圍=T
Rng.Offset(1).Resize(3, 2) = Sheets("Sheet1").Range("C1").Resize(3, 2).Value
=>寫下記錄的位置.所在範圍向下移動 1列,擴充為3列2欄的範圍=Sheets("Sheet1").Range("C1").Resize(3, 2).Value

If Minute(T) Mod 10 Then      '設定時間的分鐘 不是 10 ,20,30....
這條件式為 如你是開盤後才打開檔案時 來調整時間的為每10 ,20,30....紀錄
要調整為每分鐘紀錄可修改如下
If Second(T) <> 0 Then
T = TimeSerial(Hour(T), Minute(T) + 1, 0)
Else      
  T = T + #12:01:00 AM#      '[設定時間]+1分鐘  
ENDIF
作者: kimo5566    時間: 2011-5-6 20:58

回復 7# GBKEE


    感謝板主細心解說
   讓我學到很多東西感謝
作者: kimo5566    時間: 2011-5-6 23:18

回復 7# GBKEE

板主想再請教裡面二個語法問題
第一是
            我把項目改成5列四欄的話         
Rng.Offset(1).Resize(5, 4) = Sheets("Sheet1").Range("C1").Resize(5, 4).Value

  Rng.Resize(, 2).EntireColumn.AutoFit   這句要去改變裡面的 Resize(, 2) 數字
還有這句表達什麼

  第二是
調整為每分鐘紀錄可修改如下
If Second(T) <> 0 Then
T = TimeSerial(Hour(T), Minute(T) + 1, 0)
之前有一句要刪掉嗎     Rng.Resize(, 2).NumberFormatLocal = "h:mm:ss AM/PM"
Else
  T = T + #12:01:00 AM#      '[設定時間]+1分鐘  
ENDIF
作者: GBKEE    時間: 2011-5-7 06:26

回復 9# kimo5566
對於vba 的方法,屬性你可多查看說明 ,如在程式碼中 選取 EntireColumn  按下F1 就可查看到說明.
EntireColumn.AutoFit  =>指定範圍的整個欄 .欄寬和列高調整為最適當的值
Rng.Resize(, 2).NumberFormatLocal = "h:mm:ss AM/PM"
是將範圍格式設為"h:mm:ss AM/PM",刪不刪皆可.
作者: kimo5566    時間: 2011-5-7 21:13

回復 10# GBKEE


    感謝板主耐心回答
   現在表格可以正常運算了




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