Board logo

標題: [發問] 請教如何用VBA在另一工作表計算出結果? [打印本頁]

作者: ji12345678    時間: 2013-10-3 01:36     標題: 請教如何用VBA在另一工作表計算出結果?

請教:
總表內為統計各班的生產量,
增減量工作表,為每個月的生產量增減值。
目前是以EXCEL函數處理。
因資料量龐大,請教一下大大,如何運用VBA,在另一個工作表產生增減量表,並產生每個格內的顏色格式設定。

工1班到工9班:增減量如果較上個月"增加"顏色為紅色,
                            增減量如果較上個月"減少"顏色為綠色。
工10班到工15班:增減量如果較上個月"增加"顏色為藍色,
                               增減量如果較上個月"減少"顏色為橘色。

[attach]16229[/attach]




[attach]16230[/attach]
作者: kimbal    時間: 2013-10-3 23:29

本帖最後由 kimbal 於 2013-10-3 23:34 編輯

回復 1# ji12345678
  1. Sub TEST()

  2.     Dim color As Long
  3.     Application.Calculation = xlCalculationManual
  4.     Application.ScreenUpdating = False
  5.    
  6.     Sheets("總表").Copy after:=Sheets(1)
  7.     With ActiveSheet.Range("B3")
  8.         Range(.Address, .End(xlToRight).End(xlDown)).ClearFormats
  9.         Range(.Address, .End(xlToRight).Offset(0, -1).End(xlDown)).Select
  10.         Selection.Copy
  11.         .Offset(0, 1).PasteSpecial operation:=xlPasteSpecialOperationSubtract
  12.         
  13.    
  14.         For Each Rng In Range(.Offset(0, 1), .End(xlToRight).End(xlDown))
  15.             color = 0
  16.             If Rng.Row >= 12 And Rng.Row <= 17 Then
  17.                 If Rng.Value > 0 Then
  18.                     color = 15773696
  19.                 ElseIf Rng.Value < 0 Then
  20.                     color = 52479
  21.                 End If
  22.             Else
  23.                 If Rng.Value > 0 Then
  24.                     color = 255
  25.                 ElseIf Rng.Value < 0 Then
  26.                     color = 5296274
  27.                 End If
  28.             End If
  29.             If color > 0 Then
  30.                 With Rng.Interior
  31.                     .Pattern = xlSolid
  32.                     .PatternColorIndex = xlAutomatic
  33.                     .color = color
  34.                 End With
  35.             End If
  36.         Next
  37.         Range(.Address, .End(xlDown)).Clear
  38.     End With
  39.     Application.ScreenUpdating = True
  40.     Application.Calculation = xlCalculationAutomatic

  41. End Sub
複製代碼

作者: luhpro    時間: 2013-10-4 00:04

回復 1# ji12345678
  1. Private Sub cbCal_Click()
  2.   Dim iSCol%, iTCol%, iNum%
  3.   Dim lSRow&, lTRow&
  4.   Dim sStr$
  5.   Dim shSou As Sheet1, shTar As Sheet3

  6.   Set shSou = Sheets("總表")
  7.   Set shTar = Sheets("變動")
  8.   
  9.   With shTar.Cells
  10.     .ClearContents
  11.     .Interior.ColorIndex = -4142
  12.   End With
  13.   
  14.   With shSou
  15.     iSCol = 2 ' 日期與增減量
  16.     Do While .Cells(1, iSCol) <> ""
  17.       shTar.Cells(1, iSCol) = .Cells(1, iSCol)
  18.       shTar.Cells(2, iSCol) = "增減量"
  19.       iSCol = iSCol + 1
  20.     Loop
  21.     sStr = Cells(1, iSCol - 1).Address
  22.     sStr = Mid(sStr, 2, InStr(2, sStr, "$") - 2)
  23.     shTar.Columns("B:" & sStr).ColumnWidth = 8.38
  24.    
  25.     lSRow = 3 ' 工班名
  26.     Do While .Cells(lSRow, 1) <> ""
  27.       shTar.Cells(lSRow, 1) = .Cells(lSRow, 1)
  28.       lSRow = lSRow + 1
  29.     Loop
  30.    
  31.     iSCol = 3
  32.     Do While .Cells(1, iSCol) <> ""
  33.       lSRow = 3
  34.       Do While .Cells(lSRow, 1) <> ""
  35.         sStr = .Cells(lSRow, 1)
  36.         
  37.         If Left(sStr, 1) <> "總" Then iNum = CInt(Mid(sStr, 2, Len(sStr) - 2)) Else iNum = 1
  38.         
  39.         With .Cells(lSRow, iSCol)
  40.          shTar.Cells(lSRow, iSCol) = .Value - .Offset(, -1)
  41.         End With
  42.         
  43.         With shTar.Cells(lSRow, iSCol)
  44.           Select Case .Value
  45.             Case Is > 0
  46.               If iNum > 9 Then .Interior.ColorIndex = 41 Else .Interior.ColorIndex = 38
  47.             Case 0
  48.               .Interior.ColorIndex = -4142
  49.             Case Is < 0
  50.               If iNum > 9 Then .Interior.ColorIndex = 46 Else .Interior.ColorIndex = 35
  51.           End Select ' 藍 41 橘 46 綠 35 粉 38
  52.         End With
  53.         lSRow = lSRow + 1
  54.       Loop
  55.       iSCol = iSCol + 1
  56.     Loop
  57.   End With
  58. End Sub
複製代碼
[attach]16233[/attach]
作者: ji12345678    時間: 2013-10-5 01:16

麻辣論譠真是高手如雲!
感謝各位大大教導!另外請教一下。。。。。。。
有否什麼指令或方法是 一個區城內的全部儲存格,大於零就設紅色 ,小於零就設綠色。
來取代一個一個跑儲存格?
萬分感恩,謝謝~~~~!
作者: ji12345678    時間: 2013-10-5 01:45

真不好意思,
是否能使用VBA先設好 一格  "設定格式化的條件(D)"
再只將它的格式複製到其他的大量儲存格?

萬分感謝指教,謝謝~~~~!




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