Есть ли способ найти и заменить значение ссылки на ячейку в Excel 2010? VBA? - PullRequest
2 голосов
/ 10 октября 2011

У меня есть лист Excel, который содержит набор диаграмм, созданных из данных, извлеченных из другого листа в книге. В начале каждого месяца, когда я добавляю данные за последний месяц в таблицу данных, я смещаю все на один столбец так, чтобы то, что было в прошлом месяце, теперь было в столбце O, а что сейчас последний месяц всегда в столбце P. Проблема в том, что я хочу, чтобы рабочий лист с диаграммами всегда отображал текущий «последний месяц» (всегда столбец P), но он достаточно «умен», чтобы переконфигурировать графики для продолжения построения графиков. данные, которые он наносил на график (т. е. предыдущий «последний месяц»), который теперь находится в столбце O.

В частности, я бы хотел изменить (например)
=SERIES("Visits",Data!$D$4:$O$4,Data!$D$4:$O$4,1)
до
=SERIES("Visits",Data!$D$4:$P$4,Data!$D$4:$P$4,1)

Find & Replace, похоже, не способен на это. Возможно ли это с VBA? (Я полный нуб VBA.)

Ответы [ 3 ]

1 голос
/ 11 октября 2011

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

1 голос
/ 10 октября 2011

Я думаю, что проблема здесь в том, как вы «перемещаете» данные. Если вы удаляете / вставляете или перемещаете данные, Excel обновит их ссылки. Вы можете скопировать данные и вставить их в 1 столбец слева, а затем вставить текущие данные за последний месяц в столбец P.

Короче говоря, копирование и вставка не заставят Excel обновлять свои указатели, перемещение / удаление / вставка будут.

Если это не вариант, посмотрите на функцию OFFSET - если вы можете включить это в диапазон данных, вы сможете делать то, что хотите.

0 голосов
/ 09 сентября 2015

Нет встроенного способа выполнять поиск-замену для формул рядов, но вы можете написать код VBA для этого.Я написал учебник по этому поводу, Изменение формулы ряда - улучшенные процедуры .Я показываю несколько подпрограмм VBA, но самая простая из них приведена ниже.

Следующая подпрограмма проверяет активную диаграмму, а затем предлагает пользователю строки «изменить что» и «на что», $ O $ и $P $ в вашем случае, а затем изменяет все формулы ряда в активной диаграмме.

Sub ChangeSeriesFormula()
    ''' Just do active chart
    If ActiveChart Is Nothing Then
        '' There is no active chart
        MsgBox "Please select a chart and try again.", vbExclamation, _
            "No Chart Selected"
        Exit Sub
    End If

    Dim OldString As String, NewString As String, strTemp As String
    Dim mySrs As Series

    OldString = InputBox("Enter the string to be replaced:", "Enter old string")

    If Len(OldString) > 1 Then
        NewString= InputBox("Enter the string to replace " & """" _
            & OldString & """:", "Enter new string")
        '' Loop through all series
        For Each mySrs In ActiveChart.SeriesCollection
            strTemp = WorksheetFunction.Substitute(mySrs.Formula, _
                OldString, NewString)
            mySrs.Formula = strTemp
        Next
    Else
        MsgBox "Nothing to be replaced.", vbInformation, "Nothing Entered"
    End If
End Sub

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

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