返回列表 上一主題 發帖

程式如何寫比較順暢快速

回復 1# myleoyes
試試看
  1. Sub 練習()
  2.     Dim Rng As Range
  3.     With Sheets("練習")
  4.         .[AG3] = "=AB2-SUM(AD2/2,AE2,AA3,AC3/2)": .[AI3] = "=AG3/(AA3+AC3/2)"
  5.         Set Rng = Sheets("練習").Range("V" & Rows.Count).End(xlUp)(2, 1)
  6.         Rng = Date
  7.         ZZ = Application.InputBox("請輸入數字", "練習資料", Type:=1)
  8.         If ZZ <= 0 Then Rng = "": .[AG3,AI3] = "": End
  9.         With Rng.Cells(1, 2)    '由Rng的欄位算起第2欄同一列的儲存格 = W欄
  10.             .Value = ZZ
  11.             .Font.ColorIndex = 7
  12.         End With
  13. ag:
  14.         ZZ = Application.InputBox("請輸入數字", "數據資料", Type:=1)
  15.         If ZZ <= 0 Then GoTo ag
  16.         With Rng.Cells(1, 3)   '由Rng的欄位算起第3欄同一列的儲存格=X欄
  17.             .Value = ZZ
  18.             .Font.ColorIndex = 7
  19.         End With
  20.         With Rng.Cells(1, 5)    '由Rng的欄位算起第4欄同一列的儲存格=Z欄
  21.             For Each e In Array(1, 2, 4, 8, 10) '陣列: 由Z欄算起的欄
  22.                 With .Cells(1, e)               '由Z欄算起的欄同一列的儲存格
  23.                     .FormulaR1C1 = Cells(3, .Column).FormulaR1C1
  24.                     If e = 4 And .Value <= 150 Then
  25.                         .Value = 200
  26.                         .Font.ColorIndex = 7
  27.                     ElseIf e = 8 Then
  28.                         .Font.ColorIndex = 10
  29.                     ElseIf e = 10 And .Value < 0 Then
  30.                         .Font.ColorIndex = 3
  31.                     End If
  32.                 End With
  33.             Next
  34.         End With
  35.         .Columns("V:AI").EntireColumn.AutoFit
  36.         '如活頁簿設定計算 :方式為手動,那才須重算此工作表.
  37.        .Calculate  '重算此工作表.
  38.        '此重算 也許是你認為執行起來覺得很慢 的主因
  39.      End With
  40.      ActiveWorkbook.Save
  41. End Sub
複製代碼

TOP

回復 3# myleoyes
  1. If ActiveCell.Comment.Text Like "*配股*" Then ActiveCell.Font.ColorIndex = 5
複製代碼

TOP

回復 5# myleoyes
用R1C1 表示法
"=IF(ISNUMBER(MATCH(A1,EDATE(RC[-1],{0,6,12})-....,-"

TOP

回復 7# myleoyes
用R1C1 表示法"=IF(ISNUMBER(MATCH(A1,EDATE(RC[-1],{0,6,12})-....,-"

A1 沒改到
"=IF(ISNUMBER(MATCH(R1C1,EDATE(RC[-1],{0,6,12})-....,-"[/quote]

TOP

回復 10# c_c_lai
看看工作表它的公式
  1. Sub Ex()
  2.     [B5] = "=R[1]C[1]"
  3.     [B6] = "=C6"
  4.     [B7] = "=R[-1]C[1]"
  5.     [B8] = "=R6C3"
  6.     [B9] = "=$C$6"
  7. End Sub
複製代碼

TOP

回復 13# myleoyes
試試看
  1. Sub 登入()
  2.     Dim ZZ As Range
  3.     On Error GoTo er:
  4.     With Sheets("學習")
  5.         Do
  6.             Set ZZ = Application.InputBox("請在B欄中選取資料", "資料登入", Type:=8)
  7.             'InputBox 設為Range ->    按 取消 會有錯誤
  8.             If ZZ(1).Column <> 2 Then xMsg = "選擇必需是 ""B"" 欄"
  9.         Loop Until ZZ(1).Column = 2               'B欄
  10.         With .Range("N" & Rows.Count).End(xlUp)
  11.             .Cells(2, 1) = ZZ(1)                 '預防ZZ選多列,指定為ZZ的CELLS(1)
  12.             .Cells(2, 2) = ZZ.Cells(1, 2)
  13.         End With
  14.     End With
  15. er:
  16.     Err.Clear
  17.     On Error GoTo 0
  18. End Sub
複製代碼

TOP

回復 15# myleoyes
程式可以登入但無法寫入(也就是說沒有自動)
   小弟修改如下只是覺得提示對話框是可以省略

要寫入什麼,這概念我一點都不了解,要如何省略對話框?

TOP

回復 17# myleoyes
你的想法是 :
登入可以指定多個B欄的數值,後執行寫入程式
  1. Sub Ex()
  2.     Dim Rng As Range, ZZ As Range, A As String, Msg As Boolean
  3.     With Sheets("學習")
  4.         Set Rng = .Range("b3", .[b3].End(xlDown))                  'B欄的範圍
  5.         For Each ZZ In Selection                                   '工作表:所選取儲存格的範圍
  6.             If Not Application.Intersect(Rng, ZZ) Is Nothing Then  '判斷此物件代表兩個或多個範圍重疊的矩形範圍
  7.                 Msg = True
  8.                 A = IIf(A = "", ZZ.Address(0, 0), A & "," & ZZ.Address(0, 0))
  9.             End If
  10.         Next
  11.         If Msg = False Then
  12.             MsgBox "沒有選擇到B欄的數值...": Exit Sub
  13.         Else
  14.             If MsgBox("所選取資料 " & A & Chr(10) & "確定 寫入 ...", vbYesNo) = vbNo Then Exit Sub
  15.         End If
  16.         For Each ZZ In Selection
  17.             If Not Application.Intersect(Rng, ZZ) Is Nothing Then
  18.                 With .Range("N" & Rows.Count).End(xlUp)
  19.                     .Cells(2, 1) = ZZ
  20.                     .Cells(2, 2) = ZZ.Cells(1, 2)
  21.                 End With
  22.             End If
  23.         Next
  24.     End With
  25.     寫入
  26. End Sub
複製代碼

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題