< návrat zpět

MS Excel


Téma: Funkcia / Vzorec na vyhladanie - zmena hodnoty rss

Zaslal/a 15.12.2015 13:54

Zdravím všetkých,

mám taký menší problém ako vyriešiť zdalo by sa jednoduchú vec. Hľadal som a skúšal rôzne vzorce, podmienky.. ale nepomohlo. Ide o toto :

v xls mám vačšiu tabuľku riadkov (cca 2000-3000) navzorcovanú podľa potreby (aktuálne nepodstatné). V prílohe je iba ukážka časti tabuľky. Príklad : obsluha (užívateľ) zapisuje kódy EAN do bunky v stĺpci B a zadáva počet kusov do stĺpca C. Potreboval by som vyriešiť to, že ak zapíše do bunky B7 kód ktorý sa už v celom stĺpci nachádza (B4) tak ho vyhľadá a presunie sa na tú bunku (B4 v tomto prípade) - prípadne aj s nejakým hlásením že ean sa už skenoval alebo pod. Keď je vyplnených 7 riadkov ako na screenshote nezdá sa to byť potrebné a až taký problém ale ak sa vyplní tabuľka ktorá už bude mať 2000-3000 riadkov nie je jednoduché pamatať si čo bolo na začiatku a používať stále ctrl+f tiež nie je výhra. Zvykol som si bez toho nakoniec používať vyhľadanie duplicít a cez konting.tabulku si údaje zosumarizovať ale rád by som to mal už nakoniec bez týchto ďalších úkonov.

Budem vďačný za akúkoľvek radu a prípadne návrh riešenia.

ďakujem

jaro

Příloha: png28696_priklad.png (34kB, staženo 76x)
28696_priklad.png
Zaslat odpověď >

#028702
avatar
A co to řešit přes podmíněné formátování? To by podle mě bylo nejjednodušší. Výsledek pak může být stejný, jako máš na obrázku, tedy že ti duplicitní kód po zadání zčervená...
Podmíněné formátování dokonce přímo nabízí: "Formátovat pouze jedinečné nebo duplicitní hodnoty".
P.citovat
#028838
avatar
Ahoj Pavlus,

ďakujem za tvoju odpoveď - áno samozrejme takto som to riešil zatiaľ doteraz - tu je ale nevýhoda že tých duplicít tam môžu byť desiatky až stovky a tak či tak to budem musieť potom ručne spracovať (spočítať hodnoty jednotlivých duplicít a zapísať) - ja som to jednoduchšie robil cez kontingenčnú tabuľku kde mi to už spočítalo samo.

Tu som mal skôr na mysli obísť tento sled krokov a spočítavať tie duplicity automaticky resp. po nejakej výzve že daný kód už bol oskenovaný a treba hodnotu počtu kusov pripočítať k už predtým zadanej hodnote (ideálne ak by ten daný kód v celom zozname už zadaných kódov vyhladalo a bunka by sa posunula práve tam). To už by som si iba pozrel akú hodnotu som zadal predtým, akú hodnotu chcem zadať teraz - spočítam a prepíšem predtým zadaný údaj.

Ak nie - ak sa to nepodarí nič sa nedeje - nie je to až taký problém ktorý by mi bránil v činnosti ale bolo by to fajn.

aj tak ďakujem za radu :)citovat
#028839
avatar
skús takéto makro

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
On Error Resume Next
Range(Cells(1, 1), Cells(Target.Row - 1, 1)).Find(Target).Select
End If
End Sub
citovat
#028840
avatar
Řešení, které poslal Marjankaj, se mi velmi líbí. Jde o kompaktní a úplné řešení problému v podobě, jak ho tazatel definoval. Pro vlastní potřebu bych do něj doplnil ještě likvidaci zadané hodnoty na místě Target (pokud byla nalezena jinde) a zabezpečení toho, aby se vyhledaná původní hodnota posunula do viditelné oblasti na monitoru. V této podobě by si to mělo najít bohaté uplatnění.citovat
#028841
elninoslov
Ja som to riešil trošku inak, žiaľ som to už včera nestihol.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Long, RNG As Range, TR As Long, TC As Integer, TV
With Target.Cells(1)
TV = .Value: TR = .Row: TC = .Column
If TC < 3 And TR > 2 And TV <> "" Then
Set RNG = Cells(3, TC).Resize(Cells(Rows.Count, TC).End(xlUp).Row - 2)
On Error Resume Next
R = WorksheetFunction.Match(TV, RNG, 0)
If R <> 0 And R + 2 <> TR Then
MsgBox ("Skok na 1. nájdený zhodný " & Choose(.Column, "kód", "ean") & " na riadku " & R + 2)
Cells(TR, 1).Resize(, 2).Value = Array("zadaj kód", "")
Application.Goto RNG(R)
End If
End If
End With
End Sub

Reaguje to aj na kód aj na ean, maže hodnotu, preskakuje na predošlú, chcel som ale ešte doriešiť situáciu ak nastane zmena vo viacerých bunkách naraz.
Inak to vypíše správu aj s riadkom kam pôjde, ale vidím ešte neduhy, napr. čo pri zmene vo vnútri tabuľky (nie na konci), treba doriešiť pokračovanie v hľadaní za aktuálne zmeneným riadkom, ak nieje posledný a ak nebol nález... Proste vždy hľadám možné problémy.citovat
#028843
avatar
Elninoslov má pravdu v tom, že zdánlivě jednoduchá úloha má svá mnohá úskalí. Když jsem se pokusil rozvinout myšlenku, se kterou přišel Marjankaj o svoje rozšíření, vyšel mi z toho taky dost velký kód:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
On Error Resume Next
Range(Cells(1, 1), Cells(Target.Row - 1, 1)) _
.Find(What:=Target, LookAt:=xlWhole).Activate
If Err = 0 Then
Application.EnableEvents = False
If IsEmpty(Target.Offset(1, 0)) Then
Target.ClearContents
Else
Application.Undo
MsgBox "Změněná hodnota by byla duplicitní", _
vbExclamation, "ZMĚNA HODNOTY"
End If
Application.EnableEvents = True
End If
End Sub
citovat
#028845
avatar
No zadávateľ hlavne neuviedol ako sa budú tie kódy zadávať. Či ťukaním do klávesnice alebo nejako cez skener. Takto ťažko vychytávať muchy. A z jeho prílohy to veľmi jasné nie je.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje