Rotating Kindergartners at Tables Monthly My wife teaches AM and PM kindergarten classes. AM has 14 students and PM 11. At the beginning of each month, she puts out a new seating chart where she rotates students in such a way that they (ideally) sit at a different table and with different students for that month. 
There are 3 students per table, but if numbers force the issue, the last may have more or less. We realize that, by the end of the year, there will be some unavoidable situations where students end up sitting with each other or at the same tables again, and this is okay.
She works on this seating diagram every month and it's a huge chore. It's agonizing to see her do this because it's very time-consuming, and I feel helpless. I know there has to be a mathematical way to do it. I did find one formula on here, but couldn't figure out what the variables represented and how to change them to meet her needs as students come and go. Can anyone help me out? It would be even better if I could use Excel to automate this process.  [sorry if the tags are inappropriate; I just guessed]
 A: If I understand the problem well (english can be ambiguous, maths are not), here is a model you can use. The link in comment is not exactly the same problem (here, you have only students, not customers and suppliers). For resolution, excel should be OK (I have other stuff at work I can advise, any integer programming/constraint programming solver should do the trick). You have
A set $[1,N]$ of tables (this is not abstract, put a sticker with a number on each one)
A set $[1,S]$ of students (put a sticker with a number on each one's forehead)
A set $[1,M]$ of months
Define, $\forall$ (for all, you can understand it as the english word if it helps you) $n \in [1,N], s \in [1,S], m \in [1,M] $ the boolean variable (variable which is equal to either $0$ or $1$) $x_{n,s,m}$ which is equal to $1$ if student $s$ is assigned table $n$ on month $m$.
Define, $\forall (s,s') \in [1,S]^2$ (couple of students),  $\forall m \in [1,M],y_{s,s',m}$ the binary variable which is equal to $1$ if and only if students $s$ and $s'$ are on the same table on month $m$
Then, you want to have values for $x$ which verify
$\forall n \in [1,N], \forall m \in [1,M], \sum_{s} x_{n,s,m} \leq 3$ (at most $3$ students per table at the same time)
$ \forall s \in [1,S], \forall m \in [1,M], \sum_{n} x_{n,s,m} = 1 $ (each student has a table affected to him at each time period)
$\forall (s,s') \in [1,S]^2$ such that $ s \neq s', \forall m \in [1,M],  \forall n \in [1,N],  x_{n,s,m} + x_{n,s',m} \leq 1 + y_{s,s',m} $ (make $y$ equal to $1$ at least where it should be according to its definition )
$\forall (s,s') \in [1,S]^2$ such that $ s \neq s', \sum_m y_{s,s',m} \leq 1$ (no more than $1$ month together for each couple of students)
This model I wrote holds a LOT of symmetry, and I'm guessing you do not want to look into how to break symmetry in integer linear programming. Hence, do not look for an optimal solution, only a feasible one (if you ever heard of branch and bound algorithms, it sucks whenever symmetry is present).
If the system is not feasible, tell me, and with something a little more elaborate you can try to put the students together only on the most distant time spans (you will need a little more variables if you want it to stay linear). 
PS : I live with a woman who is a teacher, watching her do this kind of thing is indeed agonizing
