返回列表 上一主題 發帖

公式與基本技巧演練

B原則上也算保留字
若輸入B,EXCEL會自動改成bb
顯示數值以1900年為43起算的年度
1900年日期顯示成43
1901年日期顯示成44
以此類推
加上驚嘆號!或反斜線\或用雙引號""
都代表使用字元
只是反斜線會被EXCEL自動轉成驚嘆號
學海無涯_不恥下問

TOP

把我做的過程PO上來。
x.gif
1

評分人數

    • gong: GOOD,學習中金錢 + 2

TOP

本帖最後由 gong 於 2010-12-3 22:00 編輯

本也想用輔助欄,但無法達成直接取得值
另種方式也提供參考

1.GIF (20.39 KB)

1.GIF

2.GIF (19.39 KB)

2.GIF

3.GIF (40.81 KB)

3.GIF

4.GIF (15.87 KB)

4.GIF

5.GIF (50.94 KB)

5.GIF

6.GIF (30.7 KB)

6.GIF

7.GIF (15.74 KB)

7.GIF

1

評分人數

    • oobird: 不錯,又是另一個重要技巧。金錢 + 2
知之為知之,不知為不知,誠實也!

TOP

回復 18# gong


    GONG大:
我在第三張圖要改成第四張圖的時候要輸入 =E$5 的步驟時
出現,"您無法編輯此頁、此欄、此列中的欄位儲存格",這樣的錯誤訊息,
不知道GONG大是如何辦到的
沒事就來逛逛

TOP

=E$5
如果可以輸入
不是按"ENTER"

要按"CTRL+ENTER"
知之為知之,不知為不知,誠實也!

TOP

嗯~又學到了一個特殊的用法,
受教了~
沒事就來逛逛

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

本帖最後由 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

回復 40# Hsieh
多謝H大指點

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

TOP

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

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

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

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題