c语言abcd按大小排序,根据C列,把B列结果按照ABCDE的顺序排列到G:K区域。

Sub Test()

Dim shData As Worksheet

Dim arr As Variant, lngRow As Long

Dim lngMin As Long, lngMax As Long, lngPeriod As Long

Dim strPeriod() As String, lngIndex As Long

Dim strTemp As String, strSplitTemp() As String

Dim strA As String, strSplitA() As String

Dim strB As String, strSplitB() As String

Dim strC As String, strSplitC() As String

Dim strD As String, strSplitD() As String

Dim strE As String, strSplitE() As String

Dim strResult() As Variant

Dim lngID1 As Long, lngID2 As Long, lngID3 As Long, lngID4 As Long, lngID5 As Long

Set shData = Sheets("Sheet1")

lngRow = shData.Range("A" & Rows.Count).End(xlUp).Row

arr = shData.Range("A2:C" & lngRow)

lngMin = Application.WorksheetFunction.Min(Application.WorksheetFunction.Index(arr, 0, 3))

lngMax = Application.WorksheetFunction.Max(Application.WorksheetFunction.Index(arr, 0, 3))

ReDim strPeriod(lngMin To lngMax)

ReDim strResult(1 To 7, 1 To 1)

For lngRow = LBound(arr) To UBound(arr)

lngPeriod = arr(lngRow, 3)

strPeriod(lngPeriod) = strPeriod(lngPeriod) & "," & arr(lngRow, 2)

Next

lngIndex = 0

For lngRow = LBound(strPeriod) To UBound(strPeriod)

strA = "": strB = "": strC = "": strD = "": strE = ""

If strPeriod(lngRow) <> "" Then

strSplitTemp = Split(strPeriod(lngRow), ",")

For lngID1 = 1 To UBound(strSplitTemp)

strTemp = Mid(strSplitTemp(lngID1), 1, 1)

Select Case UCase(strTemp)

Case "A"

strA = strA & "," & strSplitTemp(lngID1)

Case "B"

strB = strB & "," & strSplitTemp(lngID1)

Case "C"

strC = strC & "," & strSplitTemp(lngID1)

Case "D"

strD = strD & "," & strSplitTemp(lngID1)

Case "E"

strE = strE & "," & strSplitTemp(lngID1)

End Select

Next

If strA = "" Then strSplitA = Split(",", ",") Else strSplitA = Split(strA, ",")

If strB = "" Then strSplitB = Split(",", ",") Else strSplitB = Split(strB, ",")

If strC = "" Then strSplitC = Split(",", ",") Else strSplitC = Split(strC, ",")

If strD = "" Then strSplitD = Split(",", ",") Else strSplitD = Split(strD, ",")

If strE = "" Then strSplitE = Split(",", ",") Else strSplitE = Split(strE, ",")

For lngID1 = 1 To UBound(strSplitA)

For lngID2 = 1 To UBound(strSplitB)

For lngID3 = 1 To UBound(strSplitC)

For lngID4 = 1 To UBound(strSplitD)

For lngID5 = 1 To UBound(strSplitE)

lngIndex = lngIndex + 1

ReDim Preserve strResult(1 To 7, 1 To lngIndex)

strResult(1, lngIndex) = lngIndex

strResult(2, lngIndex) = strSplitA(lngID1)

strResult(3, lngIndex) = strSplitB(lngID2)

strResult(4, lngIndex) = strSplitC(lngID3)

strResult(5, lngIndex) = strSplitD(lngID4)

strResult(6, lngIndex) = strSplitE(lngID5)

strResult(7, lngIndex) = lngRow

Next

Next

Next

Next

Next

End If

Next

strResult = Application.WorksheetFunction.Transpose(strResult)

shData.Range("F2").Resize(UBound(strResult), 7) = strResult

End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值