Προς το περιεχόμενο

Google Sheets - Έλεγχος κοινού ονόματος και checkboxes και άθροισμα


rafinos
Μετάβαση στην απάντηση Απαντήθηκε από Billator,

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Γεια σας, παραθέτω δύο εικόνες για να σας εξηγήσω καλύτερα τι θέλω να κάνω. 

a.png

b.png

 

Θέλω μέσω script ή αν είναι εύκολο διαφορετικά δεν έχω θέμα, όταν τσεκάρω ένα checkbox της δεύτερης εικόνας να τσεκάρει το όνομα της στήλης A π.χ. Rafinos και να προσθέτει τον αριθμό  (αθροιστικά) στο κελί B της πρώτης εικόνας δίπλα από το όνομα Rafinos στην προκειμένη ή στο όνομα που ανήκει το checkbox. Επίσης αν το ξετσεκάρω θέλω να γίνεται και η αντίστοιχη αφαίρεση. Δεν έχω πρόβλημα με το να γράψω script στην javascript που κάνει πρόσθεση και αφαίρεση, απλά δεν είμαι εξοικειωμένος με τα google scripts. Π.χ. δεν ξέρω πως να πάρω το index του row όταν τσεκάρω ή ξετσεκάρω το checkbox ώστε να γίνει ο έλεγχος του ονόματος στην συγκεκριμένη γραμμή κτλ. 

Επεξ/σία από rafinos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Έγινε αλλαγή τίτλου σε Google Sheets - Έλεγχος κοινού ονόματος και checkboxes και άθροισμα

Καλησπέρα για το workcase scenario που έχεις θεωρώ το πιο απλό είναι μια φόρμουλα της λογικής:

IFERROR ( INDEX ( MATCH (LOGICAL EXPRESSION) ) )

Όπου,
MATCH -> Παίρνουμε το 1ο row του TRUE*TRUE
INDEX -> Κάνουμε INDEX την στήλη που θέλουμ (Β εδώ) με το συγκεκριμένο row
IFERROR -> Αν δεν υπάρξει TRUE*TRUE Matching, δεν θα έχουμε row οπότε εκεί βάλε κενό ""

Οπότε προκύπτει

=IFERROR(
    INDEX(database!B:B, 
          MATCH(1, 
                (database!A:A=A1) * (database!C:C=TRUE), 
                0)
    ), 
    ""
)

όπου είναι αρκετά πιο απλό από τον κώδικα που χρειάζεται (που δεν είναι κάτι δύσκολο, απλά ίσως για αυτό είναι πιο απλή λύση).

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι αλλά το συγκεκριμένο παίρνει το value από την στήλη B της δεύτερης εικόνας και την προσθέτει στην στήλη B της πρώτης εικόνας δίπλα στο όνομα που συνδέεται με το chechbox;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, rafinos είπε

Ναι αλλά το συγκεκριμένο παίρνει το value από την στήλη B της δεύτερης εικόνας και την προσθέτει στην στήλη B της πρώτης εικόνας δίπλα στο όνομα που συνδέεται με το chechbox;

Ακριβώς, δείχνει το value της Β στήλης (από την δεύτερη εικόνα) από το οποίο το checkbox είναι ενεργοποιημένο στην πρώτη εικόνα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

2 λεπτά πριν, Billator είπε

Ακριβώς, δείχνει το value της Β στήλης (από την δεύτερη εικόνα) από το οποίο το checkbox είναι ενεργοποιημένο στην πρώτη εικόνα.

Ναι απλά εγώ θέλω αν τσεκαριστούν περισσότερα του ενός checkboxes που ανήκουν στο ίδιο όνομα να γίνει πρόσθεση μεταξύ τους και αν γίνει uncheck να γίνει αφαίρεση.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Λύση
9 λεπτά πριν, rafinos είπε

Ναι απλά εγώ θέλω αν τσεκαριστούν περισσότερα του ενός checkboxes που ανήκουν στο ίδιο όνομα να γίνει πρόσθεση μεταξύ τους και αν γίνει uncheck να γίνει αφαίρεση.

Οκ δεν το είχα καταλάβει αυτό.

Τότε θέλουμε κάτι τέτοιο:

=IF(SUMIFS(database!B:B, database!A:A, A1, database!C:C, TRUE) = 0, "", SUMIFS(database!B:B, database!A:A, A1, database!C:C, TRUE))

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
44 λεπτά πριν, Billator είπε

Οκ δεν το είχα καταλάβει αυτό.

Τότε θέλουμε κάτι τέτοιο:

=IF(SUMIFS(database!B:B, database!A:A, A1, database!C:C, TRUE) = 0, "", SUMIFS(database!B:B, database!A:A, A1, database!C:C, TRUE))

 

Αυτό το προσθέτω στο κελί B της πρώτης εικόνα και όπου database βάζω το όνομα του sheet της δεύτερης εικόνας έτσι δεν είναι;

Αν ναι δεν μου λειτουργεί γιατί είναι λίγο πιο σύνθετο το κανονικό αρχείο στο οποίο θέλω να προσθέσω αυτή την επιλογή. Ωστόσο, κατάλαβα το σκεπτικό, οπότε θα το δοκιμάσω και αν δεν το καταφέρω επανέρχομαι! 

Σε ευχαριστώ πάρα πολύ για τον χρόνο που έχεις αφιερώσει! :)

Βασικά λειτουργεί απλά θέλει ";" αντί για "," THANKS! 

Επεξ/σία από rafinos
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, rafinos είπε

Βασικά λειτουργεί απλά θέλει ";" αντί για "," THANKS! 

Αν το χρησιμοποιείς σε excel ναι θέλει argument separators ";" και όχι "," . 

Κανένα πρόβλημα αν κολλήσεις πουθενά μπορείς να με κάνεις tag 👍

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

6 ώρες πριν, Billator είπε

Αν το χρησιμοποιείς σε excel ναι θέλει argument separators ";" και όχι "," . 

Κανένα πρόβλημα αν κολλήσεις πουθενά μπορείς να με κάνεις tag 👍

Όχι καί στο sheets με argument separator λειτουργεί μόνο. 

 

Μήπως υπάρχει κάποια ρύθμιση για να γίνεται αυτόματα copy στα από κάτω κελιά η συνάρτηση σε περίπτωση που τελειώσουν οι διαθέσιμες γραμμές και πρέπει να προστεθούν νέες; Δεν εννοώ με script κάτι απλούστερο. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
12 ώρες πριν, rafinos είπε

Όχι καί στο sheets με argument separator λειτουργεί μόνο. 

 

Μήπως υπάρχει κάποια ρύθμιση για να γίνεται αυτόματα copy στα από κάτω κελιά η συνάρτηση σε περίπτωση που τελειώσουν οι διαθέσιμες γραμμές και πρέπει να προστεθούν νέες; Δεν εννοώ με script κάτι απλούστερο. 

Χωρίς να μπορώ να το δοκιμάσω γιατί δεν είμαι στον υπολογιστή αλλά στην ουσία θες ARRAYFORMULA οπότε αν δεν κάνω κάποιο λάθος στο format είμαστε κάπως έτσι:

=ARRAYFORMULA(IF(A:A = "", "", IF(SUMIFS(database!B:B, database!A:A, A:A, database!C:C, TRUE) = 0, "", SUMIFS(database!B:B, database!A:A, A:A, database!C:C, TRUE))))

edit: Καλημέρα δεν λειτουργεί. @rafinos Και κόλλησα τώρα για το populate με φόρμουλα :P 

Οπότε θα στο δείξω όπως το χρησιμοποιώ εγώ με script:

// Solution 1
// Αυτό απαιτεί action run (πχ μπορείς ένα κουμπί να βάλεις που όταν το πατάς θα τρέχει η ένα time trigger)
// Αυτό κάνει overwrite όλη την στήλη, παίρνει τη φόρμουλα από το B1 και το κάνει Populate σε όλη την στήλη
function populateFormulas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var finalSheet = ss.getSheetByName("final");

  finalSheet.getRange('B2:B').setFormulaR1C1(finalSheet.getRange('B1').getFormulaR1C1());
}

// Solution 2
// Αυτό γίνεται αυτόματα μόνο στο Row που μπαίνει
function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var finalSheet = ss.getSheetByName("final");

  // Ensure we only run the script if a new row is added
  var range = e.range;
  if (range.getSheet().getName() === "final" && range.getRow() > 1) {
    var formula = finalSheet.getRange('B1').getFormula();
    finalSheet.getRange('B' + range.getRow()).setFormula(formula);
  }
}


Η λογική:

finalSheet.getRange('B2:B').setFormulaR1C1(finalSheet.getRange('B1').getFormulaR1C1());

είναι σωτήρια όταν θες να φτιάξεις απλά ένα populate dropdown column χωρίς να σε νοιάζουν λεπτομέρειες και χωρίς να χρειάζεσαι πρακτικά να συντάζεις κώδικα (μιας και είναι copy paste  και απλά αλλάζεις τα columns)

ΠΡΟΣΟΧΗ, θα πρέπει να παίξεις με ένα:
IF(A1="","",your_formula) 
Ώστε σε περίπτωση που στο A1 (σε κάποιο τυχαίο Row δλδ) δεν έχει Data να μην βγάλει error απλά να το δείχνει κενό.
 

Επεξ/σία από Billator
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...