例子数据源:
程序代码:
运行结果:
是不是很完美,程序文本:
Option Explicit
Sub 转换()
Dim a1, a2(1 To 1000, 1 To 100), i, j, x, y, m, n
Set x = CreateObject("Scripting.Dictionary")
Set y = CreateObject("Scripting.Dictionary")
a1 = Range("a1").CurrentRegion
For i = 1 To UBound(a1)
If a1(i, 1) = "价格" Then
If Not y.Exists(a1(i, 2)) Then
a2(1, y.Count + 2) = a1(i, 2)
y.Add a1(i, 2), y.Count + 2
End If
n = y(a1(i, 2))
Else
If Not x.Exists(a1(i, 1)) Then
a2(x.Count + 2, 1) = a1(i, 1)
x.Add a1(i, 1), x.Count + 2
End If
m = x(a1(i, 1))
a2(m, n) = a1(i, 2)
End If
Next i
Range("d1").Resize(x.Count + 1, y.Count + 1) = a2
End Sub
用公式可实现,G1使用公式
=INDEX($B$1:$B$20,MATCH(E$1,$B$1:$B$20,0)+ROW(1:1))
向右拉向下拉即可,支持多客户多产品,产品排序数量相同的话(不同需要加条件)。
以上希望能帮上忙!
可以的。给出的这个看起来还是比较规律的。公式都可以实现。当然,VBA更能实现了。
公式实现的话,可以使用偏移的办法处理。
其实VBA最方便的实现方法,也是偏移的方法。