有讀者反饋一個問題:如何用VBA求出1000以內個位數與十位數之和,除以10,所得餘數剛好等於其百位數的數字。這道題看似很費解,但如果利用了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的循環,用來依次產生100到1000的數字,因為涉及到百位數字,所以兩位數字不再考慮。這裡利用了FOR,NEXT,它是一個循環語句,格式是FOR後跟變量,同時用等號賦值變量的起始和終止數字。有時候要跟上步長step,即每次增長的幅度,默認為1.當語句運行到NEXT後,變量會自動增加步長值,判斷是否到了最大值,如果沒有到最大值,指針回調到FOR語句後的循環體語句,再次執行,如果超過了最大值就退出循環。
第三:取出個位和百位數,用的語句分別是--Right(t, 1)和 --Left(Right(t, 2), 1),它們前面的「--」是減負運算,關於減負運算的知識我在之前的文章中講過,這裡不再講了,有不清楚的可以去查查我之前的文章,把這個知識點補上。這裡利用LEFT和right函數,就是左截取函數和右截取函數的組合,來實現提取出十位數的數值。注意因為LEFT函數和RIGHT函數是字符串截取函數,出來的數值也是字符串的格式。最後用變量yy來存儲上面兩個數值的和。
第四:求餘數運算,在VBA中求餘數的運算也是MOD,MOD函數是一個求餘函數,其格式為: mod(nExp1,nExp2),即是兩個數值表達式作除法運算後的餘數。特別注意:在EXCEL中,MOD函數是用於返回兩數相除的餘數,返回結果的符號與除數(divisor)的符號相同。yy與10的餘數就是yy MOD 10 .百位數就是--Left(Right(t, 3), 1),兩者是否相等,要進行判斷。
第五:如果相等,那麼第N行的第1個單元格的VALUE就等於這個數值,同時要把要填充的單元格n的指針向下調1,來存儲下一個將產生的數。這裡的變量N其實就是一個行數的變量,當有值填充時就向下調指針,
好了看看代碼的截圖:
在sheet4的工作表中,畫個按鈕,連接上上述代碼,點擊按鈕,運行宏,就會得到結果,看下面的結果截圖:
好了,所有的結果已經出來了,一共有91個數字符合要求。
今日VBA內容技巧提升:
其一:減負運算的目的和使用方法,不清楚的趕快去查啊。
其二:如何用LEFT().RIGHT(),組合,求一個數的十位和百位數字,
其三:VBA中的FOR,NEXT語的作用是什麼,如何使用。
其四:文章中的代碼公布中第一行為什麼沒有行號?
如果上述四個問題都清楚了,好OK,你可以順利的過關了,如果還有個別的知識點不是很清楚,要跟緊我的進度。努力啊。
分享成果,隨喜正能量