Máte pravdepodobne formát bunky ako "Text".
promíchat sloupce mezi sebou
A prečo chcete všetko mať cez VBA? Upravil som Vám ten formulár v Exceli, a VBA iba zapisuje nové položky.
Ďalší príklad. Na popis nemám čas. Podľa mňa to takto ale nieje dobre. Mali by ste zadávať data pod seba do Tabuľky (s pomocnými stĺpcami na zdvojené 1/2), a urobiť KT, kde si vyfiltrujete osoby.
=COUNTIF(A1:A6;C2)>0
C2 - hľadaná hodnota
A obyčajný VLOOKUP/SVYHLEDAT ste neskúšal?
=IFERROR(VLOOKUP(B2;J2:K5;2;FALSE);"")
=IFERROR(SVYHLEDAT(B2;J2:K5;2;NEPRAVDA);"")
PS: mepexg sa iba preklepol, v D2 nieje potrebný maticový vzorec, stačí obyč.
Tak skúste jednorázovo použiť nejaké makro, napr.:
Sub ZmenaHyperlink()
Dim Bunka As Range, Hodnota
With Worksheets("Hárok1")
For Each Bunka In .Range("A1:A6").Cells
Hodnota = Bunka.Value
Select Case True
Case LenB(Hodnota) = 0
Case Left$(Hodnota, 4) <> "http": .Hyperlinks.Add Anchor:=Bunka, Address:="http://" & Hodnota
Case Else: .Hyperlinks.Add Anchor:=Bunka, Address:=Hodnota
End Select
Next Bunka
End With
End Sub
Veď ale Vy máte v R vzorec, teda musíte testovať zmenu v manuálne menených bunkách, ktoré ten vzorec používa. Vzorec používa Q a D. D je manuálne menený, no Q je vzorec, ktorý používa E, a to je manuálne menené. Teda sledované bunky vo Worksheet_Change musia byť všetky manuálne, a teda D a E. Stĺpce D a E reprezentujú vo Vašej Tabuľke "Tabulka2" stĺpce 3 4 (Datum, šarže).
-Teda test zmeny v týchto dvoch,
-Prenesenie na stĺpec R - teda v Tabulka2 číslo 17 (Měsíc),
-Overenie trvania >14 a prenesenie na stĺpec P - teda v Tabulka2 je to posun o -2 stĺpce,
-Zápis "ne"
PS: ---Prípadné ošetrenie hromadného zápisu do viac buniek
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChangeAreaDE As Range, ChangeAreaR As Range, SubArea As Range, Cell As Range, FinalAreaP As Range, Hodnota
Set ChangeAreaDE = Intersect(ListObjects("Tabulka2").DataBodyRange.Columns(3).Resize(, 2), Target)
If Not ChangeAreaDE Is Nothing Then
Set ChangeAreaR = Intersect(ListObjects("Tabulka2").DataBodyRange.Columns(17), ChangeAreaDE.EntireRow)
If Not ChangeAreaR Is Nothing Then
For Each SubArea In ChangeAreaR.Areas
For Each Cell In SubArea.Cells
Hodnota = Cell.Value
If Hodnota <> "" And Hodnota > 14 Then
If FinalAreaP Is Nothing Then Set FinalAreaP = Cell.Offset(0, -2) Else Set FinalAreaP = Union(FinalAreaP, Cell.Offset(0, -2))
End If
Next Cell
Next SubArea
If Not FinalAreaP Is Nothing Then
Application.EnableEvents = False
FinalAreaP.Value = "ne"
Application.EnableEvents = True
End If
End If
End If
End Sub
Nečítal som celé vlákno, teda možno treba ešte niečo doplniť/zmeniť. Otestujte.
A čo keby sa dalo iba:
=IF(ISBLANK(A1);A2;A1)
+ podmienený formát s podmienkou zisťovania FO/PO:
=ISBLANK($A$1)
s formátom Dátum ?
Tak to je parádne, tá "matrica" dní v týždni...
Príklad, čo ma prvé napadlo ...
EDIT: Len dovysvetlím ...(2*7)...
2* znamená 2. v poradí a 7 znamená deň týždňa. Keď budete hľadať 3. sobotu, tak to bude (3*6)...
Pr.
??? Asi Vás nechápem. Tu som pridal malé vysvetlenie, ako som Vás pochopil. Každé mesto má variabilný počet a rôzne položky. Každé mesto to má v riadku (nie v stĺpci). Začína sa od B stĺpca v danom riadku, a pokračuje doprava.
Pripadne to vysvetlite inak.
Ja by som to videl možno takto.
Def. názov Město:
=OFFSET(Data!$A$2;;;COUNTA(Data!$A:$A)-1)
=POSUN(Data!$A$2;;;POČET2(Data!$A:$A)-1)
Def. názov Oddíl:
=OFFSET(Data!$B$2;MATCH(Základ!$A$2;Město;0)-1;;;COUNTA(OFFSET(Data!$2:$2;MATCH(Základ!$A$2;Město;0)-1;))-1)
=POSUN(Data!$B$2;POZVYHLEDAT(Základ!$A$2;Město;0)-1;;;POČET2(POSUN(Data!$2:$2;POZVYHLEDAT(Základ!$A$2;Město;0)-1;))-1)
Podm. formátovanie B2:
=ISERROR(MATCH($B$2;Oddíl;0))
=JE.CHYBHODN(POZVYHLEDAT($B$2;Oddíl;0))
Nič vedľa dát v liste Data nemajte, len dopĺňajte zoznam, ten sa bude dynamicky prepočítavať v def. oblastiach.
=SUMIFS(K2:K6;A2:A6;A9;G2:G6;"Součet")
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.