Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Abi exceli makroga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
TheAnswer
HV kasutaja
TheAnswer

liitunud: 28.05.2006




sõnum 29.12.2009 23:44:23 Abi exceli makroga vasta tsitaadiga

tegemist siis sellise tabeliga(kokku umbes 40 veergu ja üle 20 000 rea): http://theanswer.planet.ee/Ex/tabel.png
Iga veeru jaoks on olemas mingi lävend.
Oleks vaja teisele lehele iga jaama nime alla vastava lävendi ületanud kuupäevade nimekirja.

Hetkel olemas selline macro

vb:
  1.  
  2. Do
  3.  
  4.     If ActiveCell >= "vastav lävend" Then
  5.         ActiveCell.Offset(0, -1).Copy
  6.         Sheets("Sheet2").Select
  7.         'Range("A1").Select
  8. Line1:
  9.         If ActiveCell = "" Then
  10.                 Selection.PasteSpecial Paste:=xlPasteValues
  11.                 ActiveCell.Offset(1, 0).Activate
  12.                 GoTo Line2
  13.         ElseIf ActiveCell > 0 Then
  14.                 ActiveCell.Offset(1, 0).Activate
  15.                 GoTo Line1
  16.         End If
  17. Line2:
  18.     Sheet1.Activate
  19.     ActiveCell.Offset(1, 0).Activate
  20.    
  21.     ElseIf ActiveCell < 5 Then
  22.     ActiveCell.Offset(1, 0).Activate
  23.     End If
  24.  
  25. Loop Until ActiveCell.Value = ""
  26.  
  27. End Sub


See aga ei oska võtta igale jaamale vastavat lävendit ja iga uue jaama uurimiseks peaksin offseti muutma.
Äkki on mingeid elegantsemaid lahendusi?

Ette tänades.


viimati muutis TheAnswer 30.12.2009 14:06:54, muudetud 1 kord
Kommentaarid: 45 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 43
tagasi üles
vaata kasutaja infot saada privaatsõnum
Le Inc
HV Guru
Le Inc

liitunud: 06.09.2002



Autoriseeritud ID-kaardiga

sõnum 30.12.2009 13:02:38 vasta tsitaadiga

Tabelil on veerud (column) ja read (rows)!

Mis asi see "lävend" on? Mingi X string mille järgi otsida? Tundub muidu suhteliselt lihtne liiguta -> kopeeri asi olevat.

Kopeerimine Selection.Paste kaudu on aeglane ja teeb macro veelgi aeglasemaks! Kasuta otsest "kopeerimist" Cells(k, 1) = Cells(k, 3) jne.
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
TheAnswer
HV kasutaja
TheAnswer

liitunud: 28.05.2006




sõnum 30.12.2009 14:16:31 vasta tsitaadiga

Le Inc kirjutas:
Tabelil on veerud (column) ja read (rows)!

Mis asi see "lävend" on? Mingi X string mille järgi otsida? Tundub muidu suhteliselt lihtne liiguta -> kopeeri asi olevat.

Kopeerimine Selection.Paste kaudu on aeglane ja teeb macro veelgi aeglasemaks! Kasuta otsest "kopeerimist" Cells(k, 1) = Cells(k, 3) jne.


Unise peaga kaks korda veerud õnnestunud kirjutada icon_confused.gif
Lävend oleks siis väärtus millest suuremad või võrdsed väärtused mind huvitavad, ehk siis mille kuupäeva oleks vaja teise tabelisse kopeerida.
Proovin seda otsest kopeerimist.
Lisasin tabelist pildi ka http://theanswer.planet.ee/Ex/tabel.png
Kommentaarid: 45 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 43
tagasi üles
vaata kasutaja infot saada privaatsõnum
Le Inc
HV Guru
Le Inc

liitunud: 06.09.2002



Autoriseeritud ID-kaardiga

sõnum 30.12.2009 16:33:40 vasta tsitaadiga

Proovi kasutada:

Sub Otsi()
For k = 2 To 5000 

KOOD
KOOD
KOOD

Next k
End sub


Lase kõik read ühekaupa üle ja kontrolli vastavat veergu mingi oma aastaarvuga. Saad ju nimekirjas liikuda kui lisad ridu Cells(k+1, 2) või vähendad Cells(k-1, 2) jne. Vajadusel saad lisada alam "loop'e" samal põhimõttel. GOTO värk pole teab mis hea kasutada.

Egas see sul kooliülesanne ole!?
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
TheAnswer
HV kasutaja
TheAnswer

liitunud: 28.05.2006




sõnum 03.01.2010 18:24:28 vasta tsitaadiga

Le Inc kirjutas:
Proovi kasutada:

Sub Otsi()
For k = 2 To 5000 

KOOD
KOOD
KOOD

Next k
End sub


Lase kõik read ühekaupa üle ja kontrolli vastavat veergu mingi oma aastaarvuga. Saad ju nimekirjas liikuda kui lisad ridu Cells(k+1, 2) või vähendad Cells(k-1, 2) jne. Vajadusel saad lisada alam "loop'e" samal põhimõttel. GOTO värk pole teab mis hea kasutada.

Egas see sul kooliülesanne ole!?


Tegemist on sademete andmetega. Mind huvitab mis päevadel on sadanud rohkem kui need väärtused mis ma igale jaamale ette olen andnud. Tegemist on mu magistritöö väikese osaga.(ei tea mis kool annaks koduseks tööks tabeli kus 20k+ veergu icon_wink.gif )

Edit2
Probleem nüüd lahendatud. Tänud Le inc, et juhatasid mind õigele teele.
vb:
  1. Sub kuupäevad()
  2.  
  3. For Veerg = 1 To 40
  4.     For counter = 1 To 8280
  5.  
  6.         If ActiveCell >= Cells(81, 5 + Veerg) Then
  7.             ActiveCell.Offset(0, -Veerg).Activate
  8.             Selection.Copy Destination:=Worksheets("Suvi").Cells(counter, Veerg)
  9.             ActiveCell.Offset(0, Veerg).Activate
  10.         Else
  11.         End If
  12.       ActiveCell.Offset(1, 0).Activate
  13.     Next counter
  14.     ActiveCell.Offset(-8280, 1).Activate
  15. Next Veerg
  16. End Sub
Kommentaarid: 45 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 43
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Abi exceli makroga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.