0

現在、VBA プロジェクトを VB.NET に変換しています。そして、データテーブルのソートに少し問題があります。

私のテーブルは次のようになります:

... | ... | Firstname3 | Name3 | Pay3 | Firstname1 | Name1 | Pay1 | Firstname2 | Name2 | Pay2 |...
... | ... | Firstname2 | Name2 | Pay2 | Firstname3 | Name3 | Pay3 | Firstname1 | Name1 | Pay1 |...

など...データテーブルから必要な56列を配列にエクスポートし、名前で水平方向に並べ替えようとします。私はVBAでそのようにしました:

Public Sub SortTable(ByRef aggTab(,) As Object, ByVal columnToSortOn As Integer, ByVal lowerValue As Byte,
                    ByVal upperValue As Byte)

    Dim ref As Object = aggTab((lowerValue + upperValue) \ 2, columnToSortOn)
    Dim refLowerValue As Byte = lowerValue
    Dim refUpperValue As Byte = upperValue
    Dim temp As Object

    Do
        Do While aggTab(refLowerValue, columnToSortOn) < ref
            refLowerValue = refLowerValue + 1
        Loop
        Do While ref < aggTab(refUpperValue, columnToSortOn)
            refUpperValue = refUpperValue - 1
        Loop
        If refLowerValue <= refUpperValue Then
            For i = LBound(aggTab, 2) To UBound(aggTab, 2)
                temp = aggTab(refLowerValue, i)
                aggTab(refLowerValue, i) = aggTab(refUpperValue, i)
                aggTab(refUpperValue, i) = temp
            Next i
            refLowerValue = refLowerValue + 1 : refUpperValue = refUpperValue - 1
        End If
    Loop While refLowerValue <= refUpperValue

    If refLowerValue < upperValue Then Call SortTable(aggTab, columnToSortOn, refLowerValue, upperValue)
    If lowerValue < refUpperValue Then Call SortTable(aggTab, columnToSortOn, lowerValue, refUpperValue)
End Sub

しかし、コードを VB.NET に変換すると、正しく動作しません。誰かが私に理由を説明できますか? Excelでは完全に機能するためです。

4

1 に答える 1

1

この例を見てください。

    Dim openWith As New SortedDictionary(Of String, String)

    ' Add some elements to the dictionary. There are no  
    ' duplicate keys, but some of the values are duplicates.
    openWith.Add("txt", "notepad.exe")
    openWith.Add("bmp", "paint.exe")
    openWith.Add("dib", "paint.exe")
    openWith.Add("rtf", "wordpad.exe")

    For Each Ext As KeyValuePair(Of String, String) In openWith
        TextBox1.AppendText(Ext.Key & " " & Ext.Value & vbCrLf)
    Next

これにより、「拡張子」が自動的にソートされます。

于 2013-08-13T10:04:31.137 に答える