Board logo

標題: [發問] 判斷值規格範圍,並加減固定值後,再取代該儲存格原值 [打印本頁]

作者: kasa    時間: 2015-4-16 00:54     標題: 判斷值規格範圍,並加減固定值後,再取代該儲存格原值

本帖最後由 kasa 於 2015-4-16 00:55 編輯

請教各位專家
如何將A欄之所有有填入數字之儲存格,依序判斷小於90者,自動將其值加1並取代該儲存格原值;而大於100者,自動將其值減1並取代該儲存格原值
感謝~
作者: PKKO    時間: 2015-4-16 13:25

回復 1# kasa

試試看~
  1. Sub test()
  2.     For i = 1 To [a65536].End(xlUp).Row
  3.         If Cells(i, 1) < 90 Then
  4.             Cells(i, 1) = Cells(i, 1) + 1
  5.         ElseIf Cells(i, 1) > 100 Then
  6.             Cells(i, 1) = Cells(i, 1) - 1
  7.         End If
  8.     Next
  9. End Sub
複製代碼

作者: tyrone123456    時間: 2015-4-16 23:02

本帖最後由 tyrone123456 於 2015-4-16 23:04 編輯

VBA寫法:
1、先確認有多少筆資料要處理:     DataCount = application.counta(columns(1))
2、使用Do While ,否則從第1行做到65536,會花很多時間
I=0
Do while  I< DataCount
     if  cells(I+1,1)<>""  then
            if cells(I+1,1)<90   then
                     cells(I+1,1)=cells(I+1,1)+1
            elseif cells(I+1,1)>100 then
                    cells(I+1,1)=cells(I+1,1)-1
             end if
            I=I+1
    end if
loop
以上寫法也可避開儲存格有跳空格的問題

Excel寫法:
B1=if(A1<90,A1+1,if(A1>100,A1-1,A1))
作者: PKKO    時間: 2015-4-16 23:20

回復 3# tyrone123456


    使用[A65536].END(XLUP).ROW只是一種計算A欄最下方值的位置,實際上並不會硬性執行到65536列(要看最下方的值在哪一列)
作者: kasa    時間: 2015-4-20 22:18

感謝各位前輩指導,在看各位的指導之前,我試著撰寫如下,因為我剛自學VBA半年,有錯誤之處,再請大家教導一下~~感謝~

Sub 偵錯()
Dim r As Integer
For r = 1 To Application.WorksheetFunction.CountA(Sheets("Sheet1").Range("E:E"))-1
        If Sheets("Sheet1").Cells(r + 7, 5) < Worksheets("偵錯規格設定").Range("B2").Value Or Sheets("Sheet1").Cells(r + 7, 5) > Worksheets("偵錯規格設定").Range("B1").Value Then
           Sheets("Sheet1").Cells(r + 7, 5) = Round(Rnd() * Worksheets("偵錯規格設定").Range("B5").Value, 3) + Worksheets("偵錯規格設定").Range("B4").Value
           
        End If
Next

End Sub

(注意事項)
1.先確認E欄內共輸入幾筆資料(發現合併儲存格內之標題被算為1筆資料)
2.因Sheet1有標題列,故r+7列為真正數字資料輸入起始列
3."偵錯規格設定"工作表內之B1/B2分別為規格上下限; B4為亂數下限,B5為自亂數下限往上數起,共要自B5設定值之組數內挑一個亂數的組數依據
4.當初設定亂數產生需有小數點3位,故使用Round來規範亂數產生呈現方式




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