发布网友 发布时间:2022-04-21 17:12
共3个回答
热心网友 时间:2023-07-19 10:24
例子数据源:
程序代码:
运行结果:
是不是很完美,程序文本:
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
追问下标越界呢?追答先估算一下数据,修改一下程序中的1000、100大一些
热心网友 时间:2023-07-19 10:25
用公式可实现,G1使用公式
=INDEX($B$1:$B$20,MATCH(E$1,$B$1:$B$20,0)+ROW(1:1))
向右拉向下拉即可,支持多客户多产品,产品排序数量相同的话(不同需要加条件)。
以上希望能帮上忙!
热心网友 时间:2023-07-19 10:25
可以的。给出的这个看起来还是比较规律的。公式都可以实现。当然,VBA更能实现了。