Как я могу сократить запись диапазона внутри кода в VBA-Excel? - PullRequest
0 голосов
/ 24 января 2019

Здравствуйте, у меня есть некоторые проблемы с моим кодом. Идея кода заключается в считывании значений температуры с двух / трех / четырех детекторов в камере с морозильной камерой в определенном диапазоне. Детекторы собирают данные в течение 48 часов в диапазонах от -35 градусов Цельсия до 85 градусов Цельсия (среднее количество записей для всего диапазона данных составляет около 13 тысяч строк). После этого макрос должен нарисовать диаграмму и, наконец, скопировать данные из диаграммы на другой лист (в моем случае это «DataChart»). Но в некоторых случаях, когда выбранная область (например, температура формы данных от -30 до 22) имеет много записей, возникает ошибка: «Формула ряда слишком длинная». Я знаю, что в обычной формуле можно написать 8196 символов. Можно ли сделать то же самое в VBA? Или, возможно, возможно объявить, ЕСЛИ некоторые данные по очереди, ТОГДА не занимайте ячейку за ячейкой, как B1 B2 B3 B4, но принимайте диапазон B1: B4. Вот мой код - отлично работает на коротких дистанциях.

Sub Zakres1Czujnik1_24()
Dim rng As Range, cell As Range
    Dim lRow As Long, i As Long
    Dim ws As Worksheet
    Dim Obj As ChartObject
    Dim seria As Series
    Dim NumberOfRows As Integer
    Dim X As Object
    Dim counter
    counter = 1
    Worksheets("DataChart").Columns(1).ClearContents
    Set ws = ThisWorkbook.ActiveSheet
    With ws
         lRow = .Range("E" & .Rows.Count).End(xlUp).Row
         For i = 1 To lRow
        '!!!!!!!!!!!!!!!!!!!!!!ZMIENIĆ WARTOŚCI T2 i U2 w zależności od zakresu temperatury !!!!!!!!!!!!!!!
            If .Range("E" & i).Value >= .Range("AH3").Value And _
               .Range("E" & i).Value <= .Range("AI3").Value Then
                If rng Is Nothing Then
                    Set rng = .Range("E" & i)
                Else
                    Set rng = Union(rng, .Range("E" & i))
                End If
            End If
        Next i
        If Not rng Is Nothing Then
             With .ChartObjects.Add(Left:=100, Width:=336, Top:=75, Height:=79)
                .Chart.SetSourceData Source:=rng
                .Chart.ChartType = xlLine
                .Left = Range("M10").Left
                .Top = Range("M10").Top
                .Select
             End With
         End If
     End With
    NumberOfRows = UBound(ActiveChart.SeriesCollection(1).Values)
    For Each X In ActiveChart.SeriesCollection
       With Worksheets("DataChart")
          .Range(.Cells(1, counter), _
          .Cells(NumberOfRows + 1, counter)) = _
Application.Transpose(X.Values)
      End With
      counter = counter + 1
    Next
    ThisWorkbook.Sheets("DataChart").Cells.Replace What:="#N/A",     Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

Спасибо за все советы.

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