返回列表 上一主題 發帖

公式與基本技巧演練

公式與基本技巧演練

下了個資料檔,可拿來練習公式與基本技巧。適合新手練習用!
綜合演練.rar (90.29 KB)

感謝你的分享

TOP

本帖最後由 ky2599y 於 2011-8-16 21:19 編輯

樞紐→直接到樞紐表裡去設儲存格格式

456.JPG (123.94 KB)

456.JPG

Kenny

TOP

樞紐→將格子複製到右邊→輸入公式
    IF(C5<65,"C",IF(C5<85,"B","A"))

123.JPG (241.39 KB)

123.JPG

Kenny

TOP

經大指正,知道自己錯在了哪裡

本帖最後由 zeny 於 2011-8-14 13:26 編輯
回復  zeny
這些儲存格內容都變成了日期
這是你使用bb的緣故
自訂格式改成
[>=85]!A;[>=65]!B;C
Hsieh 發表於 2011-8-12 22:08



   是的,是的,我沒有注意到大大之前寫的
B原則上也算保留字
若輸入B,EXCEL會自動改成bb
顯示數值以1900年為43起算的年度
1900年日期顯示成43
1901年日期顯示成44
以此類推
加上驚嘆號!或反斜線\或用雙引號""
都代表使用字元
只是反斜線會被EXCEL自動轉成驚嘆號

現在已經成功了。
真是越學,越覺得自己淺薄
謝謝大大。
pivotetable和vlookup綜合應用.rar (11.21 KB)
我喜欢 excel

TOP

回復 20# zeny
這些儲存格內容都變成了日期
這是你使用bb的緣故
自訂格式改成
[>=85]!A;[>=65]!B;C
學海無涯_不恥下問

TOP

很惱人, 有個43分的格式自定,就是轉換不成C

pivotetable和vlookup綜合應用.rar (10.85 KB)

很惱人, 有個43分的格式自定,就是轉換不成C
我喜欢 excel

TOP

回復 40# Hsieh
多謝H大指點

我很喜歡pivot table那個解決辦法,快捷得很(還有是怎樣錄製影片的?)
80 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 Hsieh 於 2011-3-17 08:48 編輯

回復 39# FAlonso
這篇重點在於基本技巧演練,並不鼓勵使用VBA或函數解題
既然兄台使用VBA來做,而且您也提到一些VBA使用上的困擾
底下程式碼供您參考看看
您會發生錯誤原因可能發生在
dictionary物件加入項目的方法
您使用了add方法來加入項目
dictionary物件有一個特性,就是索引值不能重覆
當add方法加入索引時,若該索引值已經存在就會產生錯誤
避免此情況發生,可用exists方法先判斷索引值是否存在,然後再決定是否加入
在您的流程中dictionary物件是用不到的
而底下程式碼利用的方法是直接指定索引值對應的值
這樣,值會改變,但不會有重複索引疑慮
再則您提到速度問題
加快速度的方法因個案各有不同
以本題為例,首先是將資料範圍以陣列型態讀取
直接靠記憶體讀寫,會比一格一格的讀寫快很多
在來是當你要指定儲存格時,要儘量減少select的使用
直接指定欄列位也會使速度加快
減少不必要的循環與動作都是加速的方法
您可以自己試試看
  1. Sub Ex()
  2. Dim d As Object, d1 As Object, d2 As Object, Ar(), i&, A As Range, C As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. Set d2 = CreateObject("Scripting.Dictionary")
  6. d2("考生號") = "姓名"
  7. Ar = Range([A1], [A65536].End(xlUp).Offset(, 3))
  8. For i = 2 To UBound(Ar, 1)
  9.    d(Ar(i, 1) & Ar(i, 3)) = IIf(Ar(i, 4) < 65, "C", IIf(Ar(i, 4) < 85, "B", "A"))
  10.    d1(Ar(i, 3)) = ""
  11.    d2("'" & Ar(i, 1)) = Ar(i, 2)
  12. Next
  13. [G:Q].ClearContents
  14. Application.ScreenUpdating = False
  15. [G1].Resize(d2.Count, 1) = Application.Transpose(d2.keys)
  16. [H1].Resize(d2.Count, 1) = Application.Transpose(d2.items)
  17. [I1].Resize(, d1.Count) = d1.keys
  18. For Each A In Range([I1], [I1].End(xlToRight))
  19.    For Each C In Range([G2], [G65536].End(xlUp))
  20.       Cells(C.Row, A.Column) = d(C & A)
  21.    Next
  22. Next
  23. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 1# oobird
做了VBA程式,不過等候時間較長,有時程式會自動中斷+有顯示錯誤,所以不要濫用VBA
  1. Option Explicit
  2. Sub table()
  3. Dim classnumber As Object, mycell As Range
  4. Set classnumber = CreateObject("scripting.dictionary")

  5. With Range("S1")
  6. .Value = "考生號"
  7. .Offset(, 1).Value = "姓名"
  8. .Offset(, 2).Value = "化學"
  9. .Offset(, 3).Value = "外語"
  10. .Offset(, 4).Value = "生物"
  11. .Offset(, 5).Value = "地理"
  12. .Offset(, 6).Value = "物理"
  13. .Offset(, 7).Value = "政治"
  14. .Offset(, 8).Value = "語文"
  15. .Offset(, 9).Value = "數學"
  16. .Offset(, 10).Value = "歷史"
  17. End With

  18. Range("S2").Activate

  19. For Each mycell In Sheet1.Range([a2], [a65536].End(xlUp))
  20. If classnumber.exists(mycell.Value) Then
  21. Else
  22. classnumber.Add mycell.Value, mycell.Value
  23. ActiveCell.Value = mycell.Value
  24. ActiveCell.Offset(, 1).Value = mycell.Offset(, 1).Value
  25. ActiveCell.Offset(, 2).Value = mycell.Offset(, 3).Value
  26. ActiveCell.Offset(, 3).Value = mycell.Offset(1, 3).Value
  27. ActiveCell.Offset(, 4).Value = mycell.Offset(2, 3).Value
  28. ActiveCell.Offset(, 5).Value = mycell.Offset(3, 3).Value
  29. ActiveCell.Offset(, 6).Value = mycell.Offset(4, 3).Value
  30. ActiveCell.Offset(, 7).Value = mycell.Offset(5, 3).Value
  31. ActiveCell.Offset(, 8).Value = mycell.Offset(6, 3).Value
  32. ActiveCell.Offset(, 9).Value = mycell.Offset(7, 3).Value
  33. ActiveCell.Offset(, 10).Value = mycell.Offset(8, 3).Value
  34. ActiveCell.Offset(1).Activate
  35. End If
  36. Next

  37. For Each mycell In Range("U2:Ac643")
  38. If mycell.Value >= 85 Then
  39. mycell.Value = "A"
  40. ElseIf mycell.Value >= 65 And mycell.Value < 85 Then
  41. mycell.Value = "B"
  42. ElseIf mycell.Value < 65 Then
  43. mycell.Value = "C"
  44. End If
  45. Next

  46. Columns("S").NumberFormat = "0"
  47. Columns("S").AutoFit

  48. Set classnumber = Nothing

  49. End Sub
複製代碼
不過呢,可否降低下載附件的門檻,看那麼多無意義的回帖
80 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 【停滯不前,終無所得】人都迷於尋找奇蹟,因而停滯不前;縱使時間再多、路再長,也了無用處,終無所得。
返回列表 上一主題