Script for copying and pasting value only (GOOGLE SPREADSHEETS) - validation

I have the following idea I can't implement:
There is a row with given table plate numbers (column B) and there is a second row with names which are copies by "vlookup" formula from another spreadsheet and in case there are no numbers found, the text should be filled in manually. I have added the formula which leaves cells blank:
=if(isna(index('spreadsheet1'!A4:A1002;match(B16;'spreadsheet1'!B4:B1002;0)));"";index('spreadsheet1'!A4:A1002;match(B16;'spreadsheet1'!B4:B1002;0)))
But sometimes the person assigned to a car plate changes and thus, after taking this value, I have to make as easy as I can to paste values only (the problem is the person who will add data may make mistakes) - I have created a button and want to assign a script which will check if the value in the column B has a name (not empty =""), then it should copy it and paste value only at the same place but all other cells which will be empty should stay with formulas inside them for further addition of a person to a new plate number or to be added manually.
Every new column will be filled in one by one and would like this script to work for constantly. Do you have any ideas or hints how I can implement it?

Related

Google Sheets - Removing the used items from drop-down lists

In Google Sheets I have a column containing a list of available Serial Numbers (say, column A).
Somewhere else (say, column B) a user must choose the serial number used among those listed in column A; I use Data Validation with a drop-down list in order to prevent the user to use a non-existent serial number.
My goal is to allow the user only choose the remaining available serial numbers, by removing from the drop-down list all the serial numbers already used.
By using the FILTER function, combined with MATCH and ISNA, I am able to create a column of available serial numbers (say, column C). The function used is:
=FILTER(A2:A;ISNA(MATCH(A2:A;B2:B;0))).
Then I moved the Data Validation list of column B (where the user must select the serial number used) from column A (all serial numbers) to column C (filtered serial numbers). I also added the "Reject input" in the Data Validation form, so I can allow the user only to enter a value listed in column C.
It works, but all the previously entered serial numbers on column B have a small red triangle showing that data is not valid. Of course, this happens because all entered values are removed from the data validation list.
I could simply ignore the red triangles, but I don't like this solution that much, because it always looks like there's an error on the sheet, and when we will have many data inside it would be difficult to distinguish this problem from any others.
Is there a different way to solve?
Thanks
with formula only you can use:
=TRANSPOSE(FILTER(A2:A, NOT(COUNTIF(C3:C4, A2:A)), A2:A<>""))
=TRANSPOSE(FILTER(A2:A, NOT(COUNTIF({C2; C4}, A2:A)), A2:A<>""))
=TRANSPOSE(FILTER(A2:A, NOT(COUNTIF(C2:C3, A2:A)), A2:A<>""))
then hide columns and use validation:
where this is the result:
demo sheet
update:
1st fx:
=TRANSPOSE(FILTER(A2:A, NOT(COUNTIF(C3:C4, A2:A)), A2:A<>""))
2nd and every next fx:
=TRANSPOSE(FILTER(A$2:A, NOT(COUNTIF({
INDIRECT("C2:C"&ROW()-1); INDIRECT("C"&ROW()+1&":C")}, A$2:A)), A$2:A<>""))

Copy and paste ascending cells in data validation

I'm currently setting up a dependent drop down & I've now got it working. The relevant drop-down is in cells L9:L65 with the data for the drop-down being provided in A68:Z68 through to A121:Z121 via the following formula
=ARRAYFORMULA(IFERROR(IF('390'!J9:J65="Livery", TRANSPOSE(FILTER(Operators!$C$2:C, Operators!$C$2:C<>"")), IF('390'!J9:J65="Operator", TRANSPOSE(FILTER(Operators!$B$2:B, Operators!$B$2:B<>"")), ))))
In cell L9 I've set the following data validation as a list from a range
A68:Z68
Which works perfectly. However, when I copy and paste the other cells in the L column all cells relate to A68:Z68 instead of running in ascending order meaning I've just had to manually amend the data validation in L10:L65 to ensure it fetched the correct data and it nearly sent me mad. Considering some of my sheets will incorporate over 200 rows doing this manually is going to prove tedious and time-consuming so I'm hoping someone can show me a way to quickly get each cell corresponding to the correct row without manual intervention?
by standard means (eg. without using a script), this is possible to achieve only manually setting it up row by row (cell by cell) for the whole range.
http://www.chicagocomputerclasses.com/google-sheets-apps-script-dynamic-dependent-dropdown-data-validation-lists/

Excel 2017 Formula - Average data by month, while being filterable

I'm not a VBA coder, and I would prefer an excel formula if possible, the easiest solution will be the best one.
Test workbook screenshot
As you can see, I have plenty of columns, which are filterable.
I am attempting to retrieve an average of Column L, but I want the data to be calculated for the correct month in G3:R3.
The resulting calculation needs to be recalculated when filtered, between customers, sites, status, job type etc.
I am referencing the resulting cells in another sheet, which gives an idea of trends I can glance at, as such filtering by month in each sheet, is not an option.
=AVERAGE(IF(MONTH(E9:E1833)=1,(J9:J1833)))
This one does not update with the filtered data.
=SUM(IF(MONTH(E9:E1833)=1,J9:J1833,0)) /SUM(IF(MONTH(E9:E1833)=1,1))
This one does not update with the filtered data.
I have tried 5 different SUBTOTAL formulas, some with OFFSET, none of these produce the same result I get when checking manually.
Each worksheet has over 1,500 hundred rows, the largest is 29148 rows. The data goes back as far as 2005.
Please can someone help me find a solution?
One possible solution is to create a helper column which returns 1 if the row is visible and returns 0 if the row is invisible (or blank). This allows a bit more freedom in your formulas.
For example, if you want to create a helper column in column X, type this into cell X9 and drag down:
= SUBTOTAL(103,A9)
Now you can create a custom average formula, for example:
= SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833)*(J9:J1833))/
SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833))
Not exactly pretty but it gets the job done. (Note this is an array formula, so you must press Ctrl+Shift+Enter on your keyboard instead of just Enter after typing this formula.)
With even more helper columns you could avoid SUMPRODUCT altogether and just accomplish this by doing a single AVERAGEIFS.
For example if you type into cell Y9 and drag down:
= MONTH(E9)
Then your formula could be:
= AVERAGEIFS(J9:J1833,X9:X1833,1,Y9:Y1833,1)
There isn't a clean way to do this without at least one helper function (if you want to avoid VBA).

SSRS - Merge Repeating Texboxes w/ Distinct Row Values

Everything except for the name may or may not be different, but it doesn't matter.
How do you make it so the name and address (first column) can only show once if the value on multiple rows is the same? There is no way to merge the rows together due to the numbers of rows being generated from a group expression. But if there is another way to merge then can someone tell me how to do it? If not, then is there at least a way to blank out the second and third repeating names (and address)?
This is how you hide repeating values in a tablix column.
In design mode, click on the detail cell that you want to keep from repeating if the values are the same. In this case, you are referring to that one as the name and address column.
Look for the HideDuplicates property in the Properties pane. Set the value to the name of the dataset the tablix is using.
Now, when you run the report, that value should only show once. The other rows where the value had been repeating will be blank in that cell.
Set the borders appropriately (none, or solid) to make it look like the cells are merged. Doing the above alone will not merge the cells. Only a row group will do that.

a bit of a string matching conundrum in excel-vba

i'm writing a program at work for a categorizing issue.
i get data in the form of CODE, DESCRIPTION, SUB-TOTAL for example:
LIQ013 COGNAC 25
LIQ023 VODKA 21
FD0001 PRETZELS 10
PP0502 NAPKINS 5
Now it all generally follows something like this...the problem is my company supplies numerous different bars. So there are like 800 records a month with data like this. My boss wants to breakdown the data so she knows how much we spend on a certain category each month. For example:
ALCOHOL 46
FOOD 10
PAPER 5
What I've thought of is I setup a sort of "data-base" which is really a csv text file that contains entries like this:
LIQ,COGNAC,ALCOHOL
LIQ,VODKA,ALCOHOL
FD,PRETZELS,FOOD
FD,POPCORN,FOOD
I've already written code that imports the database as a worksheet and separates each field into its own column. I want excel to look through the file and when it sees LIQ and COGNAC to assign it the ALCOHOL designator. That way I can use a pivot table to get the category sums. For example I want the final product to look like this:
LIQ013 COGNAC 25 ALCOHOL
LIQ023 VODKA 21 ALCOHOL
FD0001 PRETZELS 10 FOOD
PP0502 NAPKINS 5 PAPER
Does anyone have any suggestions? My worry is that a single point expression match to JUST the code i.e. just to LIQ without a match to COGNAC as well would maybe result in problems later when there are conflicting descriptions? I'd also like the user to be able to add ledger entries so that the database of recognized terms grows and becomes more expansive and hopefully more accurate.
EDIT
as per #Marc 's request i'm including my solution:
code file
please note that this is a pretty dumb-ed down solution. i removed a bunch of the fail-safes and other bits of code that were relevant to a robust code but not to our particular solution.
in order to get this to work there are two parts:
the first is the macro source code
the second is the actual file
because all the fail-safes are removed, the file needs to be imported to excel exactly the way it appears. i.e. Sheet1 on the googleDoc should be Sheet1 on the excel, start pasting data at cell "A1". before the macro is run, be sure to select cell "A1" in Sheet1. as i said, there are implementations in the finished product to make it more user friendly! enjoy!
EDIT2
These links suck. They don't paste well into excel.
If your comfortable with it I can email you the actual workbook. Which would help in preserving the formatting etc.
Use a lookup table in a separate sheet. Column A of the lookup sheet contains the lookup value (e.g. PRETZELS), Column B contains the category (FOOD, ALCOHOL, etc). In the cells where you want the category to show up in your original sheet (let's use D3 for the result where B3 holds the "PRETZELS" value), type this formula:
=VLOOKUP(B3,OtherSheet!$A$1:$B$500,2,FALSE)
That assumes that your lookup table is in range A1:B500 of a worksheet named "OtherSheet".
This formula tells Excel to find the lookup value (B3) in column A of your lookup and return the corresponding value from column B of your lookup table. Absolute references (the $) ensure that your formula won't increment cell references when you copy/paste the formula in other cells.
When you get new categories and/or inventory, you can update your lookup table in this one place by just adding new rows to it.

Resources