From a data modeling perspective, there are two entities: products and ingredients, and they are in an N-to-M relationship. This can fit in tree relational tables, that you can store as three sheets in Excel*: a list of products, a list of ingredients, a list of relationships between products and ingredients. But that would be the final picture of course.
Now, getting these sheets populated (ETL) requires some work because of the low data quality (discrepancy in names). Part of it can probably be automated with sed scripts directly on the input as text (standardizing separators), or as BruceWayne indicates, using all possible delimiters in the CSV import. But part of it will probably require human intervention (fixing the different names).
Using CSV import, selecting delimiters and fixing spaces should probably get you there:
|---------|-------------|------------|-------------|
|Product A| ingredient A|Ingredient B|Ingredient C |
|Product B| ingredient A|Ingredient B| Ingredient C|
|Product C| ingredient A|Ingredient B| Ingredient C|
|Product D| ingredient A|IngredientB |Ingredient C |
|---------|-------------|------------|-------------|
What I would then suggest is to build a separate mapping of a standard name to all the other equivalent names that could occur in the input. This mapping may be partly built automatically (obvious case changes based on your observations, etc), but will probably require manual work and trial and error.
A mapping could look like
|-------------|-------------|
| From | To |
|-------------|-------------|
|ingredient a |Ingredient A |
| ingredientA |Ingredient A |
| ingredient b|Ingredient B |
| IngredientB |Ingredient B |
|-------------|-------------|
Then, you should be able to map the original table to a standardized table with lookup functions:
|---------|------------|------------|------------|
|Product A|Ingredient A|Ingredient B|Ingredient C|
|Product B|Ingredient A|Ingredient B|Ingredient C|
|Product C|Ingredient A|Ingredient B|Ingredient C|
|Product D|Ingredient A|Ingredient B|Ingredient C|
|---------|------------|------------|------------|
And to map it to a list of ingredients (using duplicate elimination on the second column of the mapping table):
|------------|
|Ingredient A|
|Ingredient B|
|Ingredient C|
|------------|
(and the same for products).
You should also be able to populate the normalized relationship:
|---------|------------|
|Product A|Ingredient A|
|Product A|Ingredient B|
|Product A|Ingredient C|
|Product B|Ingredient A|
|Product B|Ingredient B|
|Product B|Ingredient C|
|Product C|Ingredient A|
|Product C|Ingredient B|
|Product C|Ingredient C|
|Product D|Ingredient A|
|Product D|Ingredient B|
|Product D|Ingredient C|
|---------|------------|
- Disclaimer: from a database perspective, it is more advisable to use a relational database (possibly with Access) if you can than Excel, even though many do use Excel to store data. Wrong manipulations in Excel, such as deleting a cell and shifting rows and columns, can lead to severe errors in the data that can have disastrous consequences if it is used in production. Excel is great and easy to use even with no database background, but use it with care!