作者o1o3o1o31030 (主席)
看板Office
標題[算表] VBA 偵測表格大小並分類
時間Sat Mar 11 01:01:11 2017
軟體:excel
版本:2013
一個變動大小且每列數不一的表格在sheets(1)
想用VBA抓取重新整理表格到sheets(2)
Sheets(1)
a b c d e
1 一組 二組 三組 四組 五組
2 甲 乙 丙 丁
3 戊 己 庚
4 辛
5
sheet(2)
1 甲 一組
2 乙 二組
3 丙 三組
4 丁 四組
5 戊 一組
6 己 三組
7 庚 四組
8 辛 三組
這種情況該如何做呢? 謝謝各位
我自問自答了:
Public Sub 所屬單位2()
'宣告動態陣列M
Dim M()
'計算欄數
a = Sheets(1).Range("A1").End(xlToRight).Column
'將每一欄的最後一列列號寫入M()
For j = 1 To a
ReDim Preserve M(j)
M(j) = Sheets(1).Cells(1000, j).End(xlUp).Row
Next
'取M中最大值為表格下界
b = WorksheetFunction.Max(M)
'逐一比對資料,將對應者填入報表
For i = 2 To Range("A2").End(xlDown).Row
For Each cell In Sheets(1).Range(Sheets(1).Cells(1, 1),
Sheets(1).Cells(b, a))
If Cells(i, "A") = cell Then
Cells(i, "B") = Sheets(1).Cells(1, cell.Column)
End If
Next
Next
End Sub
Public Sub 人員()
x = 2
For i = 1 To Sheets(1).Range("A1").End(xlToRight).Column
For j = 2 To Sheets(1).Cells(10000, i).End(xlUp).Row
If Sheets(1).Cells(j, i) <> 0 Then
Cells(x, 1) = Sheets(1).Cells(j, i)
x = x + 1
End If
Next
Next
Call 所屬單位2
End Sub
_____________________________________________________________________________
但是還是想了解一下S大的方法,S大的方法總是精闢!!
但在做出來之後我又想把它弄成自訂函數
但是在第一步就卡住了
Public Function 人員整理(M)
宣告完後,M陣列將去選去sheets(1)的表格,下一步我想讀取我選取M的SIZE
也就是M有幾列幾行,該如何做呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.20.1
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1489165274.A.C97.html
→ o1o3o1o31030: 名字不用順序 03/11 01:02
→ soyoso: 可以range.currentregion.rows.count或range.find 03/11 12:01
→ soyoso: xlprevious來取得資料欄內最下方列號 03/11 12:03
→ soyoso: 迴圈於取得列號;取最右側有資料欄號則可以range.end、 03/11 12:05
→ soyoso: range.find或worksheetfunction.counta 03/11 12:05
→ soyoso: 迴圈內再加入另一個迴圈於取得欄號,判斷是否為空白儲存格 03/11 12:08
→ soyoso: 另加變數=變數+1來累加要填入sheet(2)內列偏移值 03/11 12:10
→ soyoso: 偏移上以range.offset 03/11 12:10
→ soyoso: 取最右側欄號和判斷是否為空白儲存格上也可以 03/11 12:17
→ soyoso: range.specialcells 常數(文字)的方式 03/11 12:18
→ o1o3o1o31030: 感謝S大,但我看得不是很懂@@ 03/11 15:35
※ 編輯: o1o3o1o31030 (223.136.251.213), 03/11/2017 19:41:52
→ soyoso: M如為range,要回傳列數和欄數的話,可以range.rows.count 03/11 23:30
→ soyoso: 和range.columns.count 03/11 23:30
→ o1o3o1o31030: 是這樣嗎Range(M).Rows.Count?但好像不太對的樣子@@ 03/12 11:23
→ o1o3o1o31030: M是我自行選取進入自訂函數的範圍 03/12 11:25
→ o1o3o1o31030: 還是說一開始要宣告甚麼? 03/12 11:25
→ soyoso: 以m.rows.count試試 03/12 12:34
→ o1o3o1o31030: 感謝 03/12 15:13