-
GAMEPOD.hu
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Delila_1
Topikgazda
Azt jelenti, hogy ha az L265 cella üres, akkor a képletet tartalmazó cella is legyen (látszólag) üres, egyébként pedig a L265 értékének 60-ad része legyen az eredmény.
Azért "látszólag", mert a képlet ott van benne továbbra is.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Mutt
aktív tag
Hello,
...én csak a számot írom be, de mögé íródik hogy "perc" "mm" stb?A cella formátum beállító ablakban (gyorsbillentyű Ctrl+1) Egyéni formátumot kell megadnod.
Általánosságban ez a formátum műkődhet: Normál "perc"Ami fontos, hogy Excelben az idő valójában egy 1-nél kisebb szám (pl. 0,25 az 6 óra 0 percet jelent), 1-nél nagyobb szám napként viselkedik. A 36-ot dátumfüggvényekben napként fogja értelmezni ezért osztani kell 1440-el ha percként kell számolni vele, vagy 86400-as ha másodpercként.
üdv.
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Delila_1
Topikgazda
Ez a makró megoldja
Sub sorbeszuras()
Dim usor As Long, sor As Long
Application.ScreenUpdating = False
usor = ActiveSheet.UsedRange.Rows.Count
For sor = usor To 2 Step -1
Rows(sor).EntireRow.Insert
Next
Application.ScreenUpdating = True
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
Szia!
A válasz IGEN, meg lehet csinálni.
Bővebben: A rajzszámot tartalmazó cellát kijelölöd, jobb egérgomb, hivatkozás - kiválasztod a megfelelő fájlt, kitöltöd a szükséges mezőket, majd ok.
Ezt az egészet makrórögzítővel felveszed, majd "paraméterezed" és lefuttatod minden cellára nézve.
Ha a makrót rögzítetted és ide felteszed, segítünk a paraméterezésben.Üdv.
-
Delila_1
Topikgazda
A lenti makró az A1 cellában lévő rajzszámhoz tartozó képhez készít hiperlinket a B1 cellába. A makróban kell megadni az elérési útvonalat, és a kép kiterjesztését.
Sub rajz()
Dim utvonal As String
utvonal = "F:\jpg\Fotó\" 'ide kell a saját útvonalad
ActiveSheet.Hyperlinks.Add Anchor:=Range("B1"), Address:= _
utvonal & Range("A1").Value & ".jpg", TextToDisplay:=Range("A1").Value
End SubAhhoz, hogy az összes rajzszámhoz beírhassuk a hiperlinket, meg kell adnod, melyik oszlopban vannak a rajzszámok, melyik oszlopba kéred a hiperlinket.
Az is fontos, hogy a rajzszámos oszlop hányadik sorában kezdődnek a számok, és hogy vannak-e olyan sorok, amikben nincs rajzszám.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
-
Telda
addikt
Reggelt!
Jelenleg ez van használatban.
=FKERES(ÉRTÉK(BAL($D1;8));Munka2!$A:$A;1;HAMIS)
Annyi hogy a kivétel lista a munka2-n van.
Illetve 6-7-8 karakteres cikkszámok vannak, mindre kellett csinálni egy új szabályt.
Ennek annyi a hibája, hogy betű is van a cikkszámban akkor nem működik. -
Delila_1
Topikgazda
Ha jól értem, a Munka1 lap D oszlopában lévő cikkszámokat (vagy miket) kell színezni, ha a Munka2 lap C oszlopában (Lista tartomány) szerepel a bal oldaluk, változó hosszban.
A Munka1!D:D és a Munka2!C:C formátuma legyen szöveg. A Munka1 D oszlopában a feltételes formázás képlete
=HAHIBA(HOL.VAN(BAL(D1;SZÖVEG.KERES("-";D1)-1);Lista;0);HOL.VAN(D1;Lista;0))
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Vegyesen vannak számaid és szöveges értékeid a D oszlopban. Vegyél fel egy új oszlopot, ahol a képlet
=D1 & "" (üres string). Másold, majd irányítottan, értékként másold a D1-be. Ez szöveggé alakítja a számokat is.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
A kettes lapon lévő tartománynak nevet adsz. Legyen ez pl. Lista.
Az egyes lapon a tartománynak feltételes formázást adsz, a képlet=HOL.VAN(A2;Lista;0)
Vagy képletet írsz az egyes lapon a B oszlopba.
=HA(HOL.VAN(A2;Lista;0);1)
A fellelhető értékek mellé 1-et ír, a többihez #HIÁNYZIK szöveget. Biztosan lehetne szépíteni, de most szaladok.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
-
Fferi50
őstag
Kiegészítés:
Ha feltételes formázást szeretnél (mert akkor nem kell segédoszlop), az alábbi képletet használhatod. Jelöld ki az A2 cellát, majd:
Kezdőlap - Feltételes formázás - Új szabály - A formázandó cellák kijelölése képlettel -- Érték formázása ha ez a képlet igaz:=HAHIBA(HOL.VAN(HAHIBA(BAL($A2;SZÖVEG.TALÁL("-";$A2)-1);$A2);Lista;0);"N")<>"N"
Kiválasztod a megfelelő formázást. OK.
Ezután a szabályok kezelése menüpontban beállítod az érvényesség tartományát az A oszlopodnak megfelelően.
Szűrésnél így az A oszlopra használhatod a színszűrőt.Üdv.
-
Fferi50
őstag
-
Fferi50
őstag
Szia!
"Minden olyan szám kell aminek a kezdete megegyezik a Listában lévőkkel."
Bocs, de meddig számoljuk a kezdetet? Hány karakterig? Milyen határoló karakter van? V vagy S vagy - vagy micsoda más?
Mert a listádban van 6-7-8-9 karakteres keresendő tétel....
És hat karakterig elég sok egyezőség is.
Legalább a keresendő listád lenne egyértelmű....
A képletet minden érvényes elválasztó/határoló karakterre meg kellene csinálni.
Üdv.[ Szerkesztve ]
-
Pakliman
tag
Szia!
Egy kis makrózással megoldható...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = Range("A1").Address Then
'Duplaklikk az A1 cellán
Cancel = True 'Megakadályozzuk, hogy szerkesztő módba lépjen a cellában.
Dim sha As Worksheet: Set sha = Worksheets("Munka1") 'ActiveSheet
Dim shk As Worksheet: Set shk = Worksheets("Munka2")
Dim usa As Long: usa = sha.Cells(sha.Rows.Count, "A").End(xlUp).Row 'A Munka1 utolsó sora
Dim usk As Long: usk = shk.Cells(shk.Rows.Count, "A").End(xlUp).Row 'A Munka2 utolsó sora
Dim sora As Long
Dim sork As Long
'Nem kell folyton újraszámolni, sem villogtatni a képet...
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Kiürítjük a B oszlopot...
sha.Range("B2:B" & usa).ClearContents
For sora = 2 To usa
For sork = 2 To usk
If sha.Cells(sora, 1) Like shk.Cells(sork, 1) & "*" Then
'Ha a Munka1 aktuális cellája "hasonlít" a Munka2 aktuális cellájára, akkor...
sha.Cells(sora, 2) = 1 '...a Munka2 2. oszlopába berakunk egy 1-est
Exit For 'Mivel van találat, a több elemet már nem vizsgáljuk, továbblépünk...
End If
Next sork
Next sora
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End If
End Sub -
Fferi50
őstag
Szia!
Ha még nincs megoldásod, ezt a makrót másold be egy modul lapra.Sub keresi()
Dim kodok As Range, adatok As Range, adat As Range, kod As Range, adatcim As String
Sheets("Munka1").Range("B:B").Clear
Set kodok = Sheets("Munka2").Range("A1").CurrentRegion
Set adatok = Sheets("Munka1").Range("A1").CurrentRegion
Set adat = adatok.Cells(1)
For Each kod In kodok.Cells
Set adat = adatok.Find(what:=kod, after:=adat, LookIn:=xlValues, lookat:=xlPart)
If Not adat Is Nothing Then
adatcim = adat.Address
Do
adat.Offset(0, 1).Value = 1
Set adat = adatok.Find(what:=kod, after:=adat, LookIn:=xlValues, lookat:=xlPart)
Loop While adat.Address <> adatcim
Else
Set adat = adatok.Cells(1)
End If
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "Készen vagyunk!"
End Sub
A munkalapok neveit igazítsd a sajátodéhoz. A makró minden olyan érték mellé beír egy db 1-est, amelyik a kódok listájában előforduló értékkel kezdődik. Ne lepődj meg, ha kicsit sokáig fut.
Üdv. -
Fferi50
őstag
Szia!
ASet objSheet = objExcel.ActiveWorkbook.ActiveSheet
sor helyettSet objSheet = objExcel.Workbooks.Open("fájl neve elérési úttal").Sheets("munkalap neve")
ha nincs megnyitva a fájl, ha meg van nyitva, akkorSet objSheet = objExcel.Workbooks("fájlneve").Sheets("munkalap neve")
Természetesen a nevek lehetnek szöveg típusú változók is.
Üdv. -
Fferi50
őstag
-
Fferi50
őstag
Szia!
Bocs, hogy értetlenkedek, ez azért van mert nem ismerem az SAP-t (ez persze nem lehet mentség) és így csak "butákat" tudok kérdezni. De régebbi ismereteim szerint az ilyen rendszerekben szokott lenni olyan lehetőség, hogy adatfeltöltés fájlból és ez általában része az alapnak. Meg persze lehet API specifikáció is hozzá.
Amit a leírás alapján te szeretnél, az úgy gondolom, nem fűzhető össze egy tranzakcióvá, mivel több soros lenne az eredmény. Lehet belső ciklust csinálni, ahol figyeled a Material értékét és amíg egyezik, nem kell ismét bekérni.
Talán érdemes lenne kinyomozni a cég SAP kapcsolattartóját és vele beszélni erről.
Én biztosan a textfájlos inputot favorizálnám. Mivel ismered a cél formátumát, talán mégis lehet valami kaput találni, amit ki lehet nyitni a tömeges adatbevitelre.
Üdv. -
Mutt
aktív tag
Szia,
Nincs CS01 hozzáférésem, így nem tudtam tesztelni de ezt próbáld meg:
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(, "Excel.Application")
Set objSheet = objExcel.Workbooks("dj feltolt").Sheets("Munka1")
For i = 2 To objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1
'CS01 fõképernyõn anyagszám / plant / BOM usage megadása
session.findById("wnd[0]/usr/ctxtRC29N-MATNR").Text = COL1
'session.findById("wnd[0]/usr/ctxtRC29N-WERKS").text = "0610"
session.findById("wnd[0]/usr/ctxtRC29N-STLAN").Text = "1"
session.findById("wnd[0]/usr/txtRC29N-WTEXT").SetFocus
session.findById("wnd[0]/usr/txtRC29N-WTEXT").caretPosition = 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
'component screen amiről csak akkor kell elmenni, ha másik anyagot kell felépíteni
j = -1
Do
j = j + 1
COL2 = Trim(CStr(objSheet.Cells(i + j, 2).Value)) 'Column2
COL3 = Trim(CStr(objSheet.Cells(i + j, 3).Value)) 'Column3
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSTP[1," & CStr(j) & "]").Text = "L"
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-IDNRK[2," & CStr(j) & "]").Text = COL2
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").Text = COL3
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").SetFocus
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[5," & CStr(j) & "]").caretPosition = 5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
Loop Until COL1 <> Trim(CStr(objSheet.Cells(i + j + 1, 1).Value))
'mentés
session.findById("wnd[0]/tbar[0]/btn[11]").press
'léptetni kell az i értékét
i = i + j
Next i
MsgBox "Keszen vagyunk"Neked egy fájlban vannak a létrehozandó anyagtörzsek (az aktuális mindig a COL1 változóban van), így addig nem kell kilépned CS01-ből amíg új anyaghoz nem érsz.
A fenti megoldásban van egy Do - Loop ciklus ami addig adogatja a komponenseket a listához amíg a COL1 értéke meg nem változik.A másik fontos dolog, hogy a rácson hivatkozni SAP-ban sor és oszlop azonosítóval lehet.
pl. .. CMAT/ctxtRC29P-IDNRK[2,0] mindig a második mezőt az első soron jelenti, vagyis a komponenst.
A sor változót kell léptetni, hogy a komponensek egymás alá kerüljenek és ne mindig az első sor legyen felülírva. Ezért van mindegyik sorban a j belső változó meghívva.Ami fontos, hogy a script el fog hasalni ha olyan sorra hivatkozol ami a nem látható képernyő része. A képernyőmentéseden látszik 19 sor, de ha kisebbre teszed a GUI-t akkor lehet hogy csak 5 sort fogsz látni. Ezt kivédeni úgy lehet, hogy mielőtt írnál megnézed hogy létezik-e az adott sor. Tippre vhogy így:
On Error Resume Next
If session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/ctxtRC29P-POSNR[0," & CStr(j) & "]").Text <> Right("000" & j, 4) Then
MsgBox "hiba"
End If
On Error GoTo 0Megkértem a jogosultságot a CS01-hez így ha majd megkapom akkor tudom tesztelni, hogy az elmélet párosul-e a valósággal.
üdv
[ Szerkesztve ]
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Fferi50
őstag
Szia!
Úgy gondolom, a script szóközzel választja el a paramétereket egymástól, ezért kerül minden szó új sorba.
A szöveghatároló idézőjeleket is hozzá kell adnod amikor a paramétereket megadod, úgy mint az utVbs-nél.
Kb. így:parancs = """" & utVbs & """ " & minta & " " & tipus & "" """ & angol & """ """ & cseh & """ """ & nemet & """ """ & magyar & """
Üdv.[ Szerkesztve ]
-
Mutt
aktív tag
Szia,
Ha Excel 2016-osod vagy frissebbed van, akkor a Power Query-vel lehet automatizálni.
A másik megoldás, hogy mivel az első 14 lapon mindig 65 ezer sor van fixen, akár képlettel is megoldható.
Lenne egy input.xls és egy template.xlsx nevű fájlom. Az input amit a program kiad. A template-ben pedig egy sima hivatkozás lenne egy lapon az input első lapjára, majd a 65 ezredik sor után a második lapra és így tovább. Az utolsó lap esetén pedig mivel nem lesz minden sor vmi ilyen hivatkozás lenne:
=HA([input.xls]Sheet15!A1<>"";[input.xls]Sheet15!A1;"")Ezek után csak az input fájlt kell cserélgetned és a template-ben kapott eredményt elmenteni értékek beillesztése után.
Mindkét megoldás hátránya, hogy formátumokat nem másol.
Ha kell formátum, akkor VBA.üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel