1

私は仕事で休日のスプレッドシートを修正する仕事を与えられましたが、ドキュメントの問題は、直接参照、他のワークシートへの間接参照、および参照されていない一部の部分があることです。したがって、人々を別の順序に並べたい場合は、完全に全体を台無しにします。だから、私がやろうとしているのは、配列に人々の名前を入力し、配列を並べ替えてから、元の配列と相互参照して新しい順序を見つけ、この新しい順序を混乱させることなくワークシート全体に実装できるようにすることです。

問題は、配列を取り込むことができないように見えることです。ここで他の回答を確認しましたが、redimを適切に使用していると確信しており、それが問題になる傾向があります。

したがって、Previousは元のリスト、Currentはソートされたリスト、Positionはpreviousをcurrentに関連付ける番号です。

Sub Sorting()

Dim Previous() As Variant
Dim Current() As Variant
Dim maxrow As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim Position() As Long
Dim rng As Range
Dim strTemp As String

k = 0
i = 3
maxrow = 3

Do While Worksheets(1).Cells(i, 1).Value <> "STAT.HOL'S (ST)"
maxrow = maxrow + 1
i = i + 1
Loop
maxrow = maxrow - 1

ReDim Previous(0 To maxrow)
ReDim Position(0 To maxrow)
ReDim Current(0 To maxrow)
Previous = Range("a4", Range("a" & maxrow))
Current = Previous
For i = 0 To maxrow
For j = 0 To maxrow
If Current(i) > Current(j) Then
strTemp = Current(i)
Current(i) = Current(j)
Current(j) = strTemp
End If
Next j
Next i

For i = 0 To maxrow
For j = 0 To maxrow

If Previous(i) = Current(j).Value Then
Position(k) = j
k = k + 1
End If

Next j
Next i

End Sub

ご協力いただきありがとうございます。エイミー

4

2 に答える 2

1

Excelの範囲は、単一の列であっても、常に2つのディメンションとして扱われます。また、バリアント配列を再変更する必要はありません。範囲をプレーンなバリアント変数に割り当てるだけで、2次元配列を含むバリアントが作成されます。

Dim Previous as variant
Previous = Range("a4:a" & maxrow)
于 2013-03-27T11:56:34.590 に答える
1

アレイにデータを入力しますが、間違った方法でそれらに対処しています。

配列に範囲を割り当てると、配列は自動的に2次元配列に再ディメンション化されます。1つは行用、もう1つは列用です。

範囲は1つの列であるため、2番目の次元は常に1です。したがって、行を実行すると、次のPrevious = Range("a4", Range("a" & maxrow))ような次元の配列が得られます。

Previous(1 to 10, 1 To 1)

また、Forループは次のように変更できます。

For i = LBound(Current, 1) To UBound(Current, 1)

Next i
于 2013-03-27T12:20:43.407 に答える