0

Excel に次の形式の列があります。

A01G45B45D12

このようにフォーマットする方法が必要です。つまり、文字列を 3 文字のグループに分割し、グループをアルファベット順に並べ替えてから、間に + 記号を付けて結合します。

A01+B45+D12+G45

Excel の組み込み式を使用してこれが可能であるか、または VBA などを使用してこれを行う必要がある場合、Excel から簡単に使用する方法があれば、C# でコードを既に持っているのではないかと思います。以前に Excel のプラグインを作成したことがありません。

追加する編集:上記は単なる例です。文字列は「任意の長さ」にすることができますが、常に3で割り切れ、順序はランダムであるため、事前に順序について何も想定できません.

4

1 に答える 1

0
Sub ArraySort()

Dim strStarter As String
Dim strFinish As String
Dim intHowMany As Integer
Dim intStartSlice As Integer

    strStarter = ActiveCell.Offset(0, -1).Value 'Pulls value from cell to the left

    intHowMany = Int(Len(strStarter) / 3)
    ReDim arrSlices(1 To intHowMany) As String


    intStartSlice = 1

    For x = 1 To intHowMany

        arrSlices(x) = Mid(strStarter, intStartSlice, 3)

        intStartSlice = intStartSlice + 3

    Next x

    Call BubbleSort(arrSlices)

    For x = 1 To intHowMany

        strFinish = strFinish + arrSlices(x) & "+"

    Next x


strFinish = Left(strFinish, Len(strFinish) - 1)
ActiveCell.Value = strFinish 'Puts result into activecell

End Sub


Sub BubbleSort(list() As String)
'Taken from power programming with VBA
'It’s a sorting procedure for 1-dimensional arrays named List
'The procedure takes each array element, if it is greater than the next element, the two elements swap positions.
'The evaluation is repeated for every pair of items (that is n-1 times)

    Dim First As Integer, Last As Long
    Dim i As Long, j As Long
    Dim temp As String
    First = LBound(list)
    Last = UBound(list)

    For i = First To Last - 1
        For j = i + 1 To Last
            If list(i) > list(j) Then
                temp = list(j)
                list(j) = list(i)
                list(i) = temp
            End If
        Next j
    Next i

End Sub
于 2013-04-30T11:55:08.463 に答える