如何在vba-excel中缩短代码内的范围记录?

时间:2019-01-24 11:47:10

标签: excel vba

您好,我的代码有问题。代码的想法是从特定范围内的冷冻加热室中的两个/三个/四个检测器读取温度值。在48小时内,检测器在-35摄氏度至85摄氏度的范围内收集数据(整个数据范围的平均记录数接近13000行)。之后宏应绘制图表并将最终数据从图表复制到另一张纸上(在我的情况下是“ 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

谢谢您的所有建议。

0 个答案:

没有答案