Excel: Сделать List (of Excel.Range) по столбцу с пустыми и заполненными ячейками - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго времени! За несколько часов так и не решил задачку. Файл Excel в столбце D имеет пронумерованные отдельные выборки. Надо сделать список объектов типа Range, соответствующих выделенным областям на картинке. Вручную границы забивать - не вариант, это кусочек файла, в исходном файле >3000 строк. Надо автоматически. Работаю с Excel.Application Пытался так:
Листинг программы
  1. For th = 2 To UsedRangeEx.SpecialCells(XlCellType.xlCellTypeLastCell).Row
  2. If Not iLastRowNum > th Then 'если последняя ячейка предыдущего определенного Range не ниже, чем строка. с которой начинаем работать
  3. Do While String.IsNullOrEmpty(ExSheet.Cells(iFirstRowNum, ColNumber(1)).Value) 'проверяем. чтобы первая строка была не пустой
  4. iFirstRowNum = iFirstRowNum + 1
  5. Loop
  6. TMPRG = ExSheet.Range(Excel.Cells(iFirstRowNum, ColNumber(1)), Excel.Cells.Cells(laststring, ColNumber(1))) 'laststring - последняя строка во всем диапазоне
  7. iLastRowNum = TMPRG.Cells.SpecialCells(XlCellType.xlCellTypeBlanks).Row - 1 'ищем последнюю непустую ячейку. Не работает тут. Говорит - не удалось найти ни одной ячейки по условию.
  8. TempRG = ExSheet.Range(ExSheet.Cells(iFirstRowNum, ColNumber(0)), ExSheet.Cells(iLastRowNum, ColNumber(2)))
  9. Rages_int.Add(TempRG)
  10. iFirstRowNum = iLastRowNum + 1
  11. End If
  12. Next
Переменные в примере: UsedRangeEx - вся активная таблица (A1 : E17) iLastRowNum - номер последней строки в "определяемом" диапазоне iFirstRowNum - номер первой строки в "определяемом" диапазоне ExSheet - активный лист ColNumber - номера столбцов, соответственно 0 - столбец А (1), 1 - столбец D (4), 3 - столбец E (5) Rages_int - List (Of Range) TMPRG и TempRG - объекты типа Range Код довольно некрасивый, наверняка существует способ проще.

Решение задачи: «Excel: Сделать List (of Excel.Range) по столбцу с пустыми и заполненными ячейками»

textual
Листинг программы
  1. appExcel = New Excel.Application
  2. Dim sh As Worksheet = appExcel.Workbooks.Open(fileName).Sheets(1)
  3. appExcel.Visible = False
  4. Dim lst As New List(Of Range)
  5. Dim rn As Range = sh.UsedRange
  6. Dim ob(,) As Object = rn.Value2
  7. For i = 2 To 6
  8.     For j = 1 To rn.Rows.Count
  9.         If ob(j, 4) IsNot Nothing AndAlso ob(j, 4) = i Then
  10.             lst.Add(appExcel.Range(rn.Cells(j, 1), rn.Cells(j, 5)))
  11.         End If
  12.     Next
  13. Next

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы