Avatar billede NHFrost Praktikant
25. september 2015 - 11:39 Der er 6 kommentarer

Flytning af rækker med fælles nævner, fra et ark til et andet

Hej, jeg arbejder i det administrative på en skole, og vi har gennem et år rigtig mange kursister igennem. Dette kan godt give nogle administrative problemer specielt når vi skal flytte kursister fra et ark til et andet. et eksempel på dette kan være som nedstående:

Hold: xxxxx      lære: xxxxx      Holdform: xxxxx

Tilskud: xxxx    Tilskudsform: xxxxx    Bidrag: xxxxx

Aktivitet xxxx  timer: xxxxx      antal kursister: xxxxx

020202-0202, Hans Ole, X, 21-06-15 til 30-12-15, 0,025, 14/15

020202-0202, Inge Olsen, X, 21-06-15 til 30-12-15, 0,025, 14/15

020202-0202, Poul Erik, X, 21-06-15 til 30-12-15, 0,025, 14/15

Det ovefor ser som så ikke problematisk ud men det eneste vi skal bruge af det der står oven for er eks.
020202-0202, Hans Ole, X, 21-06-15 til 30-12-15, 0,025, 14/15
hold, lære. holdform, tilskud, bidrag, aktivitet, timer og antal af kursister kan som så være fuldstændig ligegyldige i denne sammenhæng.

Havde det nu kun været 3 rækker ville der ikke være noget problem med simpel copy paste, men vi kigger årligt på omkring 40.000 rækker hvor der er ca. 20 kursister og så en ny headline hvor der står hold, holdnummer osv.

så det jeg godt kunne tænke mig at høre om, var hvis der var nogle kloge hoveder der viste om man kan lave en makro der kan finde alle kursister, og kopiere dem ind i et regneark vedsiden af den der er åben. pt. bruger jeg en jeg fik bikset sammen men den kan kun kopirer en række af gangen hvilket godt kan blive noget langhåret når man ser på omkring 40.000 rækker.

den formel jeg har lavet hedder følgende
Dim targetRow As Long


targetRow = Worksheets("Ark2").Range("A65536").End(xlUp).Row + 1

Rows(ActiveCell.Row & ":" & ActiveCell.Row).Copy

Worksheets("Ark2").Select
Rows(targetRow & ":" & targetRow).Select
ActiveSheet.Paste

Worksheets("Ark1").Select

ActiveCell.Offset(-1, 0).Select

Rows(ActiveCell.Row + 1 & ":" & ActiveCell.Row + 1).Delete

End Sub

håber virklig der er en derude der kan hjælpe.
Avatar billede finb Ekspert
25. september 2015 - 12:32 #1
Jeg vil varmt anbefale dig at
lægge det hele i en database,
så går alt som en leg,
du kan godt nøjes med Access
til denne opgave.
finb
Avatar billede NHFrost Praktikant
25. september 2015 - 12:53 #2
Når du siger en database mener du så at access er en database?
Og i så fald er der evt. nogle begynder tips ang. access du kan give til en komplet nybegynder?
Avatar billede NHFrost Praktikant
25. september 2015 - 12:55 #3
Nu har jeg lige åbnet access for at se, og kan se jeg skal bruge navnene osv. for at plotte dem ind i access, og det var egentlig det jeg ville frem til med mit spørgsmål om hvordan jeg hev navne, cpr, dato, hold osv. ud af et stort excel ark fordi access løser som så ikke mit problem medmindre den selv kan scanne efter navne osv.
Avatar billede sism Nybegynder
28. september 2015 - 10:22 #4
Du kan nå langt med funktionerne :
SAMMENKÆDNING(
Lopslag( og Vopslag(
Avatar billede finb Ekspert
28. september 2015 - 11:18 #5
Access har en import-funktion,
der virker fint med Excel.
Importer 1 tabel ad gangen.
Avatar billede Sitestory Mester
28. september 2015 - 16:34 #6
Jeg vil tro, at denne makro kan klare det. Den antager, at tabellen starter i celle A1 på det aktive ark.
Rækker, hvor de første 11 karakterer er 020202-0202, kopieres til et array, der til slut indsættes som tabel i et nyt regneark.

Sub FindKursister()
Dim rRange As Range
Dim arInput()
Dim arOutput()
Dim lCount As Long
Dim lCol As Long
Dim lRow As Long

On Error GoTo ErrorHandle

'Definerer rRange som tabellen.
'Antager at alt står i kolonne A.
'Går tabellen fx til og med kolonne C,
'skal "A1" herunder ændres til "C1".
Set rRange = Range("A" & Rows.Count)

If IsEmpty(rRange) Then
  'I linjen herunder skal A1 ændres, hvis der er
  'flere kolonner.
  Set rRange = Range(rRange.End(xlUp), Range("A1"))
Else
  'I linjen herunder skal A1 ændres, hvis der er
  'flere kolonner.
  Set rRange = Range(rRange, Range("A1"))
End If

'Kopierer tabellens indhold til arrayet arInPut.
arInput = rRange.Value

'Redimensionerer outputarrayet
With rRange
  ReDim arOutput(1 To .Rows.Count, 1 To .Columns.Count)
End With

'Gennemløber inputarrayet og finder rækkerne
'med kursister. Disse rækker kopieres til
'outputarrayet.
For lCount = 1 To UBound(arInput)
  'Hvis de første 11 karakterer matcher "020202-0202"
  'kopierer vi rækken til outputarrayet
  If Left(arInput(lCount, 1), 11) = "020202-0202" Then
      lRow = lRow + 1
      For lCol = 1 To UBound(arInput, 2)
        arOutput(lRow, lCol) = arInput(lCount, lCol)
      Next
  End If
Next

'Åbner et nyt regneark og aktiverer det
With Workbooks
  .Add
  .Item(.Count).Activate
End With

'Definerer et indsætningsområde for kursist-tabellen
Set rRange = Range("A1").Resize(rRange.Rows.Count, rRange.Columns.Count)

'Kopierer outputarrayet til regnearket
rRange.Value = arOutput

BeforeExit:
On Error Resume Next
Set rRange = Nothing
Erase arInput
Erase arOutput

Exit Sub
ErrorHandle:
MsgBox Err.Description
Resume BeforeExit
End Sub
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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