Excel: waardes uit een cel verplaatsen naar data

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
Goedemiddag,

Ik zit met een probleem in excel.
Om het probleem beter uit te leggen allereerst een beetje achtergrond.
Ik wil in een productiebedrijf de controles laten doen met een handscanner.
Dit is een snelle en eenvoudige methode om de controles uit te voeren.

Nu wil ik om het overzichtelijk te houden een blad hebben waar de scans in komen te staan; dit is dan blad 1.
Dus bijvoorbeeld in cel A6, B6, C6 en D6 komt de gescande data te staan.

Nu wil ik dan in blad2 de data opslaan.
Dus daar word dan onder elkaar de data opgeslagen die uit de scans van blad 2 naar voren komt.

Ik hoop dat ik een beetje duidelijk ben geweest en dat jullie mij hiermee kunnen helpen.

Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 19:59

heuveltje

KoelkastFilosoof

Erm maak in blad 2 een aantal cellen onder elkaar met "=blad1!a6" , "=blad1!b6" etc.. ?

Als het tenminste een eenmalig iets is. Anders zul je inderdaad dit via een macro moeten laten loopen.
Of blad 1 kopieren naar een document waar dit al ingeregeld is.

[ Voor 50% gewijzigd door heuveltje op 09-10-2017 16:51 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • Morelleth
  • Registratie: November 2008
  • Laatst online: 14:07
Een macro maken waarin je de data per scan laat invoegen en daarna naar de volgende tabblad kopieert en er een blanco regel wordt ingevoegd?

D&D enthousiast en overmatig 3D printer, dus nu ook 3D printservice en mini's: MJG-3d.nl


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 18:13

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Wat heb je zelf al geprobeerd en waar loop je op vast? En hoe ziet die data er uit die uit de scanner komt en hoe wil je die opslaan?

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
Ik heb inderdaad een macro nodig die de data onder elkaar zet. Want het is herhaaldelijk.

De data ziet er als volgt uit:
Productiecode/meting 1/ meting 2 / meting 3
Van al deze dingen heb ik barcodes gemaakt.

Ik loop vast op het maken van die macro. Hebben jullie enig idee hoe ik die erin krijg? Want in macro’s ben ik (helaas) nog niet echt thuis. Ik heb wel Ontwikkelaars in het lint staan, maar zo ver ben ik nu ongeveer.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Afhankelijk van je wat je precies wilt bereiken kun je het bereiken met een macro of een simpele verwijzing. Begin eens met hier [Excel] snel 5 kolommen gegroepeerd naar beneden verplaatsen inspiratie op te doen. Daarna kun je je vraag concreter maken, want nu heeft het net een te hoog 'ik mik een te vage vraag over de schutting' gehalte. ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
Hallo allemaal,

Excuses dat ik in eerste instantie zo onduidelijk was.
Ik ben zelf wat meer aan het stoeien gegaan en ben met deze formule gekomen:

Sub Beginmonstername()

ActiveSheet().Copyrange("B6") = Sheets(Data).Range("B" & Rows.Count).End(xlUp).Offset(1, 0)


End Sub

Hiermee wil ik dus de range B6 van de actieve sheet kopieeren naar de eerste lege cel in de data sheet. Echter krijg ik het niet aan de praat. Zien jullie wat ik hier fout heb gedaan?

Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 19:59

heuveltje

KoelkastFilosoof

NO_Excuses schreef op maandag 16 oktober 2017 @ 11:50:
Hallo allemaal,

Excuses dat ik in eerste instantie zo onduidelijk was.
Ik ben zelf wat meer aan het stoeien gegaan en ben met deze formule gekomen:

Sub Beginmonstername()

ActiveSheet().Copyrange("B6") = Sheets(Data).Range("B" & Rows.Count).End(xlUp).Offset(1, 0)


End Sub

Hiermee wil ik dus de range B6 van de actieve sheet kopieeren naar de eerste lege cel in de data sheet. Echter krijg ik het niet aan de praat. Zien jullie wat ik hier fout heb gedaan?
Ik heb hier een oudere versie van excel.
Maar copyrange is geen geldig commando ?

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • 0stone0
  • Registratie: Maart 2015
  • Laatst online: 22-09 16:40

0stone0

01000010 01101111 01100101 !

Ik denk dat je opzoek bent naar
code:
1
Range.Copy

https://msdn.microsoft.co...s/range-copy-method-excel


.Copyrange("B6")
B6 lijkt me ook niet echt een 'range' :P

"~~Linux is only free if your time has no value"


Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 19:59

heuveltje

KoelkastFilosoof

0stone0 schreef op maandag 16 oktober 2017 @ 12:03:
Ik denk dat je opzoek bent naar
code:
1
Range.Copy

https://msdn.microsoft.co...s/range-copy-method-excel





[...]

B6 lijkt me ook niet echt een 'range' :P
wel voor vba/excell om vage reden :)


Range(arg), waarbij arg de naam van het bereik aangeeft, geeft een Range-object als resultaat dat één cel of een cellenbereik voorstelt. In het volgende voorbeeld wordt de waarde van A1 in cel A5 geplaatst.

Visual Basic for Applications
Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
Dankjulliewel voor de tips!

Ik ben wat dieper gaan kijken en ik ben bang dat mijn formule ook met range.copy niet werkt, aangezien ik meerdere cellen aan data heb die gekopieerd moeten worden.
Na het internet wat af te lopen kwam ik hierop:

Sub Beginmonstername()


Dim thisrow As Long
Dim lr As Long


lr = Sheets("Dashboard").Range("A6" & Rows.Count).End(xlUp).Row + 1
mr = Sheets("Dashboard").Range("B6" & Rows.Count).End(xlUp).Row + 1
nr = Sheets("Dashboard").Range("D6" & Rows.Count).End(xlUp).Row + 1
pr = Sheets("Dashboard").Range("E6" & Rows.Count).End(xlUp).Row + 1
qr = Sheets("Dashboard").Range("F6" & Rows.Count).End(xlUp).Row + 1
Sheets("Data").Range("A" & lr).Value = Range("A" & ActiveCell.Row).Value
Sheets("Data").Range("B" & mr).Value = Range("B" & ActiveCell.Row).Value
Sheets("Data").Range("D" & nr).Value = Range("D" & ActiveCell.Row).Value
Sheets("Data").Range("E" & pr).Value = Range("E" & ActiveCell.Row).Value
Sheets("Data").Range("F" & qr).Value = Range("F" & ActiveCell.Row).Value


End Sub

Deze geeft geen fout: 1004
Ik heb deze fout proberen te verhelpen met: Application.EnableEvents = False
Dit mocht helaas niet baten.
Ben ik zo wel op de goede richting om de data van het "dashboard" te verplaatsen naar "data"?

Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 19:59

heuveltje

KoelkastFilosoof

Maar kun je is een voorbeeld geven van 1 regel, en hoe dat er op de nieuwe pagina moet uitzien

en daarnaast eens uitleggen wat de code die je nu paste zou moeten doen.
Want als dit al zou werken, denk ik niet dat dit doet wat je denkt dat het doet.

Maar ik denk dat je het je eigen gemakkelijker(maar niet efficienter :)) kan maken door wat cells individueel aan te passen in 2 genest "for loops"

[ Voor 40% gewijzigd door heuveltje op 16-10-2017 12:58 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
Dit zijn de waardes die ik wil kopieeren:

A B C D E F
16-10-2017 13:14 024400 - 2004 1 3

Waarvan dus alleen A, B, D, E en F.
Deze wil ik kopieeren naar de "data" sheet in de cellen A, B, C, D en E.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 21:16
NO_Excuses schreef op maandag 16 oktober 2017 @ 13:18:
Dit zijn de waardes die ik wil kopiëren:

A B C D E F
16-10-2017 13:14 024400 - 2004 1 3

Waarvan dus alleen A, B, D, E en F.
Deze wil ik kopiëren naar de "data" sheet in de cellen A, B, C, D en E.
ik heb dit in elkaar geknutseld... beetje 'lange' code, maar wel goed begrijpbaar voor jou, denk ik..
Kijk eens of dit doet wat je wilt, en of je de code snapt?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Option Explicit

Sub KijkEensHoeDitWerkt()

'declaraties
Dim wsScan As Worksheet
Dim wsData As Worksheet
Dim lonLaatsteRijScan As Long
Dim lonLaatsteRijData As Long
Dim rngKopieer As Range

'instellen werkbladen
Set wsScan = ActiveWorkbook.Sheets(1)
Set wsData = ActiveWorkbook.Sheets(2)

'bepalen van de onderste rijen (van kolom A / kolom 1) met gegevens van elk werkblad
lonLaatsteRijScan = wsScan.Cells(Rows.Count, 1).End(xlUp).Row
lonLaatsteRijData = wsData.Cells(Rows.Count, 1).End(xlUp).Row

'kopieer de data vanuit wsScan, naar wsData
'uitgangspunt: alles uit wsScan moet worden gekopieerd naar de eerste vrije regel in wsData
With wsScan
  'eerst kopieer je de waarden uit de wsScan kolommen AB naar wsData, kolommen AB
  Set rngKopieer = .Range(.Cells(1, 1), .Cells(lonLaatsteRijScan, 2))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 1).PasteSpecial
  'idem voor kolom D -> C
  Set rngKopieer = .Range(.Cells(1, 4), .Cells(lonLaatsteRijScan, 4))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 3).PasteSpecial
  'idem voor kolom EF -> DE
  Set rngKopieer = .Range(.Cells(1, 5), .Cells(lonLaatsteRijScan, 6))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 4).PasteSpecial
End With

Application.CutCopyMode = False

End Sub

Acties:
  • 0 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
breew schreef op dinsdag 17 oktober 2017 @ 11:18:
[...]


ik heb dit in elkaar geknutseld... beetje 'lange' code, maar wel goed begrijpbaar voor jou, denk ik..
Kijk eens of dit doet wat je wilt, en of je de code snapt?
Wauw! echt top! dit is inderdaad wat ik zoek.
Ik begrijp inderdaad wat je hier geschreven hebt mede door de duidelijke uitleg erbij!

Ik heb alleen nog 2 kleine probleempjes in die code.
- Ik wil de data als waarden plakken. Ik heb de .Values in de code gezet op deze manier:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Option Explicit

Sub Beginmonstername()

'declaraties
Dim wsScan As Worksheet
Dim wsData As Worksheet
Dim lonLaatsteRijScan As Long
Dim lonLaatsteRijData As Long
Dim rngKopieer As Range

'instellen werkbladen
Set wsScan = ActiveWorkbook.Sheets("Dashboard")
Set wsData = ActiveWorkbook.Sheets("Data")

'bepalen van de onderste rijen (van kolom A / kolom 1) met gegevens van elk werkblad
lonLaatsteRijScan = wsScan.Cells(Rows.Count, 1).End(xlUp).Row
lonLaatsteRijData = wsData.Cells(Rows.Count, 1).End(xlUp).Row

'kopieer de data vanuit wsScan, naar wsData
'uitgangspunt: alles uit wsScan moet worden gekopieerd naar de eerste vrije regel in wsData
With wsScan
  'eerst kopieer je de waarden uit de wsScan kolommen AB naar wsData, kolommen AB
  Set rngKopieer = .Range(.Cells(1, 1), .Cells(lonLaatsteRijScan, 2))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 1).PasteSpecial.[u]Values[/u]
  'idem voor kolom D -> C
  Set rngKopieer = .Range(.Cells(1, 4), .Cells(lonLaatsteRijScan, 4))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 3).PasteSpecial.[u]Values[/u]
  'idem voor kolom EF -> DE
  Set rngKopieer = .Range(.Cells(1, 5), .Cells(lonLaatsteRijScan, 6))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 4).PasteSpecial.[u]Values[/u]
End With

Application.CutCopyMode = False

End Sub


Dit werkte helaas niet.

Het 2e kleine probleempje is dat hij alles vanuit het dashboard kopieert echter moet dit alleen rij 6 zijn.

Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 21:16
NO_Excuses schreef op dinsdag 17 oktober 2017 @ 12:25:
[...]


Wauw! echt top! dit is inderdaad wat ik zoek.
Ik begrijp inderdaad wat je hier geschreven hebt mede door de duidelijke uitleg erbij!

Ik heb alleen nog 2 kleine probleempjes in die code.
- Ik wil de data als waarden plakken. Ik heb de .Values in de code gezet op deze manier:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Option Explicit

Sub Beginmonstername()

'declaraties
Dim wsScan As Worksheet
Dim wsData As Worksheet
Dim lonLaatsteRijScan As Long
Dim lonLaatsteRijData As Long
Dim rngKopieer As Range

'instellen werkbladen
Set wsScan = ActiveWorkbook.Sheets("Dashboard")
Set wsData = ActiveWorkbook.Sheets("Data")

'bepalen van de onderste rijen (van kolom A / kolom 1) met gegevens van elk werkblad
lonLaatsteRijScan = wsScan.Cells(Rows.Count, 1).End(xlUp).Row
lonLaatsteRijData = wsData.Cells(Rows.Count, 1).End(xlUp).Row

'kopieer de data vanuit wsScan, naar wsData
'uitgangspunt: alles uit wsScan moet worden gekopieerd naar de eerste vrije regel in wsData
With wsScan
  'eerst kopieer je de waarden uit de wsScan kolommen AB naar wsData, kolommen AB
  Set rngKopieer = .Range(.Cells(1, 1), .Cells(lonLaatsteRijScan, 2))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 1).PasteSpecial.[u]Values[/u]
  'idem voor kolom D -> C
  Set rngKopieer = .Range(.Cells(1, 4), .Cells(lonLaatsteRijScan, 4))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 3).PasteSpecial.[u]Values[/u]
  'idem voor kolom EF -> DE
  Set rngKopieer = .Range(.Cells(1, 5), .Cells(lonLaatsteRijScan, 6))
  rngKopieer.Copy
  wsData.Cells(lonLaatsteRijData + 1, 4).PasteSpecial.[u]Values[/u]
End With

Application.CutCopyMode = False

End Sub


Dit werkte helaas niet.

Het 2e kleine probleempje is dat hij alles vanuit het dashboard kopieert echter moet dit alleen rij 6 zijn.
voor het plakken van waarden: zet
code:
1
xlPasteValues
achter de pastespecial
dus:
code:
1
wsData.Cells(lonLaatsteRijData + 1, 4).PasteSpecial xlPasteValues


als je alleen rij 6 wilt kopiëren, dan moet je het te kopiëren bereik aanpassen...
bijvoorbeeld:
code:
1
Set rngKopieer = .Range(.Cells(6,1), .Cells(6, 2))
voor het kopiëren van de cel uit Rij 6, kolom A (6,1) t/m rij 6, kolom B (6,2).
lonLaatsteRijScan hoeft dan ook niet meer bepaald te worden (je neemt immers altijd alleen de 6e rij), en kan dus uit de declaraties en uit de rest van de code worden verwijderd..

succes!

[ Voor 0% gewijzigd door breew op 17-10-2017 12:37 . Reden: xlValues moest xlPasteValues zijn... ]


Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 21:16
tip:
In de Code-editor kun je met F8 kun je door de code 'stappen'.. Als je dan in Beeld -> Venster Lokale Variabelen aan zet, kun je 'live' bekijken wat de waarde van de variabelen is geworden nar uitvoeren van een regel code. Op deze manier kun je snel kijken wat een stuk code precies doet. Hierdoor is het onmisbaar bij foutopsporen :)

Acties:
  • +1 Henk 'm!

  • NO_Excuses
  • Registratie: Juli 2012
  • Laatst online: 08-03 13:51
@breew Bedankt voor je hulp en je tips! Het is helemaal gelukt!
Pagina: 1