方法1 公式
第1行,辅助行,模拟了每个数据cell对应的列号
第2行,辅助行,模拟了每个数据cell对应的行号
第3行,输出行 ,利用R1C1G格式,因为明显可以看出来,行号,列号的变化时有规律的
= INDIRECT("r"&G2+2&"c"&G1,FALSE)
G1 列号
G2 行号,G2+2 是因为原始待处理raw数据是从第3行开始的
序号 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | |||||
1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | ||||||
10 | 100 | 1000 | 1 | 1 | 10 | 100 | 1000 | 2 | 11 | 101 | 1001 | 3 | 12 | 102 | 1002 | ||
11 | 101 | 1001 | 2 | ||||||||||||||
12 | 102 | 1002 | 3 | ||||||||||||||
13 | 103 | 1003 | 4 | ||||||||||||||
14 | 104 | 1004 | 5 | ||||||||||||||
15 | 105 | 1005 | 6 | ||||||||||||||
16 | 106 | 1006 | 7 | ||||||||||||||
17 | 107 | 1007 | 8 | ||||||||||||||
18 | 108 | 1008 | 9 | ||||||||||||||
19 | 109 | 1009 | 10 | ||||||||||||||
20 | 110 | 1010 | 11 | ||||||||||||||
21 | 111 | 1011 | 12 | ||||||||||||||
22 | 112 | 1012 | 13 | ||||||||||||||
23 | 113 | 1013 | 14 |
公式的思路
思考原型1: INDIRECT("r"&row(2:2)&"c"&column(a:a),FALSE),这个可以查一个数,但这个里参数都是写死的
思考原型2: 如何让 row(2:2) column(a:a) 变成可变得数?
思路1:循环,那就用VBA
思路2:模拟假的行号,列号
1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
原型3: INDIRECT("r"&G2+2&"c"&G1,FALSE)
方法2 VBA
犯错原因
- 要理解 i,j 是针对老的raw的 二维数据处理的参数
- 新的输出列,其循环量应该是个新的变量K
- 变量K的初值,需要赋值在循环外,不然会被循环反复重置
- k=k+1的增量循环体,放在 循环i内,循环j内,效果完全不同
Sub cycle1()
Dim k
k = 5
For i = 4 To 17 Step 1
For j = 1 To 3 Step 1
Sheets("sheet3").Cells(1, k) = Cells(i, j)
k = k + 1
Next j
Next i
End Sub
'错误代码例子,我新手非常容易犯的直觉错误,对cycle 不熟,不理解
'Sub cycle1()
'
'For i = 4 To 17 Step 1
' For j = 1 To 3 Step 1
' Sheets("sheet3").Cells(1, j + 5) = Cells(i, j)
' j = j + 1
' Next j
'Next i
'
'End Sub
方法3
有人说可以用方方格子,好像是个EXCEL插件,没用过,可以试试