Sub ert()
Dim lo As ListObject
'Application.ScreenUpdating = False
On Error Resume Next 'if SpecialCells(4) not exists
For Each lo In ActiveSheet.ListObjects
With lo
.ListColumns(1).Range.SpecialCells(4).Resize(, .ListColumns.Count).Delete shift:=xlUp
End With
Next lo
'Application.ScreenUpdating = True
End Sub
Pokazywanie postów oznaczonych etykietą Best. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Best. Pokaż wszystkie posty
czwartek, 22 października 2015
Excel vba: Best macro to remove empty rows from listobject tables.
Best reliable, highly recommended:
'http://www.excelforum.com/excel-programming-vba-macros/847446-auto-resize-shrink-table-on-an-active-sheet.html
wtorek, 7 lipca 2015
Fuzzy matching columns revisited.
Have you ever had to join two tables with spelling and typing errors, variants of the same name etc.?
Try an UDF (user defined function in Excel) using NGrams and DiceCoefficient... my recommendation:
http://www.niftytools.de/2015/03/fuzzy-string-matching-excel/
Another option is to use an excelent vba macro which uses Levenstein and several other routines for fuzzy matching. http://www.mrexcel.com/forum/excel-questions/195635-fuzzy-matching-new-version-plus-explanation.html
Moreover, it is often the case that we want to join tables on strings that exist within names in a column of another table. Then you may use the following formula (array formula, press Ctrl+Shift+Enter):
{=INDEX(kolumna_wartosci;MATCH(FALSE;ISERROR(SEARCH(kolumna_przeszukiwana;szukana_wartosc));0))}
Other options... search google for fuzzy lookup udf: np. stackoverflow: http://stackoverflow.com/questions/13291313/matching-similar-but-not-exact-text-strings-in-excel-vba-projects
--------------
In MS SQL you can try using SimMetrics library and compare various routines: http://anastasiosyal.com/POST/2009/01/11/18.ASPX
And if we look for strings (in a column in TableB) in a column with long names in TableA, we can try:
SELECT TableA.descr as opis, max(TableB.Descr) AS major, b
FROM TableB
RIGHT JOIN TableA
ON TableA.Descr LIKE ("*"+TableB.Descr+"*")
GROUP BY TableA.descr,b;
http://www.niftytools.de/2015/03/fuzzy-string-matching-excel/
Another option is to use an excelent vba macro which uses Levenstein and several other routines for fuzzy matching. http://www.mrexcel.com/forum/excel-questions/195635-fuzzy-matching-new-version-plus-explanation.html
Moreover, it is often the case that we want to join tables on strings that exist within names in a column of another table. Then you may use the following formula (array formula, press Ctrl+Shift+Enter):
{=INDEX(kolumna_wartosci;MATCH(FALSE;ISERROR(SEARCH(kolumna_przeszukiwana;szukana_wartosc));0))}
Other options... search google for fuzzy lookup udf: np. stackoverflow: http://stackoverflow.com/questions/13291313/matching-similar-but-not-exact-text-strings-in-excel-vba-projects
--------------
In MS SQL you can try using SimMetrics library and compare various routines: http://anastasiosyal.com/POST/2009/01/11/18.ASPX
And if we look for strings (in a column in TableB) in a column with long names in TableA, we can try:
SELECT TableA.descr as opis, max(TableB.Descr) AS major, b
FROM TableB
RIGHT JOIN TableA
ON TableA.Descr LIKE ("*"+TableB.Descr+"*")
GROUP BY TableA.descr,b;
czwartek, 2 kwietnia 2015
Lookup: Przypisz krótkie nazwy długim używając słownika.
W danych, które otrzymałem, występują nazwy firm w różnych wariantach. Mogę być pewien, że przynajmniej jeden człon, może jeden wyraz, będzie identyfikował poszczególne firmy. Tworzę więc słowniczek takich skróconych nazw, które występują w mojej bazie.
Jak je przypisać?
1. Przetestowałem w Accesie:
Table_A to moja baza danych
Table_B to mój słowniczek skróconych nazw, które występują w długich nazwach.
2. Przetestowałem również w Excelu różne rozwiązania i ostatecznie otrzymałem podpowiedź na forum Altkom Pana Krzysztofa Rutkowskiego:
={INDEX($D$6:$D$8;MATCH(FALSE;ISERROR(SEARCH($C$6:$C$8;C12));0))}
Uwaga, formuła tablicowa Ctrl+Shift+Enter
Uwaga, słowniczek należy posortować malejąco.
gdzie C12 to nazwa długa w Bazie
zaś w słowniczku szukamy: $C$6:$C$8 to nazwa krótka, w zakresie $D$6:$D$8 - ID firmy,. Jeśli zaś do przyporządkowania nie ma zbyt wielu krótszych nazw, w Accesie można użyć switch'a a w MS SQLu IN.
1. Przetestowałem w Accesie:
Table_A to moja baza danych
Table_B to mój słowniczek skróconych nazw, które występują w długich nazwach.
SELECT Table_A.Full_name, Table_B.Short_name, Table_B.ID_firmy FROM Table_B RIGHT JOIN Table_A ON Table_A.Full_name Like "*"+Table_B.Short_name+"*";
2. Przetestowałem również w Excelu różne rozwiązania i ostatecznie otrzymałem podpowiedź na forum Altkom Pana Krzysztofa Rutkowskiego:
| Słowniczek | |
| Excomers | 1 |
| Futuro | 2 |
| Polexpo | 3 |
| Baza zewnętrzna | Tutaj działa formuła |
| Przedsiębiorstwo Handlu Polexpo. | 3 |
| Dystrybutor - FUTURO PUH | 2 |
| Excomers przedsiębiorstwo handlu | 1 |
| Przeds. Futuro Sp. z o.o. | 2 |
| Jan Kowalski Excomers. | 1 |
| polexpo | 3 |
| excomers | 1 |
={INDEX($D$6:$D$8;MATCH(FALSE;ISERROR(SEARCH($C$6:$C$8;C12));0))}
Uwaga, formuła tablicowa Ctrl+Shift+Enter
Uwaga, słowniczek należy posortować malejąco.
gdzie C12 to nazwa długa w Bazie
zaś w słowniczku szukamy: $C$6:$C$8 to nazwa krótka, w zakresie $D$6:$D$8 - ID firmy,. Jeśli zaś do przyporządkowania nie ma zbyt wielu krótszych nazw, w Accesie można użyć switch'a a w MS SQLu IN.
SELECT switch( Table1.Nazwa LIKE "*Vicryl PLUS*", "Vicryl PLUS", Table1.Nazwa LIKE "*Vicryl*" And Table1.Nazwa Not LIKE "*PLUS*" , "Vicryl", Table1.Nazwa LIKE "*Monocryl PLUS*", "Monocryl PLUS", true,"N/A" ), Table1.Nazwa, Table1.Wartość FROM Table1
Subskrybuj:
Posty (Atom)