Как сравнить заданную ячейку c с диапазоном столбцов и вернуть строку, связанную с диапазоном столбцов? - PullRequest
0 голосов
/ 16 апреля 2020

Спасибо, что прочитали мой первый вопрос. Я только начинаю с Google листов, чтобы, пожалуйста, терпеть меня. Вот лист, с которым я работаю

Итак, этот лист, если для игры я играю и мы назначаем атаки гильдии на основе уровней мощности. Я пытаюсь создать функцию или сценарий и поместить его в столбец O. Мне бы хотелось, чтобы эта функция сравнивала столбец F с указанной c ячейкой в ​​столбце M и затем возвращала пользователя, связанного с столбцом F, который>> = чем указанная c ячейка в столбце М. Как это введите описание изображения здесь Я выделил первые три в качестве примера.

Я, очевидно, могу сделать это вручную, но мне нужно время, и хотел автоматизировать этот процесс, чтобы он стал более эффективным. Я пробовал Vlookups, MATCH, IF, и я потерпел неудачу. Любая помощь будет принята с благодарностью. Опять же, я только начинающий с листами Google, поэтому, пожалуйста, go спокойно. :)

1 Ответ

0 голосов
/ 17 апреля 2020

Решение

Поскольку вы упомянули, что вы также будете довольны решением на основе сценариев, я создал этот сценарий, который, по моему мнению, решает вашу проблему. Там есть комментарии, объясняющие шаг за шагом, как это работает:

function myFunction() {
  // Get our sheet
  var ss = SpreadsheetApp.getActive().getSheetByName('Automate Test');
  
  // Get the values of the ranges of F and M. Flat will convert the 2D array we get from getValues() into a 1D one which is easier to work with
  var valuesF = ss.getRange('F2:F16').getValues().flat();
  var valuesD = ss.getRange('D2:D16').getValues().flat();
  var valuesM = ss.getRange('M2:M16').getValues().flat();
  var valuesN = ss.getRange('N17:N31').getValues().flat();
  
  
  // We will iterate through all the players in column M to find their opponents
  for(i=0;i<valuesM.length;i++){
    // We create an empty array to be filled with the list of possible opponents to then choose a random one of the list
    var playersHigherEqual = [];
    
    // Iterate through the opponent list
    for(j=0;j<valuesF.length;j++){
      // If the opponent meets the condition
      if(valuesF[j]>= valuesM[i]){
        // Add it to the array of possible opponents
        playersHigherEqual.push(ss.getRange(j+2, 2).getValue());
      }
    }
    
    //Finally we will set the opponent by choosing a random one out of the list. Note that i+2 is because the arrays start from 0
    ss.getRange(i+2, 15).setValue(playersHigherEqual[Math.floor(Math.random()*playersHigherEqual.length)]);
  }
  
  
  // We will iterate through all the players in column M to find their opponents
  for(i=0;i<valuesN.length;i++){
    // We create an empty array to be filled with the list of possible opponents to then choose a random one of the list
    var playersHigherEqual = [];
    
    // Iterate through the opponent list
    for(j=0;j<valuesD.length;j++){
      // If the opponent meets the condition
      if(valuesD[j]>= valuesN[i]){
        // Add it to the array of possible opponents
        playersHigherEqual.push(ss.getRange(j+2, 2).getValue());
      }
    }
    
    //Finally we will set the opponent by choosing a random one out of the list. Note that i+2 is because the arrays start from 0
    ss.getRange(i+17, 15).setValue(playersHigherEqual[Math.floor(Math.random()*playersHigherEqual.length)]);
  }  
  
}

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

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

...