請問各位高手,

1.設定儲存格A1可讓使用者任意填入1~100的數值
2.儲存格B1~B10會因為使用者在A1輸入任意1~100的數值而自行產生新的數值
3.希望在E~N儲存格可以按照順序的將每次產生的數值結果顯示出來

Ex:
假設在儲存格A1輸入1,儲存格B1~B10會顯示1,期望儲存格E1會顯示儲存格B1的值,儲存格F1會顯示儲存格B2的值,儲存格G1會顯示儲存格B3的值,指此類推直到儲存格N1會顯示儲存格B10的值。

假設在儲存格A1輸入5(就是從1做到5,輸入100就是做到100),則儲存格B1~B10應當會按照順序的顯示10個1、10個2、以此類推至10個5。預期希望能按照順序的將10個1填入儲存格E1~N1、10個2填入儲存格E2~N2、以此類推至10個5填入儲存格E5~N5

形容的可能有點複雜,還請多多包涵~~

以下三張圖片可能會比較清楚我的構想!
Excel VBA撰寫求救!
Excel VBA撰寫求救!
Excel VBA撰寫求救!
文章關鍵字
B1 輸入=IF(A1>=1,"結果"&$A$1,"")


B2 輸入 =B1
B3 輸入 =B2
|
B10 輸入 =B9



E1 輸入 =IF($A$1>=1,B1,"")
E2 輸入 =IF($A$1>=2,B1,"")
|
E100 輸入 =IF($A$1>=100,B1,"")


F1輸入=E1, G1輸入=F1, .......N1輸入=M1 (可以在F1輸入完後,拖曳程式到N1就輸入完了)
F2輸入=E2, G2輸入=F2, .......N2輸入=M2
|
F100輸入=E100, G100輸入=F100, .......N100輸入=M100 (F1到N1輸入完後,選取F1~N1,再拖曳程式向下到N100就行了。)
新建一個模組 Module1

Module1 內容
Sub Run()

'指定 B1~B10 隨機產生的最大和最小值範圍
upperbound = 100
lowerbound = 1

'在最大和最小值的範圍內隨機產生 B1~B10
For i = 1 To 10
Range("B" & i) = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Next

'將 B1~B10 轉置到 E~M 欄(先算出已有的列數再加1)
Range("B1:B10").Copy
Range("E" & Application.WorksheetFunction.CountA(Range("E:E")) + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False

End Sub


每執行一次上面這個巨集,就可以得到你要的效果。

如果要再更 Friendly 一點,不想每改一次A1儲存格就得手動執行一次巨集,

那就在「ThisWorkbook 物件」內使用下列的程式碼。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 1 And Target.Row = 1 Then Call Module1.Run
End Sub


「ThisWorkbook 物件」的位置如圖所示


紅色字體的部分稍微注意一下:

1.由於巨集中沒有指定 Sheet,所以一旦活頁簿中任一個Sheet的A1儲存格被修改都會觸發巨集,並將產生的結果寫入當前Sheet的 B1~B10 和 E~M 欄。

因此建議這個巨集應該要單獨使用一個獨立的活頁簿,而不要有其他存放資料的 Sheet,以免因誤改到A1儲存格而將重要的資料覆蓋。

如果這個巨集一定得和其他有重要資料的Sheet放在同一個活頁簿,則應該要把第二段(ThisWorkbook物件內)的程式碼放在指定的 Sheet物件,例如圖中的「活頁簿1(工作表1)」。

如此一來,只有該Sheet的A1儲存格被修改才會觸發巨集。

2.如果模組的名稱有被改變,例如 Module1 被改為 GenData,那麼第二段「ThisWorkbook 物件」內的程式碼也應該要做相對應的修改。
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!