

'输出时B列分段按拼音升序,另外你这示例结果有点问题的吧
Option Explicit
Sub abc()
Dim i, j, a, m, p
a = Range("h1:p" & [h1].End(xlDown).Row).Value
ReDim b(1 To UBound(a) * (UBound(a, 2) - 1), 1 To 3)
For i = 2 To UBound(a)
For j = 2 To UBound(a, 2)
If a(i, j) <> 0 Then
m = m + 1
b(m, 1) = a(i, 1): b(m, 2) = a(1, j): b(m, 3) = a(i, j)
End If
Next
Call bsort(b, p + 1, m, 1, 3, 2): p = m
Next
With [a2]
.Resize(UBound(b)).NumberFormatLocal = "yyyy-mm-dd"
.Resize(UBound(b), UBound(b, 2)) = b
End With
End Sub
Function bsort(a, first, last, left, right, key)
Dim i, j, k, t
For i = first To last - 1
For j = first To last + first - 1 - i
If StrComp(a(j, key), a(j + 1, key), vbTextCompare) = 1 Then
For k = left To right
t = a(j, k): a(j, k) = a(j + 1, k): a(j + 1, k) = t
Next
End If
Next
Next
End Function