2

I´m trying to create a spreadsheet to manage a business, in particular I want to use it to register the sales of the day. The problem i´m having in particular is that I need it to copy the price of the product sold from the prices sheet, to the sales sheet, but I need that value to remain the same even if later I modified the price.

I have managed to copy the value of the corresponding product, but whenever I update the price, the old sales change to. To put it simple I need a script that whenever a cell from column "Product" in the sheet "Sales" is modified, applies a formula that searches in column "Products" (from sheet Products, within the same spreadsheet) for the corresponding product name, and then copies the value column "prices" from the sheet Products, to sales.

So when I need to change the prices, my old sales retain their original value. I have limited experience with scripts, I tried to make one with OnEdit, but can't make it work.

This is the document in question: https://docs.google.com/spreadsheets/d/18GHXoF9q8qe57o2YrKzLxCH9HlNV9SpF9fXYNPKq2N4/edit#gid=622868548

2
  • Why don't you share an example file with us and show us exactly the expected outcome. Welcome on Web Applications !!
    – Jacob Jan
    Commented Mar 13, 2015 at 23:01
  • Here it is what i have done until now: docs.google.com/spreadsheets/d/… The problem is, that if modify the price of a product on the prices sheet, it is automatically updated in the sales tab. And i dont want it to happen.
    – Gonzalo
    Commented Mar 14, 2015 at 14:11

1 Answer 1

1

I do not know how to solve this problem without scripts, but there is a simple work around. When you update prices, you can drag them elsewhere in your sheet (e.g. below, in the form of a price record). The values on the 'Sales' sheet will stay linked to the original price, and the formula you enter for sales will be the same.

If you choose this work around, I would recommend creating a script that automatically moves your prices so that you don't have to manually drag things around and so that the newest prices appear closer to the top. There are many ways to make that type of script, but here's one not so elegant, but simple way:

var ss = SpreadsheetApp.getActiver();

// Many of these values depend on the layout of your document.
// I have indicated where you will need to change values if
// you change the layout.

function onOpen(){
  // This will make a menu appear that allows you to run the scripts
  var ss = SpreadsheetApp.getActive();
  var items = [
    {name: 'Make space for a new price', functionName: 'newprice'},
    {name: 'New sales day', functionName: 'newsales'},
  ];
  ss.addMenu('New Entry', items);
};

function newprice(){
  // This will simply insert a row under your prices.
  // You just have to drag the on you want to change into the new row
  // Your info on the other sheets will stay linked to the correct number
  var sheet = ss.getSheets()[1]; // This number may need editing
  sheet.insertRowBefore(7); // This number may also need attention
};

function newsales(){
  var sheet = ss.getSheets()[0];
  var where = 7;  // Where to add the new lines?
  var how_many = 5;  // How many products to add?
  for (var ind = 0; ind < how_many; ind ++){
    sheet.insertRowBefore(where);
  };
  // Copy the values
  var source = sheet.getRange("A3:G7"); // This would need attention
  var destination = sheet.getRange("A8:G12");  // And this...
  source.copyValuesToRange(destination,1,1,1,1);
};

Using a script may be more trouble than it's worth for this type of problem.

If for some reason (I can't imagine why) you want to have one cell that adds old prices and new prices, then you need a more advanced script. It would be easier to make one cell associated with each price, and then add them in the final cell.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.