Считывание значения ячейки и всей строки из рабочей книги и перебор нескольких строк

#excel #ms-access #vba

#excel #ms-access #vba

Вопрос:

1. Я хочу иметь возможность считывать значение из ячейки из закрытой рабочей книги и помещать его в переменную, где в каждой ячейке свой тип (т. Е. целое число или символ и т.д.).Также возможно ли прочитать всю строку за один снимок, поместить ее в массив и использовать в программе?

Алгоритм :

  1. Чтение из закрытого файла Excel -> Я хочу знать, как открыть файл и прочитать данные ячейки;

  2. Необходимо прочитать всю строку из столбца 1 в столбец 200 первой строки и присвоить ее переменной приведенным ниже способом, но при этом обеспечить сохранение типа данных (т. Е. строка должна оставаться строкой, а целое число — целым)

    Переменная 1 равна значению ячейки (A1), где A1 — строковая переменная, 2 равна значению ячейки (B1), где B1 — целочисленное значение, 3 равна значению ячейки (c1), где C1 — строка :: :: Переменная 200 эквивалентна значению ячейки (строка 1, столбец 200), где значение является строкой

    Каков наилучший способ сделать это.

  3. Я должен иметь возможность просматривать 100 строк и выполнять шаг 2 каждый раз для соответствующих строк и столбцов.

Не могли бы вы посоветовать

Ответ №1:

Шаг 1

Чтобы открыть книгу, вам нужно просто указать адрес вашей книги и присвоить его новой переменной, и, применив метод Open к объекту Workbooks, вы сможете открыть ее:

 Sub OpenWorkbook()
Dim FileName As String
'Assign the address of your file to the variable FileName
FileName = "FileAddressFileName.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 = "FileAddressFileName.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
  

Шаг 3

Для вашей проблемы вам нужно определить массивы. В противном случае вы не сможете решить эту проблему. Если вам нужно просмотреть 100 строк, вам нужно определить массив размером 100 для каждого столбца. Массивы A (99) начинаются с A (0) по A (99), размерность которых равна 100. Например, для итерации в 3 столбца по 100 строк вы можете написать:

 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" amp; i 1)
  B(i) = Workbooks("Excel File Name").Worksheets("Sheet Name").Ragne("B" amp; i 1)
  C(i) = Workbooks("Excel File Name").Worksheets("Sheet Name").Ragne("C" amp; 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
  

Также можно закрыть рабочую книгу с помощью кода. Однако вам необходимо назначить вашу рабочую книгу объекту, а затем применить метод close к этому объекту. Но я думаю, вам это не нужно.

Ваш вопрос был немного широким. Но я надеюсь, что смог бы помочь вам решить вашу проблему.

Комментарии:

1. Привет, Киран, большое тебе спасибо за твой ценный совет. Это, безусловно, было очень полезно.

2. Я хочу сузить свои требования и сделать их более конкретными, в основном мне нужно прочитать только одну строку, содержащую 200 ячеек, и я хочу сохранить значение каждой ячейки в уникальной переменной (каждая ячейка может иметь разный тип данных). Я хочу повторить то же самое для 99 строк. Переменные, которые я буду использовать для присвоения ячеек от 1 до 200 в строке, останутся неизменными, только значения этих 200 переменных могут продолжать меняться, т. е. когда в цикле переменные будут иметь значения из 2-й строки и так далее и тому подобное до строки 99. каков наилучший способ добиться этого?

3. В принципе, как только переменная от 1 до переменной 200 будет заполнена, я произведу некоторые вычисления, и тогда мне больше не понадобятся значения, я готов заполнить эти переменные от 1 до переменной 200 следующим набором строк..

4. Невозможно поместить разные типы данных в массив. Вы можете это сделать, но при этом все ваши данные будут рассматриваться как тип variant, и поэтому вы не сможете выполнить вычисления на своих данных. Если вы знаете последовательность ваших столбцов и то, как они расположены, возможно, удастся что-то сделать. Но какие вычисления вы хотите выполнить? Единственное возможное вычисление, которое я могу представить для 200 столбцов с разными типами данных, связано со строками. Например, объедините все 200 столбцов. Поэтому у вас не возникнет проблем с помещением всех 200 ячеек в массив.

5. Привет, Киан, я попытался выполнить инструкцию assign, она выдавала ошибку, в которой говорилось, что метод или свойство не поддерживаются, это была точка при назначении A1. Существует ли альтернативный подход для присвоения значения ячейки переменной?