gpt4 book ai didi

vba - 如何读取动态范围?

转载 作者:行者123 更新时间:2023-12-04 21:34:08 25 4
gpt4 key购买 nike

我正在尝试创建一个宏来读取数据并对数据进行计量经济学。在这一点上,我正在尝试实现潜在变量 MLE 估计。

数据可以是任意长度,具体取决于用户输入。假设 O 列和 P 列中有数据。事前我不知道存在多少行数据。

我想先读取有多少数据,然后将数据上传到我的数组变量中,然后才能对其进行任何计量经济学/统计。

在这个问题中,用户对每个变量有 25 个数据点。其他一些用户可能会输入具有不同数据点数量的不同数据。

在下面的代码中,我试图将变量“D”读入一个数组。我首先计算非空单元格的数量,然后创建一个该大小的数组并尝试将单元格的值读入数组。但我收到“类型不匹配”错误。

我已经尝试过“变体”和“数组”类型。 Variant 似乎有效,但 Array 无效。

enter image description here

Sub SampleStats()


Dim Rng As String


Dim Var1(1 To 100) As Double
Dim Var2() As Double
Dim Var3 As Variant
Dim NumElements2 As Integer
Dim length2 As Integer

NumElements2 = WorksheetFunction.Count(Range("P:P"))
length2 = NumElements2+1

MsgBox NumElements2

ReDim Var2(1 To NumElements2)

Rng = "P2:P" & length2

MsgBox Rng

Var3 = Range(Rng).Value
MsgBox Var3(1,1)


Var2 = Range(Rng).Value


MsgBox Var2(1,1)



End Sub

我的问题是:
  • 当您不知道列有多长时,读取数据的最佳方法是什么?
  • 当最终目标是进行一些统计时,存储数据(变量或数组或其他东西)的最佳方式是什么?
  • 最佳答案

    首先你得到 Range与要传递到数组中的数据列。其次,您使用 Application.Transpose对数据执行函数并将其分配给 VariantRange.Value 创建一维数组属性(property)。

    如果您只是分配范围的 Value直接到Variant您将得到一个 N 行 x 1 列的二维数组。示例代码:

    Option Explicit

    Sub GetRangeToArray()

    Dim ws As Worksheet
    Dim rngData As Range
    Dim varData As Variant
    Dim lngCounter As Long

    ' get worksheet reference
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    ' get the column to analyse - example here is A2:A last row
    ' so using 1 in column reference to Cells collection
    Set rngData = ws.Cells(2, 1).Resize(ws.Cells(ws.Rows.Count, 1).End(xlUp))

    ' convert range from 2d to 1d array
    varData = Application.Transpose(rngData.Value)

    ' test array
    For lngCounter = LBound(varData) To UBound(varData)
    Debug.Print varData(lngCounter)
    Next lngCounter

    End Sub

    关于vba - 如何读取动态范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182446/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com