I´m studying interpreting and I want to continue to use Excel as my main tool whilst simultaneous interpreting. I`ve already created a FILTER function and I found a simple VBA Code, that filtered one column of my table/glossary as I typed letters and changed the table to show results (I used a TextBox with a linked cell).
The problem I have is that, I want to filter all columns of my multi-language glossary whilst I type and I need Excel to ignore accents (ä,ü,ö,à...).
Just imagine a simple with multiple columns for different terms in different languages.
Thema | Deutsch | English | French |
---|---|---|---|
wirtschaft | wirtschaft | economy | économie |
wirtschaft | anlage | asset | atout |
sport | rudern | rowing | aviron |
sport | volleyball | volleyball | volley-ball |
sport | zuschauer | audience | audience |
sport | eröffnungszeremonie | opening ceremony | Cérémonie d'ouverture |
sport | medaillen | medals | Médailles |
health | gesundheit | health, wellbeing | bien-être |
health | impfung | vaccine | vaccin |
health | krebs | cancer | cancer |
health | nadeln | needles | aiguilles |
politics | minister | minister | ministre |
politik | auschreibung | tender | Soumission à l'appel d'offres |
sport | Allgemeiner deutscher Hochschulsportverband | Federation of International Univerisity sports | Fédération Internationale du Sport Universitaire |
Any help is deeply appreciated, thank you very much.
As noted before, I used a FILTER function and I am already able to use it to filter all the columns of my glossary, however I think I will need to use VBA to solve the problem of accents (ä,ü,ö,à...) whilst filtering.
FILTER:
=FILTER(Glossary;ISNUMBER(SEARCH(F2;Glossar[Deutsch]))+
ISNUMBER(SEARCH(F2;Glossary[Englisch]));"no match")
VBA:
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
ActiveSheet.ListObjects("Glossar").Range.AutoFilter Field:=2, _
Criteria1:= "*" & [B2] & "*", _
Operator:=xlFilterValues
Application.ScreenUpdating = True
End Sub
I know that the VBA Code above just searches the second column, haven`t been able to figure out mulit-column search.
Here's something to try without VBA, using named functions:
substitution method is adopted from Diacritical Character to ASCII Character Mapping
define the following in Name Manager
Name | Refers to |
---|---|
acc_1 | ="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ" |
acc_2 | ="ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ" |
acc_chars | =acc_1 & acc_2 |
reg_1 | ="aaaaaaaceeeeiiiienoooooouuuuypsaaaaaaaceeeeiiiienoooooouuuuypy" |
reg_2 | ="aaaaaaccccccccddddeeeeeeeeeegggggggghhhhiiiiiiiiiijjkkkllllllllllnnnnnnnnnoooooooorrrrrrssssssssttttttuuuuuuuuuuuuwwyyyzzzzzzs" |
reg_chars | =reg_1 & reg_2 |
acc2reg | =LAMBDA(c, IFERROR(MID(reg_chars, FIND(c, acc_chars), 1), NA())) |
all2reg | =LAMBDA(term, MAP(term, LAMBDA(term, REDUCE(term, MID(term, SEQUENCE(LEN(term)), 1), LAMBDA(acc,cur, IF(ISNA(acc2reg(cur)), acc, SUBSTITUTE(acc, cur, acc2reg(cur)))))))) |
Then all2reg
can be used anywhere in the workbook - for example enter in F2
:
=IFERROR(
FILTER(
Glossary,
MMULT(
--ISNUMBER(
SEARCH(all2reg(F2), all2reg(Glossary[[Deutsch]:[French]]))
),
SEQUENCE(COLUMNS(Glossary) - 1, , 1, 0)
)
),
"no match"
)
Without using Name Manager
Enter in F2
:
=LET(
acc_1, "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ",
acc_2, "ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ",
acc_chars, acc_1 & acc_2,
reg_1, "aaaaaaaceeeeiiiienoooooouuuuypsaaaaaaaceeeeiiiienoooooouuuuypy",
reg_2, "aaaaaaccccccccddddeeeeeeeeeegggggggghhhhiiiiiiiiiijjkkkllllllllllnnnnnnnnnoooooooorrrrrrssssssssttttttuuuuuuuuuuuuwwyyyzzzzzzs",
reg_chars, reg_1 & reg_2,
acc2reg, LAMBDA(c, IFERROR(MID(reg_chars, FIND(c, acc_chars), 1), NA())),
all2reg, LAMBDA(term,
MAP(
term,
LAMBDA(term,
REDUCE(
term,
MID(term, SEQUENCE(LEN(term)), 1),
LAMBDA(acc, cur, IF(ISNA(acc2reg(cur)), acc, SUBSTITUTE(acc, cur, acc2reg(cur))))
)
)
)
),
IFERROR(
FILTER(
Glossary,
MMULT(
--ISNUMBER(SEARCH(all2reg(F2), all2reg(Glossary[[Deutsch]:[French]]))),
SEQUENCE(COLUMNS(Glossary) - 1, , 1, 0)
)
),
"no match"
)
)