|
有讀者反饋一個問題:如何用VBA求出1000以內(nèi)個位數(shù)與十位數(shù)之和,除以10,所得余數(shù)剛好等于其百位數(shù)的數(shù)字。這道題看似很費解,但如果利用了VBA真的不是問題了,今日來詳細的講解一下。 先上代碼: Sub kk() 2 Sheets('sheet4').Select 3 n = 1 4 For t = 100 To 1000 5 yy = (--Right(t, 1)) (--Left(Right(t, 2), 1)) 6 If yy Mod 10 = (--Left(Right(t, 3), 1)) Then 7 Cells(n, 1) = t 8 n = n 1 9 End If 10 Next 11 End Sub 代碼講解: 第一:上面是一個簡單的VBA程序,此程序命名為kk,操作是在sheet4工作表中進行。 第二:首先選擇的是從100到1000的FOR ,NEXT的循環(huán),用來依次產(chǎn)生100到1000的數(shù)字,因為涉及到百位數(shù)字,所以兩位數(shù)字不再考慮。這里利用了FOR,NEXT,它是一個循環(huán)語句,格式是FOR后跟變量,同時用等號賦值變量的起始和終止數(shù)字。有時候要跟上步長step,即每次增長的幅度,默認為1.當語句運行到NEXT后,變量會自動增加步長值,判斷是否到了最大值,如果沒有到最大值,指針回調(diào)到FOR語句后的循環(huán)體語句,再次執(zhí)行,如果超過了最大值就退出循環(huán)。 第三:取出個位和百位數(shù),用的語句分別是--Right(t, 1)和 --Left(Right(t, 2), 1),它們前面的'--'是減負運算,關于減負運算的知識我在之前的文章中講過,這里不再講了,有不清楚的可以去查查我之前的文章,把這個知識點補上。這里利用LEFT和right函數(shù),就是左截取函數(shù)和右截取函數(shù)的組合,來實現(xiàn)提取出十位數(shù)的數(shù)值。注意因為LEFT函數(shù)和RIGHT函數(shù)是字符串截取函數(shù),出來的數(shù)值也是字符串的格式。最后用變量yy來存儲上面兩個數(shù)值的和。 第四:求余數(shù)運算,在VBA中求余數(shù)的運算也是MOD,MOD函數(shù)是一個求余函數(shù),其格式為: mod(nExp1,nExp2),即是兩個數(shù)值表達式作除法運算后的余數(shù)。特別注意:在EXCEL中,MOD函數(shù)是用于返回兩數(shù)相除的余數(shù),返回結果的符號與除數(shù)(divisor)的符號相同。yy與10的余數(shù)就是yy MOD 10 .百位數(shù)就是--Left(Right(t, 3), 1),兩者是否相等,要進行判斷。 第五:如果相等,那么第N行的第1個單元格的VALUE就等于這個數(shù)值,同時要把要填充的單元格n的指針向下調(diào)1,來存儲下一個將產(chǎn)生的數(shù)。這里的變量N其實就是一個行數(shù)的變量,當有值填充時就向下調(diào)指針, 好了看看代碼的截圖: 在sheet4的工作表中,畫個按鈕,連接上上述代碼,點擊按鈕,運行宏,就會得到結果,看下面的結果截圖: 好了,所有的結果已經(jīng)出來了,一共有91個數(shù)字符合要求。 今日VBA內(nèi)容技巧提升: 其一:減負運算的目的和使用方法,不清楚的趕快去查啊。 其二:如何用LEFT().RIGHT(),組合,求一個數(shù)的十位和百位數(shù)字, 其三:VBA中的FOR,NEXT語的作用是什么,如何使用。 其四:文章中的代碼公布中第一行為什么沒有行號? 如果上述四個問題都清楚了,好OK,你可以順利的過關了,如果還有個別的知識點不是很清楚,要跟緊我的進度。努力啊。 分享成果,隨喜正能量 |
|
|