把訂單數擴充成N行
有一個Excel問題,如下:
A列存放了一系列訂單數量,現在要把每個單元格中存儲的訂單數量擴充成N行。舉個例子:A2單元格的值是3,那麼就要在B2:B4中分別生成3個數,即1、2、3。A3單元格的值是5,那麼就要緊接著剛才的位置,在B5:B19中分別生成1、2、3、4、5。
問題分析
這個問題的本質是產生正整數列。要產生一個自然數列,只要用一個循環結構就能搞定。但是,本題要求是根據A列中的已知數據,在B列中產生多個正整數列,那麼只需要再加一層循環結構就好了。
為了增強程序代碼的通用性,避免使用絕對引用,我使用了相對引用,程序產生的結果將會放在緊靠原始數據(也就是選區)右側的一列, 即Selection.Offset(0,1).Cells(1,1)。
問題解答
我最終用VBA解決了這個問題。儘管題主想要一個公式下拉就能得出結果,不過按我的方法,只要選中A列中的原始數據,然後運行宏就好了,比用公式再下拉更方便些。
本方法適用於Excel 97~2016。本文以Excel 2010為例。
操作步驟如下:
1. 在Excel中,輸入一組原始數據,不一定必須放在A列,但一定要放在同一列里。
2. 按Alt+F11快捷鍵,出現」Microsoft Visual Basic for Application「窗口,即VBA窗口。
3. 在VBA窗口中,雙擊左邊「工程」窗格中的「ThisWorkbook」,此時,在VBA窗口右側出現了一個代碼窗口,如圖1所示。
4. 將下列代碼複製粘貼到代碼窗口中。
Public Sub CreateSeriesBySelection() 新版,用了相對引用n Dim i As Long, j As Long, k As Long, m As Long, s As Longn Dim TempArray() As Integern Dim C As Rangen i = 1n For Each C In Selection 選擇原始的一列數,逐一讀取每個單元格中的數值,依次存入動態數組TempArray()的每個元素n ReDim Preserve TempArray(i)n TempArray(i) = C.Valuen i = i + 1n Next Cn i = i - 1 上述循環執行結束後,i值比數組TempArray()的上標多了1,為了後續循環能正常執行,要把這個1減去n s = 1 計數器n 以下代碼是一個二重循環,第一重循環是把數組TempArray()的每個元素都刷一遍n 第二重循環要做兩件事:(1)根據數組TempArray()的每個元素,產生一個對應的數列,例如TempArray(1)的值是3,就產生一個數列{1,2,3}n (2)然後把這個新產生的數列寫入Excel工作表中,具體位置是緊靠選區右邊的一列,也就是Selection.Offset(0,1)n For j = 1 To i 第一重循環n m = 1 計數器n For k = 1 To TempArray(j) 第二重循環n Selection.Offset(0, 1).Cells(s, 1).Value = mn m = m + 1n s = s + 1 s是負責產生行數的計數器,s值的上限是65536(Excel 2003)或1048576(Excel 2007+)n Next kn Next jnEnd Subn
5. 切換到Excel窗口,選中A2:A7單元格中的原始數據。(這一步非常重要)
6. 切換到VBA窗口,按F5快捷鍵即可。隨後,在B列中出現了我們想要的結果。
最後,Excel技能提升基金需要你的支持。。。
說人話!
就是求打賞2塊錢明天早飯買包子~
推薦閱讀:
※如何在Excel實現採用星星符號評級的功能?
※excel數據透視表分組?
※如何處理EXCEL中存在大量合併單元格的跨頁斷行問題?
※這個公式是什麼意思=0/(A3<>A2)?
※如何將多個sheet的同一列數據快速放到一張表,並以sheet名作為相應每一列的名字?
TAG:MicrosoftExcel | VBA | Excel技巧 |