2

Excel スプレッドシートの列 A に 10 個の値があります (それ以上になります)。列の値を取得して配列に入れる方法はありますか?

また、可能であれば、スプレッドシートとは異なる順序で値を配置することもできます。たとえば、スプレッドシートの値が「Apple」「Orange」と「Banana」の場合、配列は位置 0「オレンジ」、位置 1「バナナ」、位置 2「Apple」のようになります。

これがどのように行われるか知っている人はいますか?ちなみに、コードをあまり編集せずに、10 から 1000 の値にスケーラブルにする必要があります。

4

2 に答える 2

1

次のように、ループせずに単一の列のインデックス付き配列を作成できます

Sub GetArray()
Dim X
Dim lngCol As Long
lngCol = Cells(Rows.Count, "A").End(xlUp).Row
X = Application.Transpose(Application.Evaluate("If(row(A1:A" & lngCol & "),row(1:" & lngCol & ")-1 & A1:a" & lngCol & ",0)"))
End Sub

データの並べ替え方法を投稿していませんか? ここに画像の説明を入力 ランダムな順序に更新

Sub GetArray2()
Dim X()
Dim lngCol As Long
lngCol = Cells(Rows.Count, "A").End(xlUp).Row
X = Application.Transpose(Range("A1:A" & lngCol))
Call ShuffleArrayInPlace(X())
End Sub

次のサブは、Chip Pearson の ShuffleArray の修正版を使用します。

Sub ShuffleArrayInPlace(InArray() As Variant)
'http://www.cpearson.com/excel/ShuffleArray.aspx
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShuffleArrayInPlace
' This shuffles InArray to random order, randomized in place.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim N As Long
    Dim Temp As Variant
    Dim J As Long

    Randomize
    For N = LBound(InArray) To UBound(InArray)
        J = CLng(((UBound(InArray) - N) * Rnd) + N)
        If N <> J Then
            Temp = InArray(N)
            InArray(N) = InArray(J)
            InArray(J) = Temp
        End If
    Next N
      For N = LBound(InArray) To UBound(InArray)
      InArray(N) = N - 1 & " " & InArray(N)
      Debug.Print InArray(N)
      Next N
End Sub

ここに画像の説明を入力

于 2012-09-10T02:32:43.703 に答える
0

範囲全体を配列に読み込む方法:

Sub readText()

    Dim i As Integer
    Dim dataStr As String
    Dim arr As Variant

    'read data
    arr = Range("A1:A10").Value

    'display the data...
    For i = 1 To UBound(arr)
        'add the value at this point - given by arr(i,1) - to the string. You can access these elements 
        'directly via this sort of array notation
        dataStr = dataStr & arr(i, 1) & vbCrLf

    Next i
    'show what was in those cells
    MsgBox (dataStr)
    MsgBox (arr(3,1) )
End Sub

vbaで並べ替えるよりも、Excelで最初に並べ替える(つまり、アルファベット順、昇順、順序など)方がほぼ確実に簡単です。

于 2012-09-09T22:04:38.400 に答える