Макрос сглаживания данных или сценарий Python в Excel для отсутствующих данных - PullRequest
0 голосов
/ 29 марта 2019

Я ищу макрос или скрипт на python, который может помочь мне решить вопрос ниже.

У меня есть лист Excel с тысячами строк данных. Иногда происходят перебои в работе сервера, и в эти дни нет данных. Эти случаи обозначены символом «/» в этой конкретной ячейке. Я хочу иметь возможность найти все экземпляры этих "/" и затем заполнить число в этих ячейках, эквивалентное среднему из ячеек выше и ниже его, чтобы "исправить" ошибку.

Нюанс 1: В тех случаях, когда в строке несколько символов "/", я хочу, чтобы все они были средними из двух сэндвичевых ячеек выше и ниже строки ошибок.

Я приложил образец изображения ниже, с нетерпением жду каких-либо ответов!

В настоящее время я пытаюсь сделать это вручную, что, очевидно, не может работать.

enter image description here

1 Ответ

0 голосов
/ 29 марта 2019

Если вам нужно использовать VBA вместо некоторой формулы (см. Другой ответ!), Вот несколько довольно простых макросов:

До:

enter image description here

Макрос:

Sub Test()

With ActiveWorkbook.Sheets(1)

    LR = .Cells(Rows.Count, 1).End(xlUp).Row
    LC = .Cells(1, Columns.Count).End(xlToLeft).Column
    Set RNG = .Range(Cells(1, 1), Cells(LR, LC))
    With RNG
        Set CL = .Find("/", LookIn:=xlValues)
        If Not CL Is Nothing Then
            FA = CL.Address
            Do
                X = 1
                If CL.Offset(1, 0) <> "/" Then
                    CL.Value = WorksheetFunction.Average(CL.Offset(-1, 0), CL.Offset(1, 0))
                Else
                    Do
                        X = X + 1
                    Loop While CL.Offset(X, 0).Value = CL.Value
                    CL.Value = WorksheetFunction.Average(CL.Offset(-1, 0), CL.Offset(X + 1, 0))
                End If
                Set CL = .FindNext(CL)
            If CL Is Nothing Then
                GoTo DF
            End If
            Loop While CL.Address <> FA
        End If
DF:
    End With
End With

End Sub

После:

enter image description here

Вам, очевидно, придется изменить RNGв соответствии с вашими потребностями, например: .Range(Cells(3, 2), Cells(LR, LC))?

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

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