Получение публичной функции для копирования столбца в Excel - PullRequest
0 голосов
/ 12 октября 2019

Я сделал следующую публичную функцию, чтобы выбрать квартал на основе номера месяца в моих данных.

Public Function quarter()

Dim Number As Integer

Dim quarterChosen As String

Number = Worksheets("Sheet1").Cells(Application.ActiveCell.Row, 2).Value

Select Case Number

Case 1 To 3

quarterChosen = "Q1"

Case 4 To 6

quarterChosen = "Q2"

Case 7 To 9

quarterChosen = "Q3"

Case 10 To 12

quarterChosen = "Q4"

End Select

quarter = quarterChosen


End Function

Он работает, но когда я перетаскиваю его вниз, чтобы скопировать вниз, он все еще считает активную ячейкуоригинальная клетка началась в. Мне нужно переписать формулу, чтобы получить желаемый результат. Как заставить эту активную ячейку измениться, когда я перетаскиваю или копирую ее?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Передайте входную ячейку в качестве аргумента вашей функции (и добавьте тип вывода) вдоль этой строки.

Таким образом, вы вводите формулу в B1 =quarter(A1).

Public Function quarter(r As Range) As String

Dim quarterChosen As String

Select Case r.Value
    Case 1 To 3:   quarter = "Q1"
    Case 4 To 6:   quarter = "Q2"
    Case 7 To 9:   quarter = "Q3"
    Case 10 To 12: quarter = "Q4"
    Case Else:     quarter = "n/a"
End Select

End Function

enter image description here

0 голосов
/ 12 октября 2019

Вы должны использовать Application.Volatile в верхней части вашей функции. Я только что написал этот для вас, и все работает мой конец:)

    Public Function Quarter(arg1 As Long)
    Dim quarterChosen As String

    Application.Volatile

    Select Case arg1
        Case 1 To 3
        quarterChosen = "Q1"

        Case 4 To 6
        quarterChosen = "Q2"

        Case 7 To 9
        quarterChosen = "Q3"

        Case 10 To 12
        quarterChosen = "Q4"
    End Select

    Quarter = quarterChosen
    End Function

Вы также должны передать функцию ячейку, которую вы хотите оценить.

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