Keresés

Részletes keresés

djmorphy Creative Commons License 2013.01.16 0 0 20049

Szia!

 

Linkelem hogy néz ki a táblázat. Na most ebből van 100 egységig amihez hozzá lehet fűzni, hogy hanyadik héten történt a bejegyzés és megjegyzést lehet hozzátenni.

És azt szeretném, hogy ha van mondjuk 60 egységgel akkor ne egyessével kelljen kiválasztani, hogy raktáron hanem automatikusan legyen raktáron.

 

 

https://lh3.googleusercontent.com/-Or5_P30S4FE/UPZaQ4eRebI/AAAAAAAAFuw/g4WWt-f0zZU/s1024/excel.jpg

 

 

Előzmény: Delila10 (19986)
Delila10 Creative Commons License 2013.01.16 0 0 20048

Módosítod a sablonodat, és más néven mented. Ez új fájl létrehozásának minősül, vagyis tudod menteni a hálózati mappába.

Előzmény: Redlac (20046)
Numan Creative Commons License 2013.01.16 0 0 20047

Köszönöm ismételten a kódot, még csak most fogom tesztelni, de amint végignéztem írok majd.

 

Előzmény: pimre (20043)
Redlac Creative Commons License 2013.01.15 0 0 20046

Köszönöm az ötletelést, nem belekotyogásnak veszem :-)

 

A helyzet az, hogy de a szerveren van az, amit te is írsz. A gond, hogy ide CSAK másolni tudunk, módosítani, törölni nem...tehát ide csak akkor másolunk fel valamit (Excel, Word dokumentum, fénykép), ha már kész.

 

Előzmény: pimre (20045)
pimre Creative Commons License 2013.01.15 0 0 20045

Bocs, hogy belekotyogok, de nem értem, miért kell mindenkinek a saját gépére menteni a fájlokat. Mert úgy látom, ebből adódik a legtöbb gond. Nincs egy olyan központi szerver, amely mindig rendelkezésre áll? Mert ha van, akkor én ott nyitnék egy könyvtárat. Ebben létrehoznék felhasználónként egy-egy alkönyvtárat. És akkor mindenkinek a saját könyvtárába kerülhetne a mentés. És akkor könnyebb lenne az esetenkénti archiválása is az egész állománynak. És akkor talán a fájlnevek kezelésére is könnyebbb lenne kidolgozni valami egyszerűbb rendszert. És Te nem a pendrájvodra dolgoznál, hanem a szerverre, és ha kell otthon is az anyag, akkor a munka végeztével egyszerűen átmásolod magadnak.

Előzmény: Redlac (20044)
Redlac Creative Commons License 2013.01.15 0 0 20044

Akkor jobbat mondok...

 

A d:\dokumentumok mindegyik gépünkön jelen van (direkt nem a C-n).

Ebben vannak a nevek szerinti mappák (Kis Pista, Nagy Péter stb.)

 

Azt meg tudom oldani (illetve Delila egyik makrója tudja azt), hogy a felhasználó szerinti mappába történjen a mentés.

A mappa készítés makróval, na az jó pofa lehet, illetve, hogy abba mentse azt az Excel fájlt, amin dolgozik a jóember.

Előzmény: ujszaszy (20033)
pimre Creative Commons License 2013.01.15 0 0 20043

Kezdjük az off-al: A 8. sorod hibás, mert az az 1 perc még 7 óra előtt volt, ezért a helyes érték 0, a 10. sorban meg 44.34 a helyes érték.

 

De a lényeg, hogy megcsináltam, amit kértél. Az eredményeket kénytelen voltam stringgé formázni (tehát nem tudsz számolni velük). Ugyanis, nem tudtam olyan formázást találni, hogy idő formátum kerüljön a táblázatba akkor is, ha az órák száma 24 fölé megy. Tehát a 36:01 helyett 12:01-et mutatott, és a szerkesztőlécen pedig 1900.01.02 12:01 jelent meg. Ha valaki tudna segíteni, hogyan lehetne ezt kiküszöbölni, az jó lenne.

 

A program végigmegy a táblázaton. Az esetleges üres sorokat kihagyja (üresnek tekinti azt, ahol a kezdő és a befejező dátum üres)

 

Ha csak a kezdő, vagy a befejező dátum hiányzik, akkor erre a program figyelmeztet, és az adott sort átugorja. Ugyancsak figyelmeztet, ha a kezdő és befejező dátum azonos.

Ha a kezdő és befejező dátum fel lett cserélve, akkor a figyelmeztetésen kívül be is írja ezt a tényt az adott sorban a munkaidő (C) oszlopba

 

Igyekeztem tesztelni a programot szélsőséges esetekkel is, egyelőre nem találtam hibát, de azért egy darabig ellenőrizd magad is, nem maradt-e benne véletlenül poloska.

 

Végül mindenkitől elnézést kérek, hogy ilyen hosszú programot másolok be ide. Ha még módosulna, azt majd a data.hu-oldalra másolom. És akkor a program:

 

Sub munkaórák()

Const forrásoszlop1 As String = "A", forrásoszlop2 As String = "B", céloszlop As String = "C"

Const kezdőóra As Integer = 7, végóra As Integer = 19

Dim üresdátum As Date, dátum1 As Date, év1 As Integer, hó1 As Integer, nap1 As Integer, óra1 As Integer, perc1 As Integer

Dim dátum2 As Date, év2 As Integer, hó2 As Integer, nap2 As Integer, óra2 As Integer, perc2 As Integer

Dim aktsor As Integer, céloszlopszám As Integer

Dim elsőnapióra As Integer, utolsónapióra As Integer, elsőnapiperc As Integer, utolsónapiperc As Integer, _

                            köztesnapióra As Integer, összesóra As Integer, összesperc As Integer, eredmstring As String

Dim utolsósor As Long

utolsósor = ActiveCell.SpecialCells(xlLastCell).Row

For aktsor = 1 To utolsósor

    céloszlopszám = oszlopszám(céloszlop)

    Cells(aktsor, céloszlopszám).Select

    dátum1 = Cells(aktsor, oszlopszám(forrásoszlop1))

    dátum2 = Cells(aktsor, oszlopszám(forrásoszlop2))

    If dátum1 = üresdátum And dátum2 = üresdátum Then ' ha üres mindkét dátum

        GoTo ciklusvége ' akkor tovább

    ElseIf dátum1 = üresdátum Or dátum2 = üresdátum Then ' ha csak az egyik üres

        If dátum1 = üresdátum Then

            MsgBox "A kezdő időpont hiányzik!"

        Else

            MsgBox "A befejező időpont hiányzik!"

        End If

        GoTo ciklusvége

    ElseIf dátum2 < dátum1 Then ' némi védelem hibás adat ellen

        MsgBox "Hibás dátumok. A második kisebb, mint az első!"

        Cells(aktsor, céloszlopszám) = "Hibás dátumok. A második kisebb, mint az első"

        GoTo ciklusvége

    ElseIf dátum2 = dátum1 Then ' Ha azonosak, akkor 0 óra telt el

        Cells(aktsor, céloszlopszám) = 0

        MsgBox "A kezdő és befejező időpont azonos!"

        GoTo ciklusvége

    End If

    év1 = Year(dátum1)

    hó1 = Month(dátum1)

    nap1 = Day(dátum1)

    óra1 = Hour(dátum1)

    perc1 = Minute(dátum1)

    elsőnapióra = 0

    elsőnapiperc = 0

    If óra1 < kezdőóra Then

        elsőnapióra = végóra - kezdőóra ' Ha 7 előtt kezdett, akkor ez teljes napnak számít

    Else

        If óra1 < végóra Then

            elsőnapióra = végóra - óra1 ' Ha 19 óra előtt kezdett, akkor ennyi az értékes órák száma, egyébként 0

            If perc1 > 0 Then

             elsőnapióra = elsőnapióra - 1

             elsőnapiperc = 60 - perc1

            End If

        End If

    End If

    óra1 = 0

    perc1 = 0

    dátum1 = CDate(Str(év1) + "." + Str(hó1) + "." + Str(nap1) + Str(óra1) + ":" + Str(perc1)) + 1 ' A következő nap

    év2 = Year(dátum2)

    hó2 = Month(dátum2)

    nap2 = Day(dátum2)

    óra2 = Hour(dátum2)

    perc2 = Minute(dátum2)

    utolsónapióra = 0

    utolsónapiperc = 0

    If óra2 > végóra Then

        utolsónapióra = végóra - kezdőóra ' Ha 19 óra után végzett, akkor ez teljes napnak számít

    Else

        If óra2 > kezdőóra Then

            utolsónapióra = óra2 - kezdőóra ' Ha 7 után végzett, akkor ennyi az értékes órák száma, egyébként 0

            If perc2 > 0 Then

                utolsónapiperc = perc2

            End If

        End If

    End If

    óra2 = 0

    perc2 = 0

    dátum2 = CDate(Str(év2) + "." + Str(hó2) + "." + Str(nap2) + Str(óra2) + ":" + Str(perc2)) ' Ez az előző nap végének felel meg

    köztesnapióra = (dátum2 - dátum1) * (végóra - kezdőóra)

    összesóra = elsőnapióra + utolsónapióra + köztesnapióra

    összesperc = elsőnapiperc + utolsónapiperc

    If összesperc > 60 Then

        összesperc = összesperc - 60

        összesóra = összesóra + 1

    End If

    eredmstring = Format(LTrim(Str(összesóra)), "0") + ":" + Format(LTrim(Str(összesperc)), "00")

    Cells(aktsor, céloszlopszám).NumberFormat = "@" ' ezzel lesz string a cellaformátum, másképp elrontja a kiírási formátumot

    Cells(aktsor, céloszlopszám).HorizontalAlignment = xlRight ' és jobbra pozícionáljuk

    Cells(aktsor, céloszlopszám) = eredmstring

ciklusvége:

Next

Cells(aktsor, céloszlopszám).Select ' Végül az első üres sorra állunk

End Sub

 

Function oszlopszám(oszlopnév As String) As Integer ' Oszlopnévből oszlopszám kiírás

Dim első As Integer

Dim második As Integer

oszlopszám = 0

If Len(oszlopnév) = 1 Then

    oszlopszám = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", oszlopnév)

ElseIf Len(oszlopnév) = 2 Then

    első = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Left(oszlopnév, 1))

    második = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Mid(oszlopnév, 2, 1))

    If első > 0 And második > 0 Then ' Csak ha mindkettő érvényes

       oszlopszám = első * 26 + második

    End If

End If

If oszlopszám = 0 Then

    MsgBox "Programhiba: Hibás konstans oszlopnév: " + oszlopnév

End If

End Function

 

 

Előzmény: Numan (20024)
tbando Creative Commons License 2013.01.15 0 0 20042

Csak ámulok, hogy mik vannak az excelben.  Az igaz, hogy a cellatartalomból, le kellett vágni az óra perceket, mert velük a kijelölt 10 cellából csak az elsőt konvertálta, ráadásul azt is rosszul. De a csak dátumot mutató stringeket már prímán átalakította.  Mondjuk a logikáját nem értem, szívesen megbeszélném veled.

 

És persze kösz.  

Előzmény: SQLkerdes (20036)
tbando Creative Commons License 2013.01.15 0 0 20041

Solverrel optimalizáltam. Ha sok ehhez hasonló feladatod van, érdemes kitanulnod. Ha érdekelnek a feladatod solver beállításai, felrakhatom a data.hu-ra.

Előzmény: mtibsi (20038)
mtibsi Creative Commons License 2013.01.15 0 0 20040

Talán így jobban látható.

Előzmény: tbando (20025)
mtibsi Creative Commons License 2013.01.15 0 0 20039

Előzmény: tbando (20025)
mtibsi Creative Commons License 2013.01.15 0 0 20038

Kedves tbando!

Köszönöm, de milyen képletekkel számol a táblázat?

Valahogy ez a táblázat fogant meg a fejemben, már "csak" kék részeit kellene kitöltetni a géppel:)

Előre is köszönöm!

Tibi

Előzmény: tbando (20025)
_Nyuszi Creative Commons License 2013.01.15 0 0 20037

"Szövegből oszlopok...", vagy valami hasonló.

Előzmény: SQLkerdes (20036)
SQLkerdes Creative Commons License 2013.01.15 0 0 20036

Ennél van egyszerűbb módszer.  Használd az adott cellán/oszlopon a Text-To-Column-ot (Adat fülön van, nem tudom mi magyarul).

Válaszd a Delimited opciót, adj meg egy olyan karaktert ami tuti NEM szerepel az adataid között, pld |

Utána kiválaszthatod, hogy milyen tipusú adatnak gondolod a cellaszétválasztás eredményét itt kell a Dátum formátumot választani és beállítani, hogy az év-hó-nap adat milyen sorrendben van.

 

A trükk az benne, hogy ez a módszer a cellatartalmak szétszedésére szolgál, de pont nem arra használjuk, csak rákényszerítjük az excelt, hogy átértékelje a cella tartalmat.

Előzmény: tbando (20035)
tbando Creative Commons License 2013.01.15 0 0 20035

Most rájöttem egy módszerre, amivel mégis rá lehet bírni a magyar excelt a balra igazított angol dátumok felismerésére. Sajnos inkább csak érdekesség, mint praktikus. Átmásolod wordba, majd visszamásolod html-ként. Kétségtelenül kevébé babrásabb mint a vezérlőpultos állítgatás, de úgy néz ki, hogy csak a nn.hh.éé formátumként hajlandó értelmezni, az egyéb értelmezésekre nem ad lehetőséget.   

Előzmény: tbando (20034)
tbando Creative Commons License 2013.01.15 0 0 20034

Na ja, ha az excel felismeri, akkor semmi baj. De épp az a probléma, hogy a magyar excel nem ismeri fel, és ezért balra igazítja. De kösz, hogy válaszoltál, mert így legalább kiderült, hogy nem én vagyok béna. Annyit azért hozzáfűznék, hogyha szövegként viszed be a dátumot, akkor azt az excel szövegként értelmezve  balra igazítja. De ettől még a dátumfüggvények felismerik, ha megfelelnek a verzió dátumformátum követelményeinek.

 

Előzmény: Sánta Kutya (SK) (20031)
ujszaszy Creative Commons License 2013.01.15 0 0 20033

Szia!

 

az a gond, hogy az eltérő oprendszerek eltérő helyen tárolják az asztal elérését és az asztal a userekhez van linkelve, azaz minden usernek van asztala, és ezen kívül van egy közös asztal is.

 

De a VBE -ben van egy CurrentDirectory parancs, amit be lehet állítani egy változónak

Előzmény: Redlac (20032)
Redlac Creative Commons License 2013.01.15 0 0 20032

Sziasztok!

 

Az alábbi "mentés" makrót használom:

 

Sub macro()

Application.DisplayAlerts = False

    Dim fldlg As FileDialog

    Set fldlg = Application.FileDialog(msoFileDialogSaveAs)

    With fldlg

        .Title = "Mentés másként"

        .InitialFileName = Range("Z32") & "_" & Range("E39") & "_" & Range("D40")

        If Application.Version = "14.0" Then

            .FilterIndex = 1

        ElseIf Application.Version = "12.0" Then

            .FilterIndex = 4

        ElseIf Application.Version = "11.0" Then

            .FilterIndex = 1

        End If

    End With

    rv = fldlg.Show

    If rv Then

        ActiveWorkbook.SaveAs fldlg.SelectedItems(fldlg.FilterIndex)

    End If

Application.DisplayAlerts = True

End Sub

 

Ez, a meghatározott cellák adataiból hozza létre a fájl nevét, de nem elmenti automatikusan, hanem feldobja a "mentés másként" párbeszédpanelt, és a felhasználónak csak azt kell eldöntenie, hogy hová menti a fájlt.

 

Na, most a kérdés az, hogy meg lehet-e oldani, hogy a makró az asztalon hozzon létre egy a fájl nevével egyező nevű mappát, majd abba mentse a fájlt? 

 

Köszi előre is

Sánta Kutya (SK) Creative Commons License 2013.01.15 0 0 20031

Bocsánat: amit írtam annak az alapja, hogy a furcsa formátumú dátum egy szöveg. Viszont a képen jobbra van igazítva, tehát valószínűleg dátum. Ebben az esetben viszont ugyanúgy lehet kezelni, mint a rendes magyar dátumokat, csak másképp van megjelenítve. Tehát ha  az Excel felismerte, hogy dátum, akkor a dátumfüggvényeknek működniük kell rá.

Előzmény: Sánta Kutya (SK) (20030)
Sánta Kutya (SK) Creative Commons License 2013.01.15 0 0 20030

Csúnyán.

 

Az a) változat, hogy szövegkezelő függvényekkel szétszeded. Keresed az első pontot, és az attól balra eső részt; keresed a pontot az első pont utáni részben (ilyet tud egy összetett BAL vagy KÖZÉP), majd a második ponttól a szóközig. A végén, ha jól szétszedted, a DÁTUM függvénnyel (ha jól emlékszem) összerakod.

A b) változat egy felhasználói függvény ugyanerre.

Ilyenkor teszem mindig hozzá, hogy a kulturált megoldás rég fel van találva reguláris kifejezések néven, csak az Excel nem tudja. :-(

Előzmény: tbando (20029)
tbando Creative Commons License 2013.01.15 0 0 20029

Az lenne a kérdésem, hogy a 20024 postban levő dátum-számformátumok kezelésére, hogyan lehet rávenni a magyar nyelvű excelt a vezérlőpultos állítási lehetőségen kívúl?

tbando Creative Commons License 2013.01.15 0 0 20028

Ha már itt tartasz, akkor már tök egyszerű a dolgod:

 

A J-oszlopba: =HA(I1=0;D1;I1) tehát mindenhova az uj arat irod be, kivéve, ahol a Nagyker nem adott árat, ott marad a régi

A K-oszopba pedig:D1=I1, ezt csak a manualis ellenőrzesre, ahol HAMIS, ott volt változás, egy párat megnézel, hogy jól dolgozott-e az excel.

Előzmény: bringas1 (20027)
bringas1 Creative Commons License 2013.01.15 0 0 20027

Köszönöm válaszod!

 

 

Elképzelésem szerint innen kellene indulni.

A képletbe nem kell beírni még adatokat.

Pl.: A2 ....

Előzmény: tbando (19974)
bringas1 Creative Commons License 2013.01.15 0 0 20026

Köszönöm válaszod!

 

Az árlista a kpen látható oszlopokból áll.

 

A rendelési kód jellemzően nem változik.

Ha mégis arról értesítést kapunk, ha ez elkerüli a figyelmet akkor a cella ott üres marad.

Itt nem a készletnyilvántartás a lényeg.

Minden évben 1-2* van árváltozás.

Jelen esetben kb. 20 000 termékről van szó, amit egyesével párosítani kicsit időigényes.

Ki kellene szűrni a nem egyező sorokat ( pl. megváltozik az azonosító cikkszám, új termék kerül bele, illetve megszűnő termékek is lehetnek).

 

Előzmény: pimre (19977)
tbando Creative Commons License 2013.01.15 0 0 20025

A  20016 postban felrakott megosztásnál nem vettem figyelembe a fűrészlap+4 mm-t. Emiatt néhány szétvágási javaslat pár cm-rel hibádzik. Ezért újra lefuttattam a teljes btto hosszakkal. Természetesen ugyanúgy 7 párkányalap kell. de a szétvágásukhoz inkább ezt a javaslatot vedd alapul. Az 1-5 számúakat érdemes megfogadni, a No6-7 nél viszont variálhatsz.

 

Előzmény: mtibsi (20003)
Numan Creative Commons License 2013.01.14 0 0 20024

Kiszámoltam a megoldásokat percekkel együtt, a cél az lenne, hogy így számoljon a makró:

 

 

Előzmény: pimre (20022)
Numan Creative Commons License 2013.01.14 0 0 20023

Így van a munkalap első cellájától a legutolsó cellájának soráig kell kitöltenie a megoldásokat a makrónak.

A perceket előre is köszi.

Előzmény: pimre (20021)
pimre Creative Commons License 2013.01.14 0 0 20022

Ja és majd elfelejtettem: A példa táblázatot nem egészen értem. Hogyan lesz a 2012.12.31 5:58 és 2012.12.31 12:22 közt eltelt idő eredménye 5? Ha az 5.58 helyett 7 órát veszek, akkor 12.22-ig eltelik 5 óra 22 perc. A 22 percet levágom? Vagy kerekítek? Mert a példák közt olyat nem láttam, ahol felfelé kellett volna kerekíteni. Szóval melyek a kerekítés szempontjai?

Előzmény: Numan (20020)
pimre Creative Commons License 2013.01.14 0 0 20021

Az automatikus végigfuttatás egyáltalán nem gond. Egy kis ciklusszervezés néhány többletsor beiktatásával könnyű, pár perc. Gondolom, hogy a munkalap első cellájától a legutolsó cellájának soráig kell, ugye? Ha más a szempont, írd meg, hogy mettől meddig!

 

A percekkel szándékosan nem foglalkoztam, azt hittem a példádból, ahol kerek órák voltak, hogy nem szempont, esetleg felvételre sem kerül. Na meg így könnyebb volt a dolgom. Nem kellett számolgatnom vele. De majd megnézem holnap, hogy mit tudok tenni. 

Előzmény: Numan (20020)
Numan Creative Commons License 2013.01.14 0 0 20020

Előzmény: Numan (20019)

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