0
votes

Implémentation de vlookup et correspondance dans la fonction

J'essaie de créer une fonction dans Sheets qui combine une combinaison "Vlookup" et "Match" que j'utilise fréquemment.

Je souhaite utiliser ma fonction "Rates" pour accepter 1 argument et renvoyer une combinaison de Vlookup et Match, qui utilise toujours les mêmes valeurs.

Vlookup (argument, DEFINED RANGE (reste toujours la même plage définie), match (A1 (toujours cellule A1), DIFFERENT DEFINED RANGE, 0), FALSE)

J'ai essayé de créer un script, mais je n'ai aucune expérience de codage, et je reçois un message d'erreur indiquant que "vlookup n'est pas défini"

function ratesearch(service) {
  return vlookup(service, Rates, Match($A$1,RatesIndex,0),FALSE);
}

Réel résultats: #ERROR!

ReferenceError: "vlookup" n'est pas défini. (ligne 2).


0 commentaires

3 Réponses :


-1
votes

vlookup n'est pas quelque chose que vous pouvez utiliser dans une fonction dans un script, c'est une formule de feuille de calcul.

Les scripts Google utilisent JavaScript, vous devrez donc écrire votre code dans JS puis le générer dans une cellule appropriée.

Si vous pouviez partager votre feuille / script, nous pourrions vous aider à le comprendre.


0 commentaires

0
votes
function findRate() {
  var accountName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1,1).getValue(); //determine the account name to use in the horizontal search
  var rateTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Rates'); //hold the name of the rate tab for further dissection
  var rateNumColumns =rateTab.getLastColumn(); //count the number of columns on the rate tab so we can later create an array
  var rateNumRows = rateTab.getLastRow(); //count the number of rows on the rate tab so we can create an array
  var rateSheet = rateTab.getRange(1,1,rateNumRows,rateNumColumns).getValues(); //create an array based on the number of rows & columns on the rate tab
  var currentRow = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell().getRow(); //gets the current row so we can get the name of the rate to search
  var rateToSearch = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(currentRow,1).getValue(); //gets the name of the rate to search on the rates tab
  for(rr=0;rr<rateSheet.length;++rr){
    if (rateSheet[rr][0]==rateToSearch){break} ;// if we find the name of the 
      }
  for(cc=0;cc<rateNumColumns;++cc){
    if (rateSheet[0][cc]==accountName){break};
      }
  var rate = rateSheet[rr][cc] ; //the value of the rate as specified by rate name and account name
  return rate;
}

0 commentaires

0
votes

Points d'optimisation pour la réponse d'Alex :

  1. N'oubliez jamais de déclarer des variables avec var , const ou let ( rr et cc ). Si vous omettez le mot-clé, les variables seront globales et vous causeront beaucoup de problèmes (car elles ne seront pas réinitialisées une fois la boucle terminée). Le meilleur moyen est d'utiliser let à portée de bloc.
  2. À la suite du n ° 1, ne vous fiez pas à des variables hors champ ( rateSheet [rr] [cc] ).
  3. Vous n'avez pas besoin d'appeler SpreadsheetApp.getActiveSpreadsheet () plusieurs fois - c'est à cela que servent les variables. Appelez une fois, puis réutilisez.
  4. getRange (1,1, , ) équivaut à un seul appel getDataRange .
  5. utilisez find code> ou méthode findIndex pour éviter les boucles verbeuses.

Avec les points appliqués, vous obtenez une fonction propre et optimisée à utiliser:

const findRate = () => {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  const accountName = ss.getActiveSheet().getRange(1, 1).getValue();

  const rateTab = ss.getSheetByName("Rates");

  const rates = rateTab.getDataRange().getValues();

  const currentRow = ss.getActiveSheet().getActiveCell().getRow();

  var rateToSearch = ss.getActiveSheet().getRange(currentRow, 1).getValue();

  const rr = rates.findIndex((rate) => rate === rateToSearch);

  const [firstRates] = rates;

  const cc = firstRates.findIndex((rate) => rate === accountName);

  return rates[rr][cc];
};


Notez que le "vlookup" est L'erreur non définie indique qu'il n'y a pas de déclaration de variable / fonction vlookup dans la portée. Ce qui est évidemment le cas car il n'y a pas de fonction intégrée de script Google Apps vlookup .


0 commentaires