1
votes

Choisir une cellule aléatoire, ignorer le vide

Mes compétences en programmation ne sont pas les meilleures, mais je sais un peu comment utiliser excel / sheets.

J'essaie d'obtenir une cellule pour sélectionner une cellule aléatoire dans une colonne, mais j'ignore les cellules vides. Alors tarif, je peux le faire sélectionner une cellule aléatoire, mais comment faire continuer si la cellule est vide?

Plus précisément, j'ai eu une idée de jeu à jouer lors d'un événement basé sur le mode de jeu Magic the Gathering: Horde, et utiliser Google Sheet comme deck "ennemi". Le lien ci-dessous n'est qu'un exemple. Pas l'idée réelle.

https://docs.docs.google.com / 1XKMCguvpI_4PDtBYVXa4_FaH7O3WgckRWYbQ75_5F7E / edit? Usp = partage


0 commentaires

3 Réponses :


0
votes

Réponse:

Vous pouvez définir la colonne comme une plage, pousser uniquement les cellules non vides dans un tableau et sélectionner un élément aléatoire.

Code: h3>

En supposant que la colonne que vous souhaitez sélectionner est la colonne A dans une feuille appelée Sheet1 , et commence à partir de A :

function selectRandomCell() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName("Sheet1").getRange("A1:A").getValues();
  var values = [];
  
  for (var i = 0; i < range.length; i++) {
    if (range[i][0] == "") {
      continue;
    }
    else {
      values.push(range[i][0]);
    }
  }

  return values[Math.floor(Math.random() * values.length)]);
}

Vous pouvez toutefois modifier la plage selon vos besoins.

J'espère que cela vous sera utile!


1 commentaires

Comme la première suggestion, je ne sais pas trop ce que cela fait ni même où placer cela. On dirait qu'il y a plus dans ces feuilles que le codage évident.



0
votes

vous pouvez utiliser:

=INDEX(SORT(FILTER({RANDARRAY(G3:G), H3:H}, L3:L=TRUE)), 1, 2)

pour obtenir un ID aléatoire 1 ou 9

 0

= TRUE peut être changé en "" pour simuler une cellule vide


pour le nom du chiot:

=VLOOKUP(INDEX(SORT(FILTER({RANDARRAY(G3:G), G3:G}, L3:L=TRUE)), 1, 2), G:H, 2, 0)


6 commentaires

On dirait que le premier fonctionne à merveille. Il ignore les critères que je recherchais et ne sélectionne que les données associées à la sélection. Je suppose que c'est le RANDARRAY qui choisit au hasard dans la gamme. Merci beaucoup Player0: D .. Je ne sais pas trop pour quoi utiliser les deux derniers. On dirait qu'ils vérifient au hasard les noms de A17: D19.


Question cependant: comment vérifie-t-il la zone "active" et "rejetée"? Je ne vois aucune référence à ces cellules.


pour exclure la zone active et rejetée dont vous avez besoin: i.stack.imgur.com/ZHSN2.png


Oh non, je ne veux pas les exclure. Je me demandais simplement comment il pouvait les vérifier sans avoir les cellules mentionnées nulle part. D'autant plus que la feuille que j'ai postée était une démo et que j'avais l'intention d'étendre la zone des cartes défaussées et actives.


alors je suppose que j'ai mal compris ce que signifie «sortir du pont»


C'est possible. On m'a dit que mes explications peuvent parfois être déroutantes. Mais le code fonctionne et je peux voir d'où il tire les données. Mais je suis toujours curieux de savoir comment le premier code a pu le trouver puisqu'il n'y avait aucune référence aux deux zones.



0
votes
function pickANonEmptyRandomCellFromARange() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rg=sh.getDataRange();
  const vs=rg.getDisplayValues();
  let v=[];
  //This loops through all of the rows r stands for the row element  is the index
  vs.forEach(function(r,i){
    //this loops through each column and c stands for the cell element  j is the index
    r.forEach(function(c,j) {
      //this asks if the cell is not blank thee push the A1Notation into an array
      if(c){v.push(sh.getRange(i+1, j+1).getA1Notation());}
    });
  });
  //This is a dialog which displays v[random index] which is the A1 Notation of the selected element. 
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(v[Math.floor(Math.random()*v.length)]), 'Random Non Empty Cell');
}

2 commentaires

Cela ne ressemble pas à un codage de feuille normal, donc je ne peux pas vraiment voir ce qu'il essaie de faire.


J'ai mis quelques commentaires là-dedans pour vous aider. Désolé, je pensais que c'était plutôt droit devant. Vous voudrez peut-être passer un peu plus de temps à apprendre ES6 car les versions ultérieures de Javascript peuvent devenir assez cryptées car de nombreuses commandes peuvent être regroupées sur une seule ligne. Et je n'utilise normalement aucun commentaire.