Arrays 如何创建excel列的内容数组

Arrays 如何创建excel列的内容数组,arrays,excel,scalable,vba,Arrays,Excel,Scalable,Vba,我在excel电子表格的A列中有10个值(会更多)。有没有办法获取该列的值并将其放入数组中 如果可能的话,可以将这些值按与电子表格中不同的顺序排列。例如,如果我的电子表格值是“苹果”“橙色”和“香蕉”,那么我希望我的数组看起来像,位置0“橙色”位置1“香蕉”位置2“苹果” 有人知道怎么做吗?顺便说一下,它需要在不编辑代码的情况下从10个值扩展到1000个值,这是一种将整个范围内的数据读入数组的方法: Sub readText() Dim i As Integer Dim dat

我在excel电子表格的A列中有10个值(会更多)。有没有办法获取该列的值并将其放入数组中

如果可能的话,可以将这些值按与电子表格中不同的顺序排列。例如,如果我的电子表格值是“苹果”“橙色”和“香蕉”,那么我希望我的数组看起来像,位置0“橙色”位置1“香蕉”位置2“苹果”


有人知道怎么做吗?顺便说一下,它需要在不编辑代码的情况下从10个值扩展到1000个值,这是一种将整个范围内的数据读入数组的方法:

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

几乎可以肯定的是,首先在Excel中排序(即按字母顺序?按顺序递增?等)比在vba中排序更容易。

您可以为单个列创建索引数组,而无需如下循环

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
下一个子系统使用的是

Sub-shufflearlayinplace(InArray()作为变体)
'http://www.cpearson.com/excel/ShuffleArray.aspx
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
“我在原地
“这会将InArray随机排列,随机化到位。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
长
变光温度
Dim J尽可能长
随机化
对于N=LBound(InArray)到UBound(InArray)
J=CLng(((UBound(inaray)-N)*Rnd)+N)
如果N J那么
温度=辐射(N)
伊纳雷(N)=伊纳雷(J)
InArray(J)=温度
如果结束
下一个
对于N=LBound(InArray)到UBound(InArray)
InArray(N)=N-1&&&InArray(N)
调试。打印InArray(N)
下一个
端接头

您需要实现什么目标?数组真的是您所需要的吗?或者您只需要对数据进行排序(最好不用数组就可以实现这一点)。最后,您尝试过什么?如果您想对数据进行排序,最好的方法是让Excel为您排序。然后你可以把数据读入数组,如果你愿意的话。我需要能够通过vb代码访问和修改数据,据我所知,这就是我的最终目标。我的最终目标是建立一种交易或无交易类型的游戏,玩家从一串按钮开始,每个按钮隐藏一个值,当用户单击该按钮时,将显示该按钮的值,该按钮将消失。@geekman2如果任何答案解决了您的问题,您可以通过单击向上/向下箭头下的勾号将该答案标记为已接受。更多详情请参见此。谢谢,但这将显示整个列表,我需要能够单独访问每个部分。也许我的知识有差距,如果是的话,请告诉我,我对VBA很陌生,这是我第一次体验阵列,我希望它或多或少随机排序
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