NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Jiri Krček
Člen
Avatar
Jiri Krček:4.1.2018 12:10

Zdravím,

potřeboval bych pomoct s programem. Program vyhledává hodnotu v tabulce, pokud ji najde tak něco udělá, ale nevím, jak napsat, když hodnotu nenajde. Chtěl bych, aby v tom případě, že ji nenajde, vybral tu hodnotu, která je nejblíž pod ní.Tady je kus kodu:

sto = InputBox("Zadejte čas na 100m (formát času např.: 9.46)")

For I = 1 To 1402   ' řádek 1 až 1402
                            rozsah = "B" & I    ' Sloupec B řádek 1 - 1402
                                    With Range(rozsah) 'Vyhledání zadané hodnoty dveste ve sloupci B a řádku 1 až 1402
                                        Set FoundCell = .Cells.Find(what:=sto, _
                                                         MatchCase:=False)


                                    End With
                                If FoundCell Is Nothing Then
                                                 'posunout o jednu bunku dolu??
                                Else

                    score100 = Cells(FoundCell.Row, 1).Value 'Přiřazení bodové hodnoty. Příkaz FoundCell.Row zjistí na kolikítém řádku se čas nachazí a sloupec je pořád stejný
                    Sheets("List2").Select                   'Aktivuje List2
                    ActiveSheet.Cells(1, 1).Value = "100 m " 'Hlavička
                    ActiveSheet.Cells(2, 1).Value = score100 ' Zapíše bodový výsledek na danou pozici
                    MsgBox "Bodová hodnota  za čas: " & sto & "  je  " & score100, , "Bodová hodnota za 100m" ' Vypsání bodů

          Next I

Děkuju mnohokrát

 
Odpovědět
4.1.2018 12:10
Avatar
plelovsky
Člen
Avatar
plelovsky:4.1.2018 13:37
For I = 1 To 1402   ' řádek 1 až 1402
                            rozsah = "B" & I    ' Sloupec B řádek 1 - 1402
                                    With Range(rozsah) 'Vyhledání zadané hodnoty dveste ve sloupci B a řádku 1 až 1402
                                        Set FoundCell = .Cells.Find(what:=sto, _
                                                         MatchCase:=False)


                                    End With

Jestli se nepletu, tak procházíš v cyklu buňky B1...B1402. Rozsah, ve kterém provádíš hledání, je tedy vždy jedna buňka. To je zbytečně složité ne? Proč rovnou nepracuješ s hodnotou v té buňce?

Chtěl bych, aby v tom případě, že ji nenajde, vybral tu hodnotu, která je nejblíž pod ní.

Pokud projdeš všechny buňky ve sloupci B a požadovaná hodnota se nenajde, tak je projdeš znovu a budeš hledat nejblíže nižší hodnotu, tj. maximum z hodnot nižších než ta požadovaná. Což vlastně můžeš dělat už při tom prvním průchodu.

 
Nahoru Odpovědět
4.1.2018 13:37
Avatar
plelovsky
Člen
Avatar
plelovsky:5.1.2018 17:56
cas = CDec(InputBox("Zadejte čas na 100m (formát času např.: 9.46)"))
radek = 0
nahrada = 0

For i = 1 To 1402   'řádek 1 až 1402
    tmp = CDec(Cells(i, 2).Value)

    If tmp = cas Then 'nasla se hledana hodnota
        radek = i
        Exit For
    End If

    ' když hodnotu nenajde. Chtěl bych, aby v tom případě, že ji nenajde, vybral tu hodnotu, která je nejblíž pod ní
    If tmp < cas And tmp > nahrada Then 'zatim nejvyssi hodnota nizsi nez hledana
        radek = i
        nahrada = tmp
    End If
Next i


If radek > 0 Then
    score100 = Cells(radek, 1).Value 'Přiřazení bodové hodnoty
    Sheets("List2").Select                   'Aktivuje List2
    ActiveSheet.Cells(1, 1).Value = "100 m " 'Hlavička
    ActiveSheet.Cells(2, 1).Value = score100 ' Zapíše bodový výsledek na danou pozici
    MsgBox "Bodová hodnota  za čas: " & sto & "  je  " & score100, , "Bodová hodnota za 100m" ' Vypsání bodů
Else
    'nevim co se ma stat kdyz se nenajde vubec zadna hodnota
End If
 
Nahoru Odpovědět
5.1.2018 17:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.