Slå ihop två exceldokument

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • I skogen utanför Umeå
  • 2009-11-20 08:28

Har två exceldokument, det ena innehåller tusentals kunder (sorterade med kundnr) med adresser, det andra några hundra "aktiva" kunder (sorterade med kundnr) utan adresser. Nu vill jag få över de "aktivas" adresser från det dokument med alla kunder och adresser till det med bara kundnamn.

Anledningen till att de blivit så här är att registret ligger på en PC och det programmet kan inte få ut "aktiva" kunder med adresser.

Några tips?

Gjort på några minuter i Filemaker tex. Man importerar båda dokumenten och skapar en relation mellan tabellerna för att få fram adresser där de fattas.. Sedan kan man göra en export av de poster som man vill ha. Bara att göra en sökning.

I annat fall får du utforska beräkningsfunktionerna i Excel och funktionerna LETARAD och LETAKOLUMN och hur man gör en beräkning som innehåller tex OM.

  • Medlem
  • I skogen utanför Umeå
  • 2009-11-20 10:14

Har du provat så rapportera hur det gick.

Ett problem med excels LETAUPP-formler är att de inte är helt felsäkra. Dels måste man komma ihåg att sortera stigande den kolumn som formeln söker efter matchande data i. Om man ändrar sortering i efterhand och glömmer att radera formlerna blir matchningen helt fel.

Värre är att om Excel inte hittar en exakt matchning (t.ex. stavfel i ett namn den ena tabellen) så väljer excel helt sonika att ta resultatet från cellen närmast ovanför i lookup-tabellen.

  • Medlem
  • Norrköping
  • 2009-11-20 18:11
Ursprungligen av M. Sundbom:

Värre är att om Excel inte hittar en exakt matchning (t.ex. stavfel i ett namn den ena tabellen) så väljer excel helt sonika att ta resultatet från cellen närmast ovanför i lookup-tabellen.

Det är inte sant. Det är bara det att du måste ange att du ska ha exakt träff.

Ursprungligen av Gunnar B:

Det är inte sant. Det är bara det att du måste ange att du ska ha exakt träff.

Det är i alla fall min erfarenhet med formeln LETAUPP(). Går inte att ange ungefärlig/exakt i denna som man kan i t.ex. LETARAD(). Det var det LETAUPP() som jag först kom och tänka på. Jag brukar använde den istället för LETARAD() för att man slipper sitta och räkna kolumner.

Gillar Excel skarpt. Men det finns några fallgropar. Den värsta är, tycker jag, programmets överdrivna hjälpsamhet att automatiskt försöka översätta data till datumformat. Om man klistrar in eller importerar tiotusendals data och enstaka decimaltal råkar ha punkt istället för komma så blir t.ex. 3.8 plötsligt 03.08. Om man har turen att upptäcka detta och raderar datumformatet erhåller man siffran 0,1355556 vilket inte är 3,8. Samma sak om t.ex. beteckningar för prov-id har formen av siffra-siffra: 6-29, 29-6 blir båda 29 juni 2009 medan 33-6 blir 1 juni 1933 fast 6-33 (liksom t.ex. 193-65) formateras som text. "Hjälpsamheten" är alltså ofta både långsökt och inkonsekvent. Jag vet folk som jobbat i flera år med rutinmässig hantering av enorma datamängder med Excel utan att upptäcka sådana fel innan det var för sent. Kan vara ofantligt tidsödande att felsöka i efterhand.
Sorry, nu blev jag visst rejält off-topic...

Som sagt, Filemaker + 15 minuters jobb.

Eller JMP och 1 minuts jobb.

JMP? Vad är det?

Efter att ägnat ett halvt liv åt att både glädjas och förargas över excel har jag alltmer övergått till att använda JMP (ursprungligen akronym för John's Macintosh Project) för att inte bara utvärdera och visualisera data, utan även för att manipulera och ordna data. Programmet har suveräna och intelligenta funktioner (ja, med grafiskt gränssnitt) för att hantera tabeller: subset, join, update, summary, concatenate, split etc. Spelar ingen roll om det är numeriska data eller textdata (JMP förstår unicode) eller miljoner rader och tusentals kolumner. Det är betydligt snabbare än excel.

Men jag tror att för det problem som trådskaparen har fungerar Excel utmärkt bara man håller koll på fallgroparna som jag beskrev ovan.

  • Medlem
  • Uppsala
  • 2009-11-20 18:40

En annan möjlighet om man inte har lust eller pengar till att köpa ett program för detta är att göra det i R The Comprehensive R Archive Network.

Exportera filerna som .cvs från excel. Läs in bägge filerna som data frames i R och lägga ihop dessa med kommandot merge.

Följande kommandon borde vara tillräckligt från R. Att tänka på är att det man vill slå ihop på, skall ha samma kolumnnamn i excel (i detta fall kundnr).

read.csv(filename1.csv, header=T) -> file1
read.csv(filename2.csv, header=T) -> file2

Läser in filename1.csv och filename2.csv och sparar som data frame med varje kolumn namngiven enligt första raden i csv filen

merge(file1, file2) -> newfile

Lägger ihop file1 och file2 med avseende på den kolumn som har samma namn i file1 och file2

write.table(newfile,file="newfile.csv", sep=",", row.names=F)

Skriver newfile till filen newfile.csv i den foldern som man valde att starta R från.

1
Bevaka tråden