[算表] VBA 偵測表格大小並分類

看板Office作者 (主席)時間9年前 (2017/03/11 01:01), 9年前編輯推噓0(0018)
留言18則, 2人參與, 最新討論串1/1
軟體: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

03/11 01:02, , 1F
名字不用順序
03/11 01:02, 1F

03/11 12:01, , 2F
可以range.currentregion.rows.count或range.find
03/11 12:01, 2F

03/11 12:03, , 3F
xlprevious來取得資料欄內最下方列號
03/11 12:03, 3F

03/11 12:05, , 4F
迴圈於取得列號;取最右側有資料欄號則可以range.end、
03/11 12:05, 4F

03/11 12:05, , 5F
range.find或worksheetfunction.counta
03/11 12:05, 5F

03/11 12:08, , 6F
迴圈內再加入另一個迴圈於取得欄號,判斷是否為空白儲存格
03/11 12:08, 6F

03/11 12:10, , 7F
另加變數=變數+1來累加要填入sheet(2)內列偏移值
03/11 12:10, 7F

03/11 12:10, , 8F
偏移上以range.offset
03/11 12:10, 8F

03/11 12:17, , 9F
取最右側欄號和判斷是否為空白儲存格上也可以
03/11 12:17, 9F

03/11 12:18, , 10F
range.specialcells 常數(文字)的方式
03/11 12:18, 10F

03/11 15:35, , 11F
感謝S大,但我看得不是很懂@@
03/11 15:35, 11F
※ 編輯: o1o3o1o31030 (223.136.251.213), 03/11/2017 19:41:52

03/11 23:30, , 12F
M如為range,要回傳列數和欄數的話,可以range.rows.count
03/11 23:30, 12F

03/11 23:30, , 13F
和range.columns.count
03/11 23:30, 13F

03/12 11:23, , 14F
是這樣嗎Range(M).Rows.Count?但好像不太對的樣子@@
03/12 11:23, 14F

03/12 11:25, , 15F
M是我自行選取進入自訂函數的範圍
03/12 11:25, 15F

03/12 11:25, , 16F
還是說一開始要宣告甚麼?
03/12 11:25, 16F

03/12 12:34, , 17F
以m.rows.count試試
03/12 12:34, 17F

03/12 15:13, , 18F
感謝
03/12 15:13, 18F
文章代碼(AID): #1OmjlQoN (Office)
文章代碼(AID): #1OmjlQoN (Office)