※ 引述《conky (大鼻)》之銘言:
: ※ 引述《dom (gouf)》之銘言:
: 我不會vba
: 所以實際上我不知道怎麼作
: 但是以程式語言而言,精神都是相同的
: 我底下說的都是做法
: : 1.我希望把某工作表的名稱設為某儲存格的數值,該儲存格的資料型式是日期資料,
: : 如2000年1月1日。語法大致如下:
: : y = CStr(Worksheets(1).Cells(1, 3).Value)
: : Worksheets(3).Name = y
: : 我知道excel的工作表名稱內不能含"/"符號,所以日期儲存的格式特別用"2000年
: : 1月1日"而非"2000/01/01",但是vba在執行時似乎還是將日期資料視作"2000/01/01"
: : 的格式,因此說我語法錯誤。那我要怎麼樣才能把工作表名稱命名為某天的日期?
: : (手動key in除外)
: 這個就是去偵測字元
: 將該格資料作一個一個字元偵測
: 遇到"/"便代換成其他的
再笨一點的
d = CDate(Worksheets(1).Cells(1, 3).Value)
s = Year(d) & "年" & Month(d) & "月" & Day(d) & "日"
Worksheets(3).Name = s
: : 2.要怎麼樣才能讓vba在執行到一半時先將目前的活頁簿存檔?因為程式可能要跑
: : 很久,外一中途當機,沒中途存檔的話豈不欲哭無淚?
Worksheets(1).Parent.Save
: 可以在迴圈內作另存新檔即可
: 放哪一層就視個人需要(當然是越內層越多次)
: 資料多時根本沒辦法一次讀進記憶體內
: 本來就要用暫存檔
: : 3.我有一些股票交易資料的格式如下:
: : 日期 代號
: : 2000/01/01 1000
: : 2000/01/01 1001
: : 2000/01/01 3002
: : 2000/01/02 1000
: : 2000/01/02 2303
: : 2000/01/03 1000
: : 2000/01/03 2323
: : 2000/01/04 2035
: : .
: : .
: : .
: : 我希望自動把每一天的資料放到不同工作表,例如2000/01/01的交易資料放到工作表
: : "2000年1月1日"、2000/01/02的交易資料放到工作表"2000年1月2日",以此類推。
: : 有沒有不用寫vba,靠excel內建的功能就可完成的方法?(可能有人會說把資料用日期
: : 篩選後再一天一天貼上,問題是我的資料有很很多年,每年有兩百多天,一天一天貼
: : 會貼到死)。如果要靠vba才能完成,有沒有比較簡單的寫法?
: 雖然沒用過vba,我只會錄巨集而已
: 這個功能用錄製巨集再修改的方式
: 應該是可以作到的
: : 4.在vba裡面,要把一張工作表某範圍的內容,貼到另一張工作表去,有沒有比較快的
: : 寫法?如果是要複製貼上固定的範圍,我知道可以用以下的語法達成:
: : Worksheets("Sheet1").Range("A1:D4").Copy _
: : destination:=Worksheets("Sheet2").Range("E5")
: : 但是我要複製的範圍是不固定的,例如說我要複製的是第x列第一格到第y列第5行的
: : 範圍,其中x,y均為變數,用vba的語法的話大概像這樣:
: : Worksheets(1).Range("Cells(x,1):Cells(y,5)").Copy _
: : Destination:=Worksheets(2).Range("E5")
: : 不過上面的語法無法執行,似乎是因為range裡面不能以cells當引數,那我該怎麼辦?
: 不知道cell是指什麼
: 就字面上來看應該是用來指定儲存格用
: 所以你用錯了
: 這應該是傳回該格之內容之類的
: 從語法來看
: range內吃的是字串
: 所以依你的想法,應該是Range("x1:y5") //先說好實作上不可能這樣寫
: x和y是字元變數 //這是想法
: 不過我會建議不要用x和y當變數名稱
: 因為excel儲存格也有X和Y列,容易混淆 //如Range("X1:Y5")
: 實作上因為已經在""內部了
: 所以"x1:y5"會被當成"X1:Y5來執行 //看函式定義啦,也可能error
: 你要自設一個字串變數s
: 將s=x1:y5 //不要這樣寫,是用vba的函式把字串重組
: 再作Range(s) //也許還要做字串型態的轉換
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.239.107