Как выбрать ячейки между двумя значениями в столбце и нарисовать диаграмму из выбранных элементов - PullRequest
0 голосов
/ 22 января 2019

У меня проблема.Мне нужно написать макрос, который выбирает значения в столбце E. Значения выбранных элементов должны быть между значениями в ячейках T2 и U2.После выбора макрос должен нарисовать график.

Я пробовал 3 способа:

Первый подход:

Sub wykres1()  
    Dim rng As Range
    Dim cell As Range 

    Set rng = Range("E1", Range("E65536").End(xlUp))  

    For Each cell In rng  

    If cell.Value > "T2" and cell.value < "U2" Then Cell.Select    
        With Selection    
            ActiveSheet.Shapes.AddChart2    
        End With    
    Next cell    
End Sub

Wykres1 Не работает, потому что строка с if подсвечена красным.

Второй подход:

Sub wykres2()    
    Dim rng As Range    
    Dim cell As Range    

    Set rng = Range("E1", Range("E65536").End(xlUp))    

    For Each cell In rng    
        If cell.Value > ActiveSheet.Cell(2,20).Value and cell.value < ActiveSheet.Cell(2,21).Value Then Cell.Select    
        With Selection    
            ActiveSheet.Shapes.AddChart2    
        End With    
    Next cell
End Sub

Wykres2 Не работает, потому что строка с if подсвечена красным.

Третий подход:

Sub wykres3()     
    Dim rng As Range
    Dim cell As Range

    Set rng = Range("E1", Range("E65536").End(xlUp))

    For Each cell In rng
        If cell.value > -35 And cell.value < -32 Then cell.Select
        With Selection
            ActiveSheet.Shapes.AddChart2    
        End With
    Next cell
End Sub

Wykres3 зависает после запуска.Когда я удаляю деталь с чертежом, макрос выбирает одну ячейку, а не диапазон с выбранными значениями.И здесь я помещаю значения в макрос (-35) (-32) - но меня интересует возможность поместить значения из ячеек (T2) (U2).


Как яупомянуто - мне нужно создать макрос, который выбирает ячейки в столбце E со значениями между значениями в ячейках T2 и U2.После выбора макроса необходимо нарисовать график.

Спасибо за помощь.

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте это (не проверено). Избегайте использования .Select. Работа с объектами. Возможно, вы захотите увидеть Как избежать использования Select в Excel VBA

Sub wykres1()
    Dim rng As Range, cell As Range
    Dim lRow As Long, i As Long
    Dim ws As Worksheet

    '~~> Change as applicable
    Set ws = Sheet1

    With ws
        '~~> Find last row in Col E
        lRow = .Range("E" & .Rows.Count).End(xlUp).Row

        '~~> Loop though the range
        For i = 1 To lRow
            If .Range("E" & i).Value > .Range("T2").Value And _
               .Range("E" & i).Value < .Range("U2").Value Then
                With .Range("E" & i)
                    '
                    '~~> Do Something
                    '
                End With
            End If
        Next i
    End With
End Sub

Как я уже говорил, мне нужно создать макрос, который выбирает ячейки в столбце E со значениями между значениями в ячейках T2 и U2. После выделения макроса необходимо нарисовать график.

Вы можете сохранить каждый найденный диапазон в одном объекте диапазона, а затем использовать его. Смотрите этот пример

Sub wykres1()
    Dim rng As Range, cell As Range
    Dim lRow As Long, i As Long
    Dim ws As Worksheet
    Dim Obj As ChartObject

    '~~> Change as applicable
    Set ws = Sheet1

    With ws
        '~~> Find last row
        lRow = .Range("E" & .Rows.Count).End(xlUp).Row

        '~~> Liip though the range
        For i = 1 To lRow
            If .Range("E" & i).Value > .Range("T2").Value And _
               .Range("E" & i).Value < .Range("U2").Value Then
                '~~> Store the cell in a range object
                If rng Is Nothing Then
                    Set rng = .Range("E" & i)
                Else
                    Set rng = Union(rng, .Range("E" & i))
                End If
            End If
        Next i

        '~~> Once you have the range, create a chart and assign range
        If Not rng Is Nothing Then
             With .ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
                .Chart.SetSourceData Source:=rng
                .Chart.ChartType = xlColumnClustered
            End With
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...