【问题标题】:Read cell value & entire row from a workbook & loop through multiple rows从工作簿中读取单元格值和整行并遍历多行
【发布时间】:2019-03-02 10:37:55
【问题描述】:

1.我希望能够从已关闭的工作簿中的单元格中读取值并将其放入变量中,其中每个单元格的类型不同(即整数或字符等)。也可以读取一次拍摄整行并将其放置在数组中并在程序中使用它?

算法:

  1. 从已关闭的 excel 文件中读取 -> 我想知道如何打开文件并读取单元格数据;

  2. 需要从第一行的第 1 列到第 200 列读取整行并需要以以下方式将其分配给变量,但要确保数据类型保持不变(即字符串应保持字符串和整数保持为整数)

    变量 1 等于 (A1) 的单元格值,其中 A1 是一个字符串 变量 2 等于 (B1) 的单元格值,其中 B1 是整数 Varaibale 3 等于 (c1) 的单元格值,其中 C1 是字符串 :: :: 变量 200 等于(第 1 行第 200 列)的单元格值,其中值为字符串

    最好的方法是什么。

  3. 我应该能够通过 100 行并每次针对相应的行和列执行第 2 步。

请指教

【问题讨论】:

    标签: excel ms-access vba


    【解决方案1】:

    第一步

    要打开工作簿,您只需提供工作簿的地址并将其分配给新变量,然后通过对对象 Workbooks 应用 Open 方法,您可以打开它:

    Sub OpenWorkbook()
    Dim FileName As String
    'Assign the address of your file to the variable FileName
    FileName = "\FileAddress\FileName.xlsx"
    Workbooks.Open FileName
    End Sub
    

    到目前为止,您已经打开了所需的 Excel 工作簿。

    第 2 步 然后,您需要阅读工作簿中所需的单元格。
    您应该将每个单元格分别分配给一个新变量。 因此,您可以编写代码为您执行此操作:

    Sub OpenWorkbook()
    Dim FileName As String
    'Assign the address of your file to the variable FileName
    FileName = "\FileAddress\FileName.xlsx"
    Workbooks.Open FileName
    Dim A1 As String
    A1 = Workbooks("Excel File Name").Worksheets("Sheet Name").Range("A1")
    Dim B1 As Integer
    B1 = Workbooks("Excel File Name").Worksheets("Sheet Name").Range("B1")
    Dim C1 As Integer
    C1 = Workbooks("Excel File Name").Worksheets("Sheet Name").Range("C1")
    'You continue until the column 200. If  there is some logic you can assign your similar variables by a for loop to an array.
    End Sub
    

    第三步

    对于您的问题,您需要定义数组。否则你无法解决这个问题。 如果需要遍历 100 行,则需要为每列定义一个维度为 100 的数组。数组 A(99) 从 A(0) 到 A(99),维数为 100。 例如,对于 100 行的 3 列迭代,您可以编写:

    Sub IterationInRows()
    Dim A(99) As String, i As Integer
    Dim B(99) As Integer
    Dim C(99) As String
    'Continue through all your variables
    For i = 0 to 99
      A(i) = Workbooks("Excel File Name").Worksheets("Sheet Name").Ragne("A" & i+1)
      B(i) = Workbooks("Excel File Name").Worksheets("Sheet Name").Ragne("B" & i+1)
      C(i) = Workbooks("Excel File Name").Worksheets("Sheet Name").Ragne("C" & i+1)
    Next i
    End Sub
    

    我认为通过结合这 3 个步骤,您可以解决您的问题。

    如果您的列排列中有逻辑,您可以定义多维数组并将具有相似数据类型的列的所有值分配给该数组。

    假设 奇数列 (1, 3, 5, ..., 199) 都是字符串。因此,您有 100 个字符串数据类型的列,并且您希望迭代 100 行。

    所以你需要定义一个像 A(99,99) 这样的数组,通过使用两个嵌套的 for 循环来遍历所有数组。

    所以你写这样的代码:

    Sub Iteration2()
    Dim A(99,49) As String, i as integer, j as integer
    For i = 0 to 99
      For j = 0 to 99
        A(i,j) = Workbooks("Excel File Name").Worksheets("Sheet Name").Cells(i+1,2*j+1)
      Next j
    Next i 
    End Sub
    

    也可以通过代码关闭您的工作簿。但是,您需要将工作簿分配给一个对象,然后将该方法应用到该对象附近。但我认为你不需要它。

    你的问题有点宽泛。但我希望我能帮助您解决您的问题。

    【讨论】:

    • 嗨 Kiran,非常感谢您的宝贵建议。这当然很有帮助。
    • 我想缩小我的要求并保持更具体,基本上我只需要读取一行有 200 个单元格并且我想将每个单元格的值存储在一个唯一变量中(每个单元格可能是不同的数据类型)。我想对 99 行重复同样的事情。我将用于连续分配单元格 1 到 200 的变量将保持不变,只是这 200 个变量的值可以不断变化,即当在循环中时,变量的值将从第 2 行以此类推,以此类推直到第 99 行。实现这一目标的最佳方法是什么?
    • 基本上,一旦填充了变量 1 到变量 200,我将进行一些计算,然后我将不再需要这些值,我已准备好用下一组行填充那些变量 1 到变量 200 ..
    • 不能将不同的数据类型放在一个数组中。您可以这样做,但它会将您的所有数据视为变体类型,因此您无法对数据进行计算。如果您知道列的顺序以及它们的排列方式,则可以做一些事情。但是你想要做的计算是什么?对于具有不同数据类型的 200 列,我能想象的唯一可能的计算是与字符串相关的东西。例如连接所有 200 列。因此,将所有 200 个单元格放入一个数组中没有问题。
    • 嗨 Kian,我尝试执行分配语句,它给出了一个错误,说方法或属性不支持这是 A1 分配的一个点。是否有其他方法可以将单元格值分配给变量?
    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多