Tema: Re: Q. excel
Autorius: Juozas V.
Data: 2011-01-28 12:45:54
On Fri, 28 Jan 2011 09:08:54 +0200, "Mindaugas" <nera@mailo.com> wrote:

>Va cia tai ko reikia, didelis ACIU, bet ....  su mavo kukliom ziniom nepavyko perprasti kas, kur kaip ir kodel :((( o perprasti noretusu, kad galeciau ir kitokio tipo lentelej pritaikyti, ar elementariai iterpti stulpeli ar eilute...
>
Bandau pridėti komentarus ;)

Type rws ' aprašo būsimos lentelės tipą
  a As String
  b As String
  c As Variant
End Type

Sub SumUnique()
  Dim LastRow As Long, MyRow As Long ' Last Row - paskutinė duomenų eilutė, MyRow - skaičiuojama
  Dim duom1 As String, duom2 As String, duom3 ' - nuskaitomi duomenys
  Dim Result() As rws ' Lentelė, kurią procedūros pabaigoje išvedame į ekraną
  Dim n, i, Prideti As Boolean 'pagalbiniai kintamiejai
  Application.ScreenUpdating = False ' išjungia ekrano perpiešimą ( teoriškai turėtų būti greičiau atliekama procedūra)
  n = 2
  Prideti = True
  LastRow = Range("A" & Rows.Count).End(xlUp).Row suranda paskutinę lentelės eilutę. Atitinka, jei pasižymėtai paskutinę Sheeto celę
(A65536), po to paspaustai "End" ir rodyklę į viršų
  For MyRow = 2 To LastRow ' nuo antros iki paskutinės eilutės
    duom1 = Cells(MyRow, 1).Value ' Nuskaito reikšmes A, B ir C stulpeliuose
    duom2 = Cells(MyRow, 2).Value
    duom3 = Val(Cells(MyRow, 3).Value) ' Val funkcija paverčia skaičiumi tekstinį įrašą. Jei bus "123A" gausi 123, jei "A123" ar "AA" tai 0 
    If MyRow = 2 Then 'jei eilutės nr. 2
      ReDim Result(2 To 2) 'aktyvuoja lentelę Result
      Result(2).a = duom1 ' ir surašo antros eilutės duomenis
      Result(2).b = duom2
      Result(2).c = duom3
    Else ' jei eilutės numeris ne 2
      For i = 2 To n ' tikrina A ir B stulpelio reikšmes su lentelės reikšmėm
        If (duom1 = Result(i).a) And (duom2 = Result(i).b) Then' jei randa sutampančius
          Result(i).c = Result(i).c + duom3 ' tai priplisuoja C stulpelio reikšmę prie esamos
          Prideti = False ' pakeičia kintamojo Prideti reikšmę (nebus naujos eilutės lentelėje )
          Exit For ' nutraukia procedūrą For (nebūtina eilutė, truputį pagreitina darbą)
        End If
      Next i
        If Prideti = True Then 'jei nebuvo rasta sutapimų
          n = n + 1
          ReDim Preserve Result(2 To n) 'prideda eilutę Result lentelėje
          Result(n).a = duom1 ' ir surašo nuskaitytas reikšmes
          Result(n).b = duom2
          Result(n).c = duom3
        End If
        Prideti = True ' pakeičia Prideti reikšmę į pradinę
    End If
  Next MyRow
  Range("A2:C" & LastRow).Delete ' ištrina duomenų lentelę
  For MyRow = 2 To n ' ir surašo į tą vietą naujus duomenis iš Result()
    Cells(MyRow, 1).Value = Result(MyRow).a
    Cells(MyRow, 2).Value = Result(MyRow).b
    Cells(MyRow, 3).Value = Result(MyRow).c
  Next MyRow
  Application.ScreenUpdating = True ' Įjungia ekrano perpiešimą
End Sub ' Ir viskas
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser