Keresés

Részletes keresés

Törölt nick Creative Commons License 2010.11.16 0 0 13280

Hogy ne unatkozzatok :)

 

"A" munkalapon a2-a10-ig adatok.

Ezt kell visszaadni "B" munkalap "A" oszlopának minden második sorába. Beépített Függvénnyel úgy, hogy azokat csak kopipasztézni kell minden második sorba a "B" munkalapon.

Ti hogy csinálnátok?

Törölt nick Creative Commons License 2010.11.16 0 0 13279

Nem egészen értem a Delila-féle algoritmus logikáját, szóval nem tudom megmondani, miért nem úgy megy, ahogy kellene.

 

Az enyém azt csinálja, hogy a munkalap utolsó (és remélhetőleg használaton kívüli) oszlopában véletlenszerűen elhelyez x-eket, és ezt addig csinálja, míg lesz összesen annyi x, ahány sort át akarsz másolni.

Utána az x-szel jelölt sorokat átmásolja egy új munkalapra, végül törli az x-eket a forrás és a cél munkalapról egyaránt.

 

Ahhoz, hogy a fejléc ne kerüljön bele a szórásba, az egyik sor módosítani kell, így:

 

i = Int(Rnd() * (XRange.Cells.Count - 1)) + 2

Előzmény: wawabagus (13278)
wawabagus Creative Commons License 2010.11.16 0 0 13278

Szia!

Köszi szépen :-). Megpróbálom értelmezni a kódot, de előbb lehiggasztom magam egy ebéddel.

 

Annyira idegesítő, mikor nem értem miért nem azt csinálja az excel amit akarok....

 

Előzmény: Törölt nick (13275)
wawabagus Creative Commons License 2010.11.16 0 0 13277

Bocs, hogy ilyen hosszúra sikerült.

 

sor = Int(Rnd() * Rnd() * usor) + 2

 

Azért raktam 2 a végére, mert azt gondolom /így van :-D?/, hogy az jelenti, hogy 2 sortól számoljon...az 1-ben a fejlécem van...

Azt nem akarom hogy másolgassa/mint ahogy egyébként tette/.

 

hmm

 

wawabagus Creative Commons License 2010.11.16 0 0 13276

áááá...megőrülök.

 

Tök jól beraktam a ciklusba a sorbarakást. De előforul még mindig /igaz nagyon ritkán, hogy duplikál/.

MIÉRT TESZI EZT VELEM?

Nem értem.

 

    usor = ActiveSheet.UsedRange.Rows.Count


        db = Workbooks("ISD ReplacementOrders template.xls").Sheets("Filters").Range("ZA").Value


        sor_1 = 2



             For i = 1 To db



                sor = Int(Rnd() * usor) + 2



                Worksheets(1).Range(sor & ":" & sor).Copy


                ActiveSheet.Paste Destination:=Worksheets(2).Range(sor_1 & ":" & sor_1)

 


         sor_1 = sor_1 + 1


    
    Next


    
     Do



        For i = 3 To db



            If Cells(i, 1) = Cells(i - 1, 1) Then



                sor = Int(Rnd() * Rnd() * usor) + 2



                Worksheets(1).Range(sor & ":" & sor).Copy


                ActiveSheet.Paste Destination:=Worksheets(2).Range(i & ":" & i)



                f = True


            End If


         Sheets(2).Select


         db = db + 1



        Range("A2:AA" & db).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _


        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _


        DataOption1:=xlSortNormal



        Next



   Loop While f = False

 

 

Előzmény: Delila10 (13246)
Törölt nick Creative Commons License 2010.11.16 0 0 13275

Itt egy másfajta megközelítés:

 

Sub veletlen()

    Dim XRange As Range, c As Range, db As Long, i As Long
    Dim wsSrc As Worksheet, wsTgt As Worksheet
    
    Set wsSrc = ActiveSheet
    
    Set XRange = Intersect(wsSrc.Columns(wsSrc.Columns.Count), wsSrc.UsedRange.EntireRow)
    db = InputBox("Hány sort akarsz másolni?")
    If db > XRange.Cells.Count Then
        MsgBox "Az túl sok."
        Exit Sub
    End If
    While Application.WorksheetFunction.CountA(XRange) < db
        i = Int(Rnd() * XRange.Cells.Count) + 1
        XRange(i) = "x"
    Wend
    
    Set wsTgt = ThisWorkbook.Worksheets.Add
    For Each c In XRange
        If c = "x" Then c.EntireRow.Copy wsTgt.Range("A" & wsTgt.Rows.Count).End(xlUp).Offset(1)
    Next
    XRange.ClearContents
    wsTgt.Columns(wsTgt.Columns.Count).ClearContents
End Sub

Előzmény: wawabagus (13273)
Törölt nick Creative Commons License 2010.11.16 0 0 13274

szívesen

Előzmény: Bizakodóvagyok (13272)
wawabagus Creative Commons License 2010.11.16 0 0 13273

Szia Delila_1!

:-DDD...

 

Megint rájöttem valamire :-D :-D :-D.

 

Hiába rendezi az adatokat, semmi garancia nincs arra, hogy nem másol be megint egy olyan sort, ami volt már korábban.

 

Azt hiszem ezt azzal lehetne kivéden, ha a cikluson belül ismétli a sorbarakást.

 

Jól látom?

 

:-)

Előzmény: Delila10 (13246)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13272

Szia!

 

 DateSerial helyre tette (nem ismertem) :))))

 

Köszönöm, jó éjt!

Üdv,

B.

 

 

Előzmény: Törölt nick (13269)
Törölt nick Creative Commons License 2010.11.15 0 0 13271

Még valami:

Szerintem felesleges ekkora Range, sokkal gyorsabb lesz, ha:

 

 

For Each rngCel In Columns("A:A").SpecialCells(xlCellTypeConstants, 23) 'Konstans cellatartalomhoz.

 

Módszerrel gyalogolsz végig.

A Columns helyett nyilván lehet Range is. Sőt. Neked az kell. És megspóroltál pár változót és sort.

 

Előzmény: Bizakodóvagyok (13257)
Törölt nick Creative Commons License 2010.11.15 0 0 13270

Azért csak F2-re frissül a tiéd, mert simán szöveget adsz át a celláknak. Ha F2-re (stb) enter ütsz, akkor az autmatikus dátumfelismerés helyreteszi. Szerintem.

Előzmény: Bizakodóvagyok (13267)
Törölt nick Creative Commons License 2010.11.15 0 0 13269

És asszem így formáznám meg:

rngCel.NumberFormat = "yyyy/m/d"

Előzmény: Bizakodóvagyok (13257)
Törölt nick Creative Commons License 2010.11.15 0 0 13268

én a "Format" helyett "DateSerial"-t használnám.

DateSerial(intEv, bytHonap, bytNap)

Előzmény: Bizakodóvagyok (13257)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13267

Az a baj, h ez a kód egy nagyobb makró része, ezért futás közben kéne megcsinálnia a kivonást. De Type mismatch-csel tér vissza a VBA editor. :( Egyébként konkrét számértéket kellene kivonnom belőle, gondolom azért ez a hibaüzenet, mert minden áron szövegként kezeli a dátumom. Kipróbáltam több gépen, 2003-as Excellel is. Ugyanez történik :( Excel beállításait néztem, de nem találtam erre vonatkozóan semmit. Azt nem értem igazból, hogy mitől lesz jó, ha belekattintok (vagy F2), majd elhagyom a cellát (enter, tab vagy máshova klikk az mindegy, mindenhogy jó akkor már).

Előzmény: Or Kán (13265)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13266

A makró nem csak ezt csinálja :)

Sok műveletet kell elvégeznem több adattáblával, amikből további riportokat csinálok. Úgy vagyok vele, h ha már nekiállok egy programnak, akkor a felhasználónak lehetőleg nem hagyok manuálisan elvégzendő feladatot. Szerintem ez a lényege a makróknak :)

 

 

Előzmény: Törölt nick (13264)
Or Kán Creative Commons License 2010.11.15 0 0 13265

Közben lefuttattam a programodat, és teljesen jónak tűnik. A kivonási művelet elvégezhető a programfuttatás után.

Előzmény: Bizakodóvagyok (13257)
Törölt nick Creative Commons License 2010.11.15 0 0 13264

Megbocsáss. Minek ehhez makró?

Előzmény: Bizakodóvagyok (13263)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13263

Normális dátumformátum alatt azt értem, h a cella formátuma dátumformátum, az adat jobb oldalra igazodik, és lehet vele összeadást/kivonást végezni.

 

A J és K oszlopban vannak a számomra teljesen rossz dátumok. (nap.hó.év)

Ezt csak azért írtam oda, hogy ne kelljen átírnom a kódot a példa miatt...h egyértelmű legyen.

Elszámoltam magam ezek szerint :)

Előzmény: Or Kán (13261)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13262

Szia!

 

 

"Miért nem ezt alkalmazod?

 

x = Range("A1").End(xlDown).Row"

 

Mert nem folyamatos az adat.

 

"(Nem is beszélve arról, hogy a 2007-es excelben már nem 65536 sor van egy munkalapon - ha már mindenképpen a végéről akarod kezdeni, hanem 1048576."

 

Az Excelem 2007-es, de az adattáblám 2003-ból van.

 

Azért köszi! :)

 

Előzmény: Or Kán (13260)
Or Kán Creative Commons License 2010.11.15 0 0 13261

Egyébként mit értesz "normális dátumformátum" alatt? És mi van a "J", illetve a "K" oszlopban?

Előzmény: Bizakodóvagyok (13257)
Or Kán Creative Commons License 2010.11.15 0 0 13260

Nem ez a probléma, de ezen a soron fennakadt a szemem:

 

x = Range("A65536").End(xlUp).Row

 

Ez olyan bal kézzel vakarom a jobb fülemet, nem?

 

Miért nem ezt alkalmazod?

 

x = Range("A1").End(xlDown).Row

 

(Nem is beszélve arról, hogy a 2007-es excelben már nem 65536 sor van egy munkalapon - ha már mindenképpen a végéről akarod kezdeni, hanem 1048576.)

 

Bocsánat, hogy közbeszóltam.

Előzmény: Bizakodóvagyok (13257)
Aata1 Creative Commons License 2010.11.15 0 0 13259

Nagyon köszönöm a segítséget, megoldódtak a gondok! :D

Előzmény: Törölt nick (13256)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13258

*Elakadtam egy feladattal, ezért fordulok hozzátok. :)

Előzmény: Bizakodóvagyok (13257)
Bizakodóvagyok Creative Commons License 2010.11.15 0 0 13257

Sziasztok!

 

 Elakadtam egy, ezért fordulok hozzátok.

 Excel 2007-ben készítek pár makrót. (igen, tudom… a 2003-at én is jobban szerettem :D)

 

 Ebből a formátumból kell normális dátumformátumot csinálnom („J” és „K” oszlopokban vannak):

26.8.2037

9.9.2037

22.11.2036

11.7.2037

12.9.2037

28.8.2037

24.8.2037

3.9.2037

 

Ehhez ezt barkácsoltam össze:

 

    Dim x As Integer

    Dim i As Integer

    Dim Rng As Range

    Dim rngCel As Range

    Dim strDatum As String

    Dim bytNap As Byte

    Dim bytHonap As Byte

    Dim intEv As Integer

 

x = Range("A65536").End(xlUp).Row

Set Rng = Range("J2:K" & x)

    For Each rngCel In Rng

        With rngCel

        strDatum = .Offset(, 0)

                  If InStr(strDatum, ".") > 0 Then

                bytNap = Trim(Left(strDatum, InStr(strDatum, ".") - 1))

                strDatum = Trim(Mid(strDatum, InStr(strDatum, ".") + 1))

                bytHonap = Trim(Left(strDatum, InStr(strDatum, ".") - 1))

                intEv = Trim(Right(strDatum, 4))

                .Formula = Format(intEv & "." & bytHonap & "." & bytNap, "yyyy/m/d")

            End If

        End With

    Next

 

 

 

A problémám:

Az eredmény a cella bal oldalához van igazítva, tehát olyan, mintha szövegformátum lenne. (A formátuma általános.) Emiatt raktam be a végére a Format-ot az eredménybe, ami teljesen felesleges amúgy (sztem).

A lényeg: ha átállítom szám- vagy dátumformátumra, akkor továbbra is ott marad a bal oldalán a cellának, ezért „Type mismatch” miatt nem tudok vele számolásokat végezni. Ha nyomok egy F2-t vagy duplaklikket a cellán, majd átkattintok másik cellára, akkor azonnal jó lesz a korábban beállított formátum. Nem tudok rájönni, hogy mi a baj, mert a makrórögzítés sem árul el semmit, mert a kód alapján egyszerű értékadásról van szó.

 

Segítségeteket előre is köszönöm! J

Üdv,

B.

 

Törölt nick Creative Commons License 2010.11.15 0 0 13256

Nézd meg, hogy van-e a

C:\Documents and Settings\(user)\Application Data\Microsoft\Excel\XLSTART

mappában egy personal.xls fájl.

Ha van, töröld ki. Vagy talán jobb, ha átnevezve elmented valahová. Ez a fájl ugyanis általában úgy keletkezik, hogy makrót rögzítesz benne. Azokra meg még szükséged lehet.

Előzmény: Aata1 (13254)
wawabagus Creative Commons License 2010.11.15 0 0 13255

:-)))...

Ugyanabba a hibába estél, mint én.

Elvileg az normális, ha a háttérben ott van a Personal.xls, de persze nem így, mint neked.

 

Nálam a hiba abból jött, hogy definiáltam az actuális munkafütetet, ami nyitva van (mivel VBA-ban és personalban dolgoztam ez pont ez a fájl volt), aztán mentettem a makróban az "akutális munkafüzetet", ami a Personal volt.

 

Ezt a momentumot kell megtalálni és korrigálni a makróbal /remélem jól írtam...javítsatok, ha hülyeségeket beszélek/.

 

Én kijavítottam, hogy máshogy definiálja az "aktív munkafüzetet" és töröltem a plusz Personal-! az excel folderből.

 

 

Előzmény: Aata1 (13254)
Aata1 Creative Commons License 2010.11.15 0 0 13254

Sziasztok!

 

Talán emlékesztek, hogy kérdezgettem itt a makrókról ezt-azt. Na most úg yelállítottam a dolgokat, hogy jelenleg minden egyes Excel megnyitásakor vele együtt nyílik egy PESONAL.xls fájl is. Miért? Hogy tudom leállítani?

A helyes megoldás beküldői között "Köszönöm"-öt sorsolunk ki!

 

A.

Delila10 Creative Commons License 2010.11.15 0 0 13253

Szívesen. :)

Előzmény: wawabagus (13252)
wawabagus Creative Commons License 2010.11.15 0 0 13252

Szia!

Most reggel gondolkoztam és rájöttem arra, hogy a makródba be lehetne iktatni egy olyat, hogy lellenőrizné, hogy copizott-e már be ilyen sort :-)....

 

De amit írtál még jobb :-)!!

Nagyon nagyon köszönöm!!

 

Y

Előzmény: Delila10 (13246)
Törölt nick Creative Commons License 2010.11.13 0 0 13251

A "Count" ismert előttem - tehát azt értetted, amire gondoltam. Keresgéltem, de nem találtam használható forrást - alighanem végig kell lépkedni az elemeken és megszámolgatni külön. Aban bíztam,

hogy van erre valami metódus...

Előzmény: SQLkerdes (13250)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!