VBA извлекает значения из диапазона переменных в файле нескольких листов - PullRequest
0 голосов
/ 08 февраля 2019

Образец данных

Я все еще изучаю VBA, и я понимаю, что основная задача постановки вопроса о потоке стека здесь ясна в процессе цели и мышления.Посмотрим, смогу ли я прояснить суть.

Я сталкиваюсь с файлами с несколькими листами, которые имеют следующие особенности:

  • Данные временных рядов, которые могут быть организованы с позициями в строках и годах в столбцах или наоборот, донне имеет фиксированного диапазона.
  • Каждый временной ряд может иметь разные имена для одного и того же элемента в разных файлах (например, Revenues, Rev, XYZ Reven и т. Д.).

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

Первый подход, который я попытался, состоял в том, чтобы адаптировать код, который я нашел изJ.Walkenbackh при отображении файла (https://www.dummies.com/software/microsoft-office/excel/using-vba-to-create-a-worksheet-map/), но я не нашел четкой стратегии для работы с текстовыми ячейками, которые могут также принадлежать числовым данным из-за плохого форматирования исходного файла. Ниже приведена моя частичная попытка получитьЯчейки, которые являются текстовыми файлами.

Я думаю, что я запутался в подходе, который я должен использовать здесь, и я также усложнил вопрос, пытаясь использовать классы для отображения временных рядов со стандартными именами.

Надеюсь, я ясно изложил свою точку зрения и был бы признателен за вашу помощь. Спасибо!

    Sub QuickMap()
  Dim FormulaCells As Variant
  Dim TextCells As Variant
  Dim NumberCells As Variant
  Dim Area As Range
  Dim cel As Range
  Dim coll As New Collection

  If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
'  Create object variables for cell subsets
  On Error Resume Next
  Set FormulaCells = Range("A1").SpecialCells(xlFormulas, xlNumbers + xlTextValues + xlLogical)
  Set TextCells = Range("A1").SpecialCells(xlConstants, xlTextValues)
  Set NumberCells = Range("A1").SpecialCells(xlConstants, xlNumbers)
  On Error GoTo 0

'  Add a new sheet and format it
  Sheets.Add
  With Cells
    .ColumnWidth = 2
    .Font.Size = 8
    .HorizontalAlignment = xlCenter
  End With
  Application.ScreenUpdating = False

'  Do the formula cells
  If Not IsEmpty(FormulaCells) Then
    For Each Area In FormulaCells.Areas
      With ActiveSheet.Range(Area.Address)
        .Value = "F"
        .Interior.ColorIndex = 3
      End With
    Next Area
  End If

'  Do the text cells
  If Not IsEmpty(TextCells) Then
    For Each Area In TextCells.Areas
      With ActiveSheet.Range(Area.Address)
        .Value = "T"
        .Interior.ColorIndex = 4
      End With
    Next Area
  End If

'  Do the numeric cells
  If Not IsEmpty(NumberCells) Then
    For Each Area In NumberCells.Areas
      With ActiveSheet.Range(Area.Address)
        .Value = "N"
        .Interior.ColorIndex = 6
      End With
    Next Area
  End If

  'Check if range is vertical(?)

  'Loop through each cell of the area
   For Each Area In TextCells.Areas
    For Each cel In Area
        If cel.Value <> vbNullString Then
             coll.Add cel.Value, cel.Address
        End If
    Next cel
   Next Area

b_frmSelect.List1.list = coll
b_frmSelect.Show
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...