Avatar billede nono3 Juniormester
10. oktober 2008 - 11:21 Der er 8 kommentarer og
1 løsning

Søgning og overførsel af værdier

Jeg har en tabel i excel, hvori jeg skal have overført nogle data til Ark1 fra Ark2.

Jeg forestiller mig en makrofunktion, der søger værdien i kolonne B;C;D i Ark1.
Funktionen skal søge efter værdien fundet i Ark1 i kolonne A (Ark2), og ved match overføres værdien i kolonne B til kolonne L (Ark1).

Udfordring:
I enkelte kolonner i Ark1 er nogle af værdierne angivet som 354/808, hvilket skal tolkes som 354 & 808.

Herunder er en Excel-fil med det format jeg har data i:
http://www.2shared.com/file/4070227/c251e46b/EX1.html
Avatar billede nono3 Juniormester
15. oktober 2008 - 00:11 #1
lukkes
Avatar billede nono3 Juniormester
15. oktober 2008 - 00:12 #2
.
Avatar billede excelent Ekspert
15. oktober 2008 - 07:33 #3
arbejder på sagen, men hvis du har fundet løsning så sig til
Avatar billede nono3 Juniormester
15. oktober 2008 - 11:57 #4
Nej ikke endnu, har bare fået oprettet emnet to gange.
Vil meget gerne ha hjælp :-)
Avatar billede excelent Ekspert
15. oktober 2008 - 19:39 #5
Indsæt funktionen i et alm. modul
i Ark1 celle L4 taster du  =test(B4)
træk ned i fyldhåndtag for at kopiere formel til øvrige celler

Function test(rng As Range)
Dim tal(9)
Application.Volatile
selle1 = rng.Value
selle2 = rng.Offset(0, 1).Value
selle3 = rng.Offset(0, 2).Value

If selle1 <> "" And InStr(selle1, "/") = 0 Then t = t + 1: tal(t) = selle1
If InStr(selle1, "/") > 0 Then
t = t + 1
tal(t) = Left(selle1, InStr(1, selle1, "/") - 1)
t = t + 1
tal(t) = Mid(selle1, InStr(1, selle1, "/") + 1, 5)
End If
If selle2 <> "" And InStr(selle2, "/") = 0 Then t = t + 1: tal(t) = selle2
If InStr(selle2, "/") > 0 Then
t = t + 1
tal(t) = Left(selle2, InStr(1, selle2, "/") - 1)
t = t + 1
tal(t) = Mid(selle2, InStr(1, selle2, "/") + 1, 5)
End If
If selle3 <> "" And InStr(selle3, "/") = 0 Then t = t + 1: tal(t) = selle3
If InStr(selle3, "/") > 0 Then
t = t + 1
tal(t) = Left(selle3, InStr(1, selle3, "/") - 1)
t = t + 1
tal(t) = Mid(selle3, InStr(1, selle3, "/") + 1, 5)
End If

For t1 = 1 To t
If Application.CountA(Sheets("Ark2").Range("A2:A40"), tal(t1)) > 0 Then
x1 = x1 + Sheets("Ark2").Range("A2:A40").Find(tal(t1), LookIn:=xlValues).Offset(0, 1)
End If
Next

test = x1

End Function
Avatar billede nono3 Juniormester
16. oktober 2008 - 14:52 #6
Det virker fint i min test-fil, men jeg kan ikke få det til at fungere i den "rigtige" fil.

I den virkeligheden er der i ARK1 111 rækker, mord 14 i min test fil. I ARK2 er der 172 rækker i det ene datasæt og 79 i det andet.

Det får jeg ikke rigtigt til at fungere med din makro, heller ikke hvis jeg retter i sidste sektion "range".
- Jeg er ret ny med makroer, så måske overser jeg noget ;-)
Avatar billede excelent Ekspert
16. oktober 2008 - 16:21 #7
ret A40 til A172 eller hvad der nu passer i begge disse linier

If Application.CountA(Sheets("Ark2").Range("A2:A40"), tal(t1)) > 0 Then
x1 = x1 + Sheets("Ark2").Range("A2:A40").Find(tal(t1), LookIn:=xlValues).Offset(0, 1)
Avatar billede excelent Ekspert
18. oktober 2008 - 10:55 #8
hjalp det ?
Avatar billede nono3 Juniormester
20. oktober 2008 - 13:13 #9
Funktionen fejler, når den skal søge i kolonne B+C+D, hvis der f.eks. er en værdi i kolonne B og D.

Finder ikke en værdi efter det den søger efter, så fejler den ligeledes med beskeden "værdi", dette sker både for enkeltværdiet og værdiet af typen "315/144".

Den virker fint, hvis der alene skal regne på én værdi.

Er f.eks. samme værdi angivet i både kolonne A+B i en række, så summere den tallet sammen, det skal den ikke, hvis der er en dobbelt værdi i kolonne B --> D (rækkevis).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester