Moi!
Ongelma päivämäärien vertailu/lajittelu pitäisi poimia sarakkeesta ei koko saraketta, seuraava vastaantuleva päivämäärä ja kopioda se toiselle "etusivulle" taulukko2 puolelta. Taulukoita on useampia joissa päivämäärät vaihtelee ja taulukoista pitäisi saada seuraava pvm etusivulle...
laitoin makrolla lajittelun ja poimin solun sarakkeesta "K" etusivulle, mutta nyt järjestysnumero muuttuu ja taulukon käytön kannalta monimutkaistuu jos en sitten laita ennen käyttöä palauta lajittelu järjestysnumeron mukaan.
Helpompiakin konsteja on!
Moi stone!
tässä muutamia esimerkkejä...
'VBAProject(Työkirja1) - Taul1 Private Sub CommandButton1_Click() 'alustetaan long ja string tyyppiset muuttujat Dim rivit As Long, alue As String 'asetetan muuttujan rivit arvoksi taulun Taul2 'viimeisimmän käytössä olevan solun rivinumero rivit = Taul2.Cells.SpecialCells(xlCellTypeLastCell).Row 'esim. 1 'taulun Taul2 sarakkeen K viimeisin päivämäärä 'taulun Taul1 sarakkeeseen A riville 1 For i = rivit To 1 Step -1 alue = "K" & CStr(i) & ":K" & CStr(i) If Taul2.Range(alue).Text <> "" And _ TypeName(Taul2.Range(alue).Value) = "Date" Then Taul1.Cells(1, 1).Value = Taul2.Range(alue).Value Exit For End If Next i 'esim. 2 'taulun Taul2 sarakkeen K ensimmäinen päivämäärä 'taulun Taul1 sarakkeeseen B riville 2 For i = 1 To rivit alue = "K" & CStr(i) & ":K" & CStr(i) If Taul2.Range(alue).Text <> "" And _ TypeName(Taul2.Range(alue).Value) = "Date" Then Taul1.Cells(2, 2).Value = Taul2.Range(alue).Value Exit For End If Next i 'esim. 3 Dim laskuri As Integer laskuri = 3 'taulun Taul2 sarakkeen K kaikki päivämäärät alkaen 'ensimmäisestä päivämäärästä taulun Taul1 sarakkeeseen C 'muuttujan laskuri osoittamalle riville alkaen muuttujan 'alkuarvon osoittamalta riviltä (3) For i = 1 To rivit alue = "K" & CStr(i) & ":K" & CStr(i) If Taul2.Range(alue).Text <> "" And _ TypeName(Taul2.Range(alue).Value) = "Date" Then Taul1.Cells(laskuri, 3).Value = Taul2.Range(alue).Value laskuri = laskuri + 1 End If Next i 'esim 4. 'käydään laskurisilmukassa taulun Taul2 'sarakeen K solut läpi alkaen riviltä 1 'muuttujan rivit osoittamalle riville... For i = 1 To rivit 'asetetaan muuttujan alue arvoksi merkkijono 'joka muodostaa sarakkeen K ja laskurin i 'osoittaman solun alueen merkkijonomutoisen arvon alue = "K" & CStr(i) & ":K" & CStr(i) 'jos edellä muodostetun alueen solun teksti arvo ei 'ole tyhjä ja solun arvon muoto on tyyppiä Date niin... If Taul2.Range(alue).Text <> "" And _ TypeName(Taul2.Range(alue).Value) = "Date" Then 'jos taulun Taul2 muuttujan alue osoittaman solun 'arvo on suurempi kuin taulun Taul1 sarakeen A rivin 1 'solun sisältämän päivämäärän arvo niin... If Taul2.Range(alue).Value > Taul1.Cells(1, 1).Value Then 'taulun Taul1 sarakeen A rivin 1 solun arvoksi 'taulun Taul2 muuttujan alue osoittaman solun arvo Taul1.Cells(1, 1).Value = Taul2.Range(alue).Value 'ja poistutaan laskurisilmukasta. Exit For End If End If Next i 'esim.5 'alustetaan kolme Date tyyppistä muuttujaa Dim pvm1 As Date, pvm2 As Date, pvm3 As Date 'asetetaan muuttujien pvm1 ja pvm3 arvoksi taulun 'Taul1 sarakkeen A rivin 1 solun sisältämä päivämäärä pvm1 = Taul1.Cells(1, 1).Value pvm3 = Taul1.Cells(1, 1).Value 'aloitetaan päivämäärien etsintä taulun Taul2 'sarakkeen K muuttujan rivit osoittamalta riviltä For i = rivit To 1 Step -1 'asetetaan muuttujan alue arvoksi merkkijono 'joka muodostaa sarakkeen K ja laskurin i 'osoittaman solun alueen merkkijonomutoisen arvon alue = "K" & CStr(i) & ":K" & CStr(i) 'jos edellä muodostetun alueen solun teksti arvo ei 'ole tyhjä ja solun arvon muoto on tyyppiä Date niin... If Taul2.Range(alue).Text <> "" And _ TypeName(Taul2.Range(alue).Value) = "Date" Then 'asetetaan muuttujan pvm2 arvoksi ko. solun arvo pvm2 = Taul2.Range(alue).Value 'jos muuttujan pvm1 arvo on suurempi 'tai yhtäsuuri kuin muuttujan pvm2 arvo niin... If pvm1 >= pvm2 Then 'poistutaan For...Next laskurisilmukasta 'jolloin muuttujan pvm3 arvoksi jää muuttujan 'pvm2 se arvo joka oli lähinnä seuraavaksi 'suurempi muuttujan pvm1 arvoa *** Exit For Else pvm3 = pvm2 '*** End If '(jos taulun Taul2 sarakkeen K minkään solun arvo 'ei ollut suurempi kuin taulun Taul1 sarakkeen A 'rivin 1 solun arvo niin päivämäärä ei muutu) End If Next i 'asetetaan taulun Taul1 sarakkeen A 'rivin 1 solun arvoksi muuttujan pvm3 arvo Taul1.Cells(1, 1).Value = pvm3 End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.