2017-10-17 5 views
-1

Ich arbeite als Operations Manager bei kleinen Unternehmen und ich versuche, ein Bestellformular einzurichten, das für den Verkäufer einfach zu verwenden ist. Im Bestellformular habe ich die OFFSET-Funktion verwendet, um auf eine Hauptliste mit Kunden und Preisen zu verweisen. Unter Customer gebe ich den Kunden ein und er zieht ihn aus der Master-Liste über ein Auto-Completion-Drop-Down. Das Gleiche passiert mit dem Produkt. HierBegrenzen der Ergebnisse des Dropdown-Menüs in Google Tabellen

ist das Auftragsblatt:

Order Sheet Example

Mein Problem ist ich werde die Eingabe in dem Produkt beginne z.B. 'Garnele'. Wir haben über ein Dutzend Krabbenlinien, aber ein bestimmter Kunde wird nur einen nehmen. Alle anderen Krabbenergebnisse haben für diesen Kunden keine Preise. Die Auto-Complete-Funktion bietet jedoch alle "Garnelen" -Ergebnisse.

In der Master-Liste habe ich Preise nur für die Produkte eingegeben, die der jeweilige Kunde verwendet. Werfen Sie einen Blick auf das, was der Masterliste wie folgt aussieht:

Master List look

Ohne eine hervorragende Erinnerung an welcher Kunde will, was, es ist eine Übung in Versuch und Irrtum. Im obigen Beispiel könnte ich "Topside" eingeben und wenn ich das falsche auswähle, kommt kein Preis auf.

Das ist frustrierend.

Ich hoffte auf eine Möglichkeit, die automatische Vervollständigung zu begrenzen, so dass, wenn ich "Garnelen" oder "Topside" für diesen Kunden tippe, nur Felder mit automatischer Vervollständigung erscheinen, die den Preis enthalten. Kann jemand helfen? Oder kennt jemand Workarounds? Ich wäre wirklich dankbar, das derzeitige Bestellsystem ist ziemlich schwierig.

Antwort

0

Ich glaube, das wird tun, was Sie wollen. Es ist ein wenig schwierig, von Ihren Beispieldaten zu unterscheiden. Es verwendet Google Apps-Skript und Blattnamen und/oder Spalten müssen möglicherweise im Skript für Ihre Daten geändert werden. Ich füge eine Beispieltabelle an, die Sie kopieren und dann versuchen können. Sie müssen das Skript in der von Ihnen erstellten Kopie genehmigen.

function onEdit(e) { 
    var cust=e.value //The value of the edited cell 
    var sh=e.source.getActiveSheet().getSheetName()//Name of the active sheet. 
    var col=e.range.getColumn()//The edited column 
    var r=e.range.getRow()//The edited row 
    var row=e.range.offset(0,1).getA1Notation()//Cell A1 notation of cell in same row one column to the right. 
    var ss=SpreadsheetApp.getActiveSpreadsheet() 
    var s=ss.getActiveSheet().getSheetName()//Name of active sheet 
    var s1=ss.getSheetByName("Sheet1")//Variables for sheets 
    var s2=ss.getSheetByName("Sheet2") 
    var s3=ss.getSheetByName("TEMP") 
    var rng=s2.getDataRange().getValues()//Customer/Products 

    if(sh=="Sheet1" && col==1){//If sheet1 is active sheet and Customer (column A) is edited. 

    var array=[]//Array to hold customers products 
    for (var i=0;i<rng.length;i++){ 
    if(rng[i][0]==cust){ 
     for(var j=1;j<rng[0].length-1;j++){ 
     if(rng[i][j]!=""){//If customers product has $ entry add to Array. 
      array.push([rng[0][j]]) 
    }}}} 
    s3.clearContents()//Clear old product list from TEMP. 
    s1.getRange(row).clearContent()//Clear product dropdown 
    s3.getRange(1,1,array.length,1).setValues(array)//Set new customer product list in TEMP. 
    drop(row,cust)// Call drop function to build new dropdown. 
} 
if(sh=="Sheet1" && col==2){//If sheet1 is active sheet and Product (column B) is edited. 
    var cust1=e.range.offset(0,-1).getValue()//Get customer in A 
    var prod=e.range.getValue()//Get selected product 
for (var i=0;i<rng.length;i++){//Get the customer/product price 
    if(rng[i][0]==cust1){ 
     for(var j=1;j<rng[0].length-1;j++){ 
     if(rng[0][j]==prod){ 
      price=rng[i][j] 
      s1.getRange(r,5).setValue(price)//Set the price in column E 
     s1.getRange(r,2).clearDataValidations() //Remove the data validation dropdown in column B 
     } 
     }} 
}}} 
function drop(row,cust){ 
    var ss=SpreadsheetApp.getActiveSpreadsheet() 
    var s3=ss.getSheetByName("TEMP") 
    var s1=ss.getSheetByName("Sheet1") 
    var cell = s1.getRange(row);//set validation in B 
    var ocell=s1.getRange(row).offset(0, -1).getValue()//evaluate value in A 
    var cellVal=cell.getValue() 
if(ocell==cust){ 
    var lr= ss.getSheetByName("TEMP").getLastRow() 
    var range = ss.getSheetByName("TEMP").getRange(1, 1, lr, 1) 
    var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();//Build the dropdown 
cell.setDataValidation(rule)}//Set the validation rules (Customers 
products) 
} 

Test-Tabelle: https://docs.google.com/spreadsheets/d/1u86sdf1_mO-Mv7hQM_hRZl3Gma-Y2lsu9ZvxSW4jA1U/edit?usp=sharing

+0

Hallo Ed, Das funktioniert perfekt! Ich habe Ihr Skript auf meine Tabelle angewendet und es macht, was ich wollte. Das einzige, was ich fragen würde ist, ob Sie die "Preis" -Spalte die fünfte Spalte anstelle der 3. Spalte machen könnte. Oder wenn Sie mir sagen könnten, welche Variablen das beeinflussen. Idealerweise würde ich die 3. und 4. Spalte für Karton-/kg-Zählungen verwenden. Vielen Dank, – Petar

+0

@Petar Ich änderte das Skript, um den Preis in Spalte E zu setzen. Ich änderte s1.getRange (r, 5) .setValue (Preis) // Setzen Sie den Preis in Spalte E von (r, 3) zu (r, 5). Wenn dies Ihre Frage beantwortet, genehmigen Sie die Antwort, indem Sie das Häkchen links neben der Antwort anklicken. Thanks. –

+0

Danke Ed. Häkchen gemacht. – Petar

Verwandte Themen