作者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://webptt.com/cn.aspx?n=bbs/Office/M.1489165274.A.C97.html
1F:→ o1o3o1o31030: 名字不用顺序 03/11 01:02
2F:→ soyoso: 可以range.currentregion.rows.count或range.find 03/11 12:01
3F:→ soyoso: xlprevious来取得资料栏内最下方列号 03/11 12:03
4F:→ soyoso: 回圈於取得列号;取最右侧有资料栏号则可以range.end、 03/11 12:05
5F:→ soyoso: range.find或worksheetfunction.counta 03/11 12:05
6F:→ soyoso: 回圈内再加入另一个回圈於取得栏号,判断是否为空白储存格 03/11 12:08
7F:→ soyoso: 另加变数=变数+1来累加要填入sheet(2)内列偏移值 03/11 12:10
8F:→ soyoso: 偏移上以range.offset 03/11 12:10
9F:→ soyoso: 取最右侧栏号和判断是否为空白储存格上也可以 03/11 12:17
10F:→ soyoso: range.specialcells 常数(文字)的方式 03/11 12:18
11F:→ o1o3o1o31030: 感谢S大,但我看得不是很懂@@ 03/11 15:35
※ 编辑: o1o3o1o31030 (223.136.251.213), 03/11/2017 19:41:52
12F:→ soyoso: M如为range,要回传列数和栏数的话,可以range.rows.count 03/11 23:30
13F:→ soyoso: 和range.columns.count 03/11 23:30
14F:→ o1o3o1o31030: 是这样吗Range(M).Rows.Count?但好像不太对的样子@@ 03/12 11:23
15F:→ o1o3o1o31030: M是我自行选取进入自订函数的范围 03/12 11:25
16F:→ o1o3o1o31030: 还是说一开始要宣告甚麽? 03/12 11:25
17F:→ soyoso: 以m.rows.count试试 03/12 12:34
18F:→ o1o3o1o31030: 感谢 03/12 15:13