Excel: Сделать List (of Excel.Range) по столбцу с пустыми и заполненными ячейками - Visual Basic .NET
Формулировка задачи:
Доброго времени!
За несколько часов так и не решил задачку.
Файл Excel в столбце D имеет пронумерованные отдельные выборки. Надо сделать список объектов типа Range, соответствующих выделенным областям на картинке. Вручную границы забивать - не вариант, это кусочек файла, в исходном файле >3000 строк. Надо автоматически.
Работаю с Excel.Application
Пытался так:
Переменные в примере:
UsedRangeEx - вся активная таблица (A1 : E17)
iLastRowNum - номер последней строки в "определяемом" диапазоне
iFirstRowNum - номер первой строки в "определяемом" диапазоне
ExSheet - активный лист
ColNumber - номера столбцов, соответственно 0 - столбец А (1), 1 - столбец D (4), 3 - столбец E (5)
Rages_int - List (Of Range)
TMPRG и TempRG - объекты типа Range
Код довольно некрасивый, наверняка существует способ проще.
Листинг программы
- For th = 2 To UsedRangeEx.SpecialCells(XlCellType.xlCellTypeLastCell).Row
- If Not iLastRowNum > th Then 'если последняя ячейка предыдущего определенного Range не ниже, чем строка. с которой начинаем работать
- Do While String.IsNullOrEmpty(ExSheet.Cells(iFirstRowNum, ColNumber(1)).Value) 'проверяем. чтобы первая строка была не пустой
- iFirstRowNum = iFirstRowNum + 1
- Loop
- TMPRG = ExSheet.Range(Excel.Cells(iFirstRowNum, ColNumber(1)), Excel.Cells.Cells(laststring, ColNumber(1))) 'laststring - последняя строка во всем диапазоне
- iLastRowNum = TMPRG.Cells.SpecialCells(XlCellType.xlCellTypeBlanks).Row - 1 'ищем последнюю непустую ячейку. Не работает тут. Говорит - не удалось найти ни одной ячейки по условию.
- TempRG = ExSheet.Range(ExSheet.Cells(iFirstRowNum, ColNumber(0)), ExSheet.Cells(iLastRowNum, ColNumber(2)))
- Rages_int.Add(TempRG)
- iFirstRowNum = iLastRowNum + 1
- End If
- Next
Решение задачи: «Excel: Сделать List (of Excel.Range) по столбцу с пустыми и заполненными ячейками»
textual
Листинг программы
- appExcel = New Excel.Application
- Dim sh As Worksheet = appExcel.Workbooks.Open(fileName).Sheets(1)
- appExcel.Visible = False
- Dim lst As New List(Of Range)
- Dim rn As Range = sh.UsedRange
- Dim ob(,) As Object = rn.Value2
- For i = 2 To 6
- For j = 1 To rn.Rows.Count
- If ob(j, 4) IsNot Nothing AndAlso ob(j, 4) = i Then
- lst.Add(appExcel.Range(rn.Cells(j, 1), rn.Cells(j, 5)))
- End If
- Next
- Next
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д