Google Sheet If выпадающий - PullRequest
       0

Google Sheet If выпадающий

0 голосов
/ 25 февраля 2020

У меня есть выпадающий список для столбца A, в котором я хочу выбрать значение из выпадающего списка только в течение определенного времени (ie. 3 раза), после того как я выберу значение из выпадающего меню 3 раза, если я попытаюсь выбрать его 4-й раз, значение должно быть удалено из выпадающего списка или не может быть выбрано. Возможно ли это с помощью Excel или Google лист?

https://docs.google.com/spreadsheets/d/1nbXAkK565V24KDTAzE68q8rQgQWzn-jDJz_6piNYyEw/edit?usp=sharing

В приведенном выше листе Google, я выбрал красный 3 раза, теперь, если я хочу выбрать Красный 4 время, я не должен быть в состоянии выбрать, или красный должен быть удален из списка.

Я знаю, используя Excel VBA, я могу сделать то же самое, используя приведенный ниже код, но мы можем добавить то же самое на листы Google?

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim lVal As Long
Dim check2 As Long

If Target.Count > 2 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
   'do nothing
Else
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal

  lVal = Application.WorksheetFunction _
        .CountIf(Columns(Target.Column), _
            "*" & newVal & "*")
  If lVal > 3 Then
    If newVal = "" Then
        'do nothing
    Else
        MsgBox "Not available"
        Target.Value = oldVal
    End If

  Else
    If Target.Column >= 47 And Target.Column <= 56 Then
      If oldVal = "" Then
        'do nothing
        Else
        If newVal = "" Then
        'do nothing
        Else
        Target.Value = oldVal _
          & ", " & newVal
        End If
      End If
    End If
  End If

End If



exitHandler:
  Application.EnableEvents = True
End Sub

1 Ответ

0 голосов
/ 04 марта 2020

Итак, проведя некоторое исследование, я нашел способ достичь того, к чему вы стремились.

Решение

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

Вот пример кода, который сам объяснил с помощью комментариев, чтобы добиться того, что вы хотите в вашем конкретном случае c:

function onEdit(){
  // get the sheet and values to check if in that range there are more than 3 elements selected
  var ss =  SpreadsheetApp.getActiveSheet();
  var values = ss.getRange('A1:A18').getValues();
  // this variable is for counting the amount of elements selected
  var count = 0;
  
  for(i=0;i<values.flat().length;i++){
    // if an element in that range is not empty
    if(values.flat()[i]!=''){
      count++;
    }
  }
  
  // if the count is over 3 then disable the dropdowns
  if(count>3){
    ss.getRange('A1:A18').setDataValidation(null);
  }  
}

Надеюсь, это помогло вам. Дайте мне знать, если вам нужно что-то еще или вы что-то не поняли. :)

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