Assignment by type in excel - excel

I am trying to solve an assignment problem in excel but cannot achieve it yet. As you can see below I need to assign some jobs to some people. I have to do this by some rules;
1-Each assignment counts one and this adds on point cell. (aa has 2 points if I give it another job aa's new point became 3 points)
2-It is great if points are not bigger than 6.
3-If it is possible type 1 and type 2 must match. If it is not, any type2 can fit any type1.
I need to fill C and D (if job count is 2) with names column with considering type columns and point column. Can you please help me?

Related

Creating keys/unique values for rows

I couldn't find the answer here, probably because of a lack of understanding the terminology.
I have created a sheet with several classes, and want to assign a unique ID (starting at "1") to each cell in the "Genus_ID" column. It must restart at 1 every time it identifies that it belongs to a new Family or Subfamily. Basically how a relational database would be designed.
Here is a sample of my sheet:
The Genus_ID is counting upwards, but it should reset to "1" at every new Family OR Subfamily.
Also, in I3 it shouldn't say "Porifera", but it should iterate the previous value ("1").
So, like this:
I'm using the following formula right now, it's close, but nowhere near perfect yet:
=IF(COUNTIFS(A$2:H2,H2)=1,MAX(I$1:I1)+1,VLOOKUP(A2,A$1:I1,2,0))
Can anyone help me out?
Thanks a lot!
If FAMILY is column D and GENUS is column H, try this in I2 and copy down
=IF(D2<>D1,1,IF(H2=H1,I1,I1+1))
If SUBFAMILY is in column F try this
=IF(OR(D2<>D1,F2<>F1),1,IF(H2=H1,I1,I1+1))

automatic rota system based on special conditions

I am trying to create system for assigning tasks to a team using existing sequence. I have four separate columns:
Column A – Indicates the given sequence of operators
Column B – Indicates number of current tasks per operator (imported from another file by vlookup)
Column C – Indicates the name of the operator that was assigned to the last task (imported from another file by vlookup)
Column D – Indicates whether any of the operators are currently on holiday (check/uncheck check box (TRUE/FALSE logic)
I would like to automate the system so that the next operator that is due to receive tasks is displayed, however the operator must not have more than 4 tasks already assigned to him/her and must be present (not on holiday).
The selection process must repeat taking into consolidation the given sequence until the name is selected, hence if the last name in the sequence is not the exact match the system must start with the first name in the sequence.
Could someone be able to figure this out please as I am completely stock.
Currently, I have the following, column with the following =IF(B2<=4,A2,"N/A") and another column with the following =IF(E2=FALSE,F2,"N/A"). And one more column with =INDEX(SQESequence,MATCH(C2,SQESequence,0)+1,1), however that is not fully automated.
I think that I understand your problem / question and have come up with a solution. A more elegant formula solution may exist, will play with it more if I have time.
{=IFERROR(INDEX(INDIRECT("A"&MATCH(C2,A2:A5)+1&":A5"),MATCH(1,(INDIRECT("A"&MATCH(C2,A2:A5)+1&":A5")<>$C$2)*(INDIRECT("B"&MATCH(C2,A2:A5)+1&":B5")<4)*(INDIRECT("D"&MATCH(C2,A2:A5)+1&":D5")=FALSE),0)),INDEX($A$2:$A$5,MATCH(1,($A$2:$A$5<>$C$2)*($B$2:$B$5<4)*($D$2:$D$5=FALSE),0)))}
Enter CTRL SHIFT ENTER to set as an array formula, each function then returns an array of values rather than just a single value. You know you have set as an array formula when you see the { } 's
They say that a picture is worth 1000 words....so here are three!

Cross Reference Column A Sheet 1 w/ Column A Sheet 2 to give column c,d,e

Part 1:
Cross Reference Column A Sheet 1 to find a matching value on Column A Sheet 2, and then fill in corresponding Column B, C, D Values from Sheet 2 for Sheet 1.
I have 2 sheets:
Sheet 1: Company & Representative
Sheet 2: Company & Client first name, Client Last Name, Client Email
I want to match to put in new columns on Sheet 1 that have the client first name, last name, and email based on the company matching ( they do not match by cell #).
Does anyone have any advice on how to do this? I've got about 2000 and know there must be a better way than manual.
Part 2:
Is it possible to use a similar formula to populate paragraph text in another column if the company name contains certain text or letters? Say the company titles are various and long but each contains adjectives that can help distinguish their industry or years of experience, then is it possible to make another column including 10+ possible conditions to fill out different paragraphs depending on the conditions met?
So for example have company names in column A drive company industry supply list (that will be in paragraph form) in column J. Here is an example:
Column:
ABC level 1
ABC level 2
ABC Levels Elementary
ABC Levels Advanced
BCD Level 4
BCD Level All
BCD Level Intermediate
(continued until infinity..)
XYZ Company Level 12
If Level 1-6 or Elementary: Input >
Eucalyptus is one of three similar genera that are commonly referred to as "eucalypts",
If level Intermediate: Input>
Tree sizes follow the convention of:
If Level Advanced: Input >
A mature eucalyptus may take the form of a low shrub or a very large tree. The species can be divided into three main habits and four size categories.
If level all: Input >
Eucalyptus is one of three similar genera that are commonly referred to as "eucalypts"
+
Tree sizes follow the convention of:
+
A mature eucalyptus may take the form of a low shrub or a very large tree. The species can be divided into three main habits and four size categories.
eucalyptus copy used for example only and to educate us all on the eucalyptus plant of course. ** changed the copy to shorter so we can more easily read the example**
enter image description here
Thanks so much!
Kalina
Say if I have a Sheet2 with data like the picture showing below:
My Sheet1 should look like this:
There are at least two ways to accomplish your goal:
VLOOKUP (show in column C, Matching 1):
=VLOOKUP(A2,Sheet2!$A$2:$D$8,2,0)&", "&VLOOKUP(A2,Sheet2!$A$2:$D$8,3,0)&", "&VLOOKUP(A2,Sheet2!$A$2:$D$8,4,0)
The VLOOKUP just repeated three times to concatenate the first name, last name and the email.
INDEX/MATCH (show in column D, Matching 2):
=INDEX(Sheet2!$A$1:$D$8,MATCH(A2,Sheet2!$A$1:$A$8,0),2)&", "&INDEX(Sheet2!$A$1:$D$8,MATCH(A2,Sheet2!$A$1:$A$8,0),3)&", "&INDEX(Sheet2!$A$1:$D$8,MATCH(A2,Sheet2!$A$1:$A$8,0),4)
Similar to VLOOKUP to repeat three times.
Hope this helps and let me know if you have any question.
Here is how you can do for your part 2:
For example you have setup a table to show different levels and descriptions (Column D and E). And you want to find the description under column B from the given company info on column A. Here is the formula you want to enter in cell B2 and copy/drag down.
=IFERROR(VLOOKUP(RIGHT(A2,LEN(A2)-FIND("Level",A2)+1),$D$2:$E$11,2,0),"Please verify company name")
What this does is first, use RIGHT(A2,LEN(A2)-FIND("Level",A2)+1) to find which level keyword inside the company name. Then use VLOOKUP to look the matching level and grab the description from column E. I also added an IFERROR just in case someone entered an incorrect name. You can change that message output to anything you like. Hope this will solve your problem and let me know if you have any question.
I would suggest putting data info on each tab into a tables, and then using an Index-Match or a vlookup to pull the data from the other table that matches. It's hard to give an exact answer without an image/example.

Rank the top 5 entries in different criteria

I have a table that I want to find the top X people in each of the different groups.
Unique Names Number Group
a 30 1
b 4 2
c 19 3
d 40 2
e 1 1
f 9 2
g 15 3
I've ranked the top 5 people by number by using =index($A$2:$A$8,match(large($B$2:$B$8,1),$B$2:$B$8,0)). The 1 in the LARGE function I linked to a ranked range so that when I dragged down it changed up the number.
What I would like to do next is rank the top x number of people in each group. So top 3 in group 1.
I tried =index($A$2:$A$8,match("1"&large($B$2:$B$8,1),$C$2:$C$8&$B$2:$B$8,0)) but it didn't seem to work.
Thanks
EDIT: After looking at the answers below I have realised why they are not working for me. My actual data that I want to use the formula with have multiple entries of numbers. I have adjusted the example data to show this. The problem I have is that if there are duplicate numbers then it returns both of the names even if one is not in the group.
Unique Names Number Group
a 30 1
b 30 2
c 19 3
d 40 2
e 1 1
f 30 2
g 15 3
Proof of Concept
Use the following formula in the example above in cell F2 and copy down and to the right as needed.
=IFERROR(INDEX($A$2:$A$8,MATCH(AGGREGATE(14,6,($C$2:$C$8=F$1)*($B$2:$B$8),ROW($A2)-1),$B$2:$B$8,0)),"")
In the header row provide the group numbers. or come up with a formula to augment and reset the group number as you copy down based on your X number in your question.
Explanation:
The AGGREGATE function unlike the large function is an array function without the need to use CSE. As such we can add criteria to what we want to use. In this case only 1 criteria was used and that was the group number. in the formula it was the following part:
($C$2:$C$8=F$1)
If there were multiple criteria we would use either an + operator as an OR or we would use an * operator as an AND.
The 6 option in the aggregate function allows us to ignore errors. This is useful when trying to get the small. It is also useful for dealing with other information that may cause errors that do not need to be worried about.
As this is technically an array operation avoid using full column/row references as they can bog down your system.
The basics of what the over all formula is doing is building a list that match the group number you are interested in. After filtering your numbers, it then determines which is the largest, second largest etc by what row you have copied down to. It then determine what row the nth largest number occurs in through the match function, and finally it returns to the corresponding name to that row with the index function.
Building on all the other great answers.
Because you have the possibilities of duplicate values in each group we need to do this with two formulas.
First we need to get the numbers in order. I used the Aggregate, but this could be done with the array LARGE(IF()) also:
=IFERROR(AGGREGATE(14,6,$B$2:$B$8/($C$2:$C$8=E$1),ROW(1:1)),"")
Then using that number and order we can reference, we can use a modified version of #ForwardEd's formula, using COUNTIF() to ensure we get the correct name in return.
=IFERROR(INDEX($A$2:$A$8,AGGREGATE(15,6,(ROW($B$2:$B$8)-ROW($B$2)+1)/(($C$2:$C$8=F$1)*($B$2:$B$8=E3)),COUNTIF(E$2:E2,E3)+1)),"")
This will count the number in the results returned and then bring in the correct name.
You could also solve this with array formulas - to filter a group whose name is stored in E1, your code
=INDEX($A$2:$A$8,MATCH(LARGE($B$2:$B$8,1),$B$2:$B$8,0))
would then be adapted to
=INDEX($A$2:$A$8,MATCH(LARGE(IF($C$2:$C$8<>E1,-1,$B$2:$B$8),1),$B$2:$B$8,0))
Note: After entering an array formula, you have press CTRL+SHIFT+ENTER.
Thank you to everyone who offered help but for some reason none of your methods worked for me, which I am sure was to do with the quality of my data. I used an alternate method in the end which is slightly convoluted but seemed to work.
=IF($C2="1",RANK($B2,$B$2:$B$8,1)+ROW()/10000,-1)
Essentially using the rank function and adding a fraction to separate out duplicate values.

VBA- picking one cell for each column that contain certain text in a Matrix with the max number of rows selected

I have a matrix of information that let user to input task they are willing to do. User have 3 choices:
A. I want to do this.
B. I do not mind doing this. and
C. I do not want to do this.
after I collect user data, I'd like to assign each task to each person base on their will (pick A over B) (pair up one task - one person). Are there any advice on how I can do it?
note:
column labels are user name and rows are tasks.
Obviously there are some task no one are willing to do and it is ok to leave it blank. (the number of task are expected to be greater than number of user, so some task will be blank anyhow)
I do not need all possible solution, just 1 solution will do
You probably don't need VBA to solve this. Assign values for "A.", "B.", "C." and blank cells, then look for the max and use a vlookup for finding the person; if given person is found then use an alternate sequence.
I would create an index for overall willingness (sum of assigned values) per person to make the values more unique.
If you would intend to make a macro I would start with the lowest willingness tasks and look for the highest value from people who are not yet assigned, if there are more than one of these people then I would give the job to the lowest overall willingness person (since he'll be harder to assign to other tasks).
P.S. the smiley doesn't make up for your lack of willingness to work. :(

Resources