Excel Выпадающий список формул или функций VBA, которые будут делать то же самое - PullRequest
0 голосов
/ 02 июля 2019

Могу ли я иметь раскрывающийся список, в котором я выбираю, какую формулу использовать, у меня есть ряд формул, например =indirect(address(row(),4)))*deposit, где депозит является именованным диапазоном, и я хочу иметь возможность выбрать, какую формулу использовать в основном единственнуючасть формулы, которая изменится - это именованный диапазон

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

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

1 Ответ

0 голосов
/ 02 июля 2019

Написал это некоторое время назад для другой цели, изменил и добавил некоторые комментарии.

Поместите в ThisWorkbook и запустите макрос, напечатав (без кавычек) «_» в любой ячейке, кроме столбца 4 (D: D) и затем нажмите Enter.

Кроме того, ваши именованные диапазоны должны заканчиваться символом "_" (например, "deposit_"), это связано с состоянием второго регистра и необходимо избегать срабатывания при редактированииописательная ячейка текста.

Ввод "-" и нажатие клавиши Enter удаляют проверку и значение.

Public Str As String

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Index = 1 Then 'If you want to limit the reach of this
    With Target
        If .Count = 1 Then 'Limits to single cell to avoid errors
            If .Column <> 4 Then 'So that it can't refer to itself unless you try in one of them named ranges
                Select Case True
                    Case (.Value Like "_") 'Triggers if cell value equals "_"
                        For Each nm In ThisWorkbook.Names 'Adds all names to a string
                            Str = Str & "," & nm.Name
                        Next nm
                        .Validation.Delete 'Removes previous validation
                        .Validation.Add Type:=xlValidateList, Formula1:=Replace(Str, ",", "", 1, 1) 'Adds the list of names to validation
                        .Validation.ShowError = False 'Makes it possible edit without removing validation
                        .Select: SendKeys ("%{UP}") 'Triggers the dropdown list

                    Case (.Value Like "*_") 'Triggers if cell value ends with "_"
                        .FormulaR1C1 = "=RC4*" & .Value 'Applies formula

                    Case (.Value Like "-") 'Triggers if cell value equals "-"
                        .Validation.Delete 'Removes validation from cell
                        .Value = "" 'Removes value

                End Select
                Str = "" 'Empties out string
            End If
        End If
    End With
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...