< návrat zpět
MS Excel
Téma: Zjednodušení vzorce
Zaslal/a Dejwing 17.4.2018 15:55
Dobrý den, přijde mi, že píšu vzorec hrozně složitě a další rozšíření vede ke značně dlouhému řetězci.
Prakticky se jedná o řadu, kde zkoumám jestli je pole volné a když ano, tak zapiš, ale aby to bralo postupně směrem doprava, jako vzorec v příloze.
If Cells(21, 2) <> "" And Cells(3, 1) <> "" And Cells(21, 3) <> "" And Cells(21, 4) = "" Then Call reseticek3
If Cells(21, 2) <> "" And Cells(3, 1) <> "" And Cells(21, 3) = "" Then Call reseticek2
If Cells(21, 2) = "" And Cells(3, 1) <> "" Then Call reseticek1
Sub reseticek1()
Cells(21, 2) = Cells(1, 1)
Cells(22, 2) = Cells(5, 1)
Cells(23, 2) = Cells(3, 1)
Cells(3, 1) = 0
End Sub
Sub reseticek2()
Cells(21, 3) = Cells(1, 1)
Cells(22, 3) = Cells(5, 1)
Cells(23, 3) = Cells(3, 1)
Cells(3, 1) = 0
End Sub
atd...
Děkuji moc za rady :)
elninoslov(17.4.2018 17:49)#040147 Skúste priložiť normálnu XLSM prílohu, kde bude lepšie vidieť, čo chcete dosiahnuť (čo testujete a čo dopĺňate), a kde budú aj procedúry "resetnicekX".
citovat
elninoslov(17.4.2018 20:56)#040148 Keď tak pozerám čo robí ten Váš kód
resetboxu, tak
resetboxu2 robí to isté, nič viac netreba, žiadne ďalšie procedúry ako
reseticek1,
reseticek2 ... .
Teda robí to to isté, ale vôbec neviem čo
Nech je to ale čo chce, tak asi by som si urobil ďalší pokus aj cez polia a pomeril rýchlosť. Záleží aj na množstve buniek, ktoré chcete nakoniec obsiahnuť...
Sub resetboxu2()
Dim i As Long
If Cells(3, 1) <> "" Then
For i = 9 To 1 Step -1
If Cells(21, 1).Offset(0, i) = "" And WorksheetFunction.CountIf(Cells(21, 2).Resize(, i), "<>") = i - 1 Then
Cells(21, 2).Resize(3).Offset(0, i - 1) = WorksheetFunction.Transpose(Array(Cells(1, 1), Cells(5, 1), Cells(3, 1)))
Cells(3, 1) = 0
End If
Next i
End If
End SubPříloha: 40148_wo-co-tady-go.zip (20kB, staženo 20x) citovat
Dejwing(18.4.2018 7:06)#040150 Děkuji moc, to je přesně ono, co jsem myslel. :)
citovat
Dejwing(18.4.2018 9:32)#040151 Pak by mě ještě zajímalo, pokud bych chtěl zpětně získat pouze počet kusů a smazat danou buňku, viz VBA v příloze, které nevím jak zjednodušit již zmíněným postupem, abych opět nemusel rozepisovat a něco se přiučit. Děkuji moc, jste nejlepší. :))
citovat
elninoslov(18.4.2018 10:28)#040153 Private Sub Worksheet_Change(ByVal Target As Range)
Dim Poz As Long
If Not Intersect(Cells(1, 2), Target) Is Nothing Then
On Error Resume Next
Poz = WorksheetFunction.Match(Cells(1, 2), Cells(18, 11).Resize(, 11), 0)
On Error GoTo 0
Application.EnableEvents = False
If Poz > 0 Then
Cells(3, 1) = Cells(17, 10 + Poz)
Cells(17, 10 + Poz).Resize(2) = WorksheetFunction.Transpose(Array(0, "Prázdný"))
Else
Cells(3, 1).ClearContents
End If
Application.EnableEvents = True
End If
End Sub
Ale zase je tu množstvo poznámok. V tej tabuľke sa majú nájsť, spočítať a vymazať všetky výskyty daného dielu (To treba urobiť potom inak)? Alebo iba prvý/posledný? Z ktorej strany? Ak tam nenájde daný diel alebo je B1="", vymaže modrú bunku A3.
Táto príloha potom samozrejme prináša ďalšie a ďalšie otázky s ohľadom na predchádzajúce nedovysvetlené zadanie. Napr. : Hľadáte Vy v predchádzajúcom požiadavku naozaj prvý prípad zprava, keď je splnené že do nejakej bunky sú všetky zaplnené a len tá posledná bunka je prázdna? Alebo hľadáte prvú prázdnu zľava?
Ak tam totiž sú medzery ("prázdne" boxy), tak aj v prvom prípade nastane, že sa naplní box zprava. Mne to príde divné, ale to možno len preto, lebo neposkytujete dobrý (žiadny) popis toho, čo chcete dosiahnuť. Toho čo robíte. Z Vašeho makra nemusí byť vôbec zrejmé čo chcete dosiahnuť, keďže ako laik nemusíte mať uváženú správnu metodiku.
citovat
Dejwing(18.4.2018 11:05)#040154 Jedná se rozpracovanou výrobu, napíšu číslo dílu a hned se mi načtou kusy, z rozpracovaného boxu do pole B3 kam dále dodávám kusy až do naplnění boxu.
1. zadám do pole B1 co chci hledat
2. na základě této hodnoty se změní buňka C10, pokud se změní, tak se vyhledává, jestli je někde rozpracovaný box "měl by tam být vždy maximálně jen jeden" protože nelze mít v poli C10 současnou výrobu a k tomu mít zásobník v boxu => musím vědět po načtení dílu, že už mám nějaké kusy hotovy.
Podle mě vaše makro funguje naprosto skvěle! Děkuji
Ale pokud víte o nějaké profesionálnější variantě, moc rád se přiučím, je pro mě velmi zajímavé.
citovat