czesterek [ Konsul ]
VBA dla Excel'a potrzebna pomoc do stworzenia prostego makra
A więc mam następujący problem:
Muszę stworzyć makro ponieważ funkcja Jeżeli którą chciałem uzyć pozwala mi na stworzenie 7 warunków, natomiast ja potrzebuje jeszcze raz tyle. Ale do rzeczy mam macierz jak na rysunku, i w wierszu tam gdzie mam do ma mi wpisywać miejscowości którym solver przydzielił 1. POMOCY!!!!!!!!!!!!!
Za okazaną pomoc z góry dziękuje
Pozdro
czesterek [ Konsul ]
acha musze dodać że jestem w tym temacie laikiem, i totalnie sie na tym nie znam, ale licze na jaką kolwiek pomoc, podpowiedź
stworzyłem taką formułe =JEŻELI(C19=1;B2;JEŻELI(C20=1;B3;JEŻELI(C21=1;B4;JEŻELI(C22=1;B5;JEŻELI(C23=1;B6;JEŻELI(C24=1;B7;JEŻELI(C25=1;B8;JEŻELI(C26=1;B9;B2))))))))
ale więcej Jeżeli nie moge dać :(((((((((
czesterek [ Konsul ]
upss nie dodałem rysunku :)
fanlegii79 [ Konsul ]
Moglbys napisac troche jasniej o co chodzii, twoj rysunek nie za bardzo ma numery wierszy widoczne, ale i tak nie adekwatny jest do formuly. O tyle ile rozumiem to funkcja ma wpisywac nazwe miasta z kolumny o tym samym numerze co numer wiersza w ktorym jest jedynka czyli:
Function miasto()
If (Range("C4").Value = 1) Then miasto = (Range("C19").Value = 1)
If (Range("C5").Value = 1) Then miasto = (Range("D19").Value = 1)
If (Range("C6").Value = 1) Then miasto = (Range("E19").Value = 1)
If (Range("C7").Value = 1) Then miasto = (Range("F19").Value = 1)
If (Range("C8").Value = 1) Then miasto = (Range("G19").Value = 1)
itd.
End Function
i wersja dostosowana to kazdej kolumny
Function miasto()
kolumna = ActiveCell.Row
If (Cells(4, kolumna).Value = 1) Then miasto = (Range("C19").Value = 1)
If (Cells(5, kolumna).Value = 1) Then miasto = (Range("D19").Value = 1)
If (Cells(6, kolumna).Value = 1) Then miasto = (Range("E19").Value = 1)
If (Cells(7, kolumna).Value = 1) Then miasto = (Range("F19").Value = 1)
If (Cells(8, kolumna).Value = 1) Then miasto = (Range("G19").Value = 1)
itd.
End Function
i wersja de luxe
Function miasto()
kolumna = ActiveCell.Row
For i = 4 To 17
If (Cells(i, kolumna).Value = 1) Then miasto = (Cells(19, i - 1).Value = 1)
Next
End Function
czesterek [ Konsul ]
fanlegii --> wysłałem ci na maila arkusz z tym problemikiem
czesterek [ Konsul ]
poza tym te 0 i 1 zmieniaja sie w zależności od warunków jakie zadam w Solverze, więc 1 nie zawsze musi być w tym samym miejscu w danej kolumnie :)
czesterek [ Konsul ]
Wyjaśnie problemik jeszcze raz:
Wiec tworze arkusz który bedzie obliczał marszrute do poszczególnych stacji benzynowych; wykorzystuje przy tym solvera, pierwsza macierz to macierz odległości, druga to macierz(optymalizowana przez solvera), marszrut, gdzie 1 oznacza że dane miasto jest odwiedzane, a 0 że nie, a dokładniej np 1 w C23 oznacza że cysterna jedzie z Poznania do Kobylnicy, dalej 1 w D26 ozacza że cysterna z Baranowa jedzie do Szamotuł, w wierszu 36 sa wypisane miejscowości z których wyjeżdżają a w 37 do których z danego miasta muszą dojechąc. Włąsnie wiersza 37 ma dotyczyć makro napisane w VBA.
Fanlegii dzięki za pomoc ale jesli mógłbyś sie odezwać i troszke jeszcze pomóc to byłbym wdzięczny mój gg to 1123472
Pozdro

czesterek [ Konsul ]
^up^
troche postasuje ale naprawde jest mi to potrzebna i wierze że ktos mi pomoze
gkowal [ Chor��y ]
niestety nie jest to makro tylko normalna funkcja
troche na okolo ale dziala:
w komorke C38 "=VLOOKUP(MATCH(1;c19:c32;0);$a$2:$b$15;2;0)"
w komorke D38 "=VLOOKUP(MATCH(1;d19:d32;0);$a$2:$b$15;2;0)"
i tak dalej
gkowal [ Chor��y ]
aha
vlookup to wyszukaj.pionowo
ale match to niestety nie wiem jak bedzie w polskiej wersji jezykowej
Swidrygajłow [ ]
proste rozwiązanie za pmocą formuły
założenia:
1.w każdej kolumnie jest tylko jedna JEDYNKA, czyli jedno rozwiązanie
2.korzysta z kolumny B która numeruje wiersze w macierzy rozwiązań
w a38, B38... staw taką formułę:
=INDEKS($B$2:$B$15;SUMA(JEŻELI(C19:C32=1;$B19:$B32;0));1)
UWAGA: jest to formuła sumowania tablicowego, zatwierdzając ją musisz wcisnąć CTRL+SHIFT+ENTER
daj znać czy działa, bo mogłem cos pochrzanić z nr komórek
czesterek [ Konsul ]
Fanlegii---> dzięki za pomoc, na szczescie nie usunąłeś mojego maila ;)
gkowal, Swidrygajłow równie wielkie dzięki ;)
a tak na marginesie czy dało by sie zrobić aby te jedynki były na jakimś innym tle np błękitnym, jak domniemam to też da sie zrobić w VBA, ale to już tak dla upiększenia, żeby to jakoś wyglądało i było łatwo odczytywać.
Pozdro
gkowal [ Chor��y ]
By wyroznic jedynke uzyj "Formatowania warunkowego" z menu Format.
jezeli wartosc komorki przyjmie 1 to definiujesz dowolny (latwy do zauwazenia) format

czesterek [ Konsul ]
Witam Ponownie, i znów prosze o pomoc panowie !!!
Mój projekt uległ małej modyfikacji i tera musiałbym zmienić również VBA, ale przechodze do rzeczy
moja macierz wygląda teraz tak ------>
i teraz w tej tabelce na dole potrzebuje wpisać jak przebiegają trasy i tu włąśnie potrzebna jest pomoc VBA tych tras moze być 10 choć nie musi to zależy ile pojazdów zostanie uzytych (na rys jest 7 ale to dlatego że mi sie mylnęło tym prosze sie nie sugerować), należy zaznaczyć że trasy moga sie zmieniać w zalezności jak rozwiąże je solver!!!! więc 1 nie musi być zawsze w tym samym miejścu.
Na rysunku sa przykładowe 3 trasy:
Magazyn-Baranowo-Magazyn
Magazyn-Suchy Las- Żnin- magazyn
Magazyn-Czemoiń-Brójce-magazyn
Prosze o pomoc!!!! to bardzo ważne dla mnie !!!
czesterek [ Konsul ]
up
Swidrygajłow [ ]
pomógłbym, ale zaraz mam samolot
do tego nie rozumiem jak z tej tabelki wybrac trasy?
fanlegii79 [ Konsul ]
daj to na maila, rozumiem ze kazda trasa zaczyna sie i konczy w magazynie?
czesterek [ Konsul ]
tak każda trasa kończy sie i zaczyna w magazynie
fanLegii jakbyś mógł to zobacz każda stacja ma określoną ilość paliwa jaką jej trzeba dostarczyć i czy dalo by sie zrobić tak jeszcze aby na końcu sumowało jaką ilosc paliwa trza przewieźć na danej trasie
czesterek [ Konsul ]
fanLegii- poszło na maila
czesterek [ Konsul ]
fanLegii--> poszło coś nowego tym razem mojego
stworzylem coś takiego:
Sub pojazd()
car = 0
For i = 60 To 69
If (Range("q" & i).Value <= 9700) Then
car = car + 1
Cells(59 + car, "r").Value = Range("J" & 57)
ElseIf (Range("q" & i).Value <= 11130) Then
car = car + 1
Cells(59 + car, "r").Value = Range("H" & 57)
ElseIf (Range("q" & i).Value <= 14650) Then
car = car + 1
Cells(59 + car, "r").Value = Range("I" & 57)
ElseIf (Range("q" & i).Value <= 17000) Then
car = car + 1
Cells(59 + car, "r").Value = Range("K" & 57)
ElseIf (Range("q" & i).Value <= 21600) Then
car = car + 1
Cells(59 + car, "r").Value = Range("E" & 57)
ElseIf (Range("q" & i).Value <= 22000) Then
car = car + 1
Cells(59 + car, "r").Value = Range("G" & 57)
ElseIf (Range("q" & i).Value <= 31500) Then
car = car + 1
Cells(59 + car, "r").Value = Range("F" & 57)
ElseIf (Range("q" & i).Value <= 38000) Then
car = car + 1
Cells(59 + car, "r").Value = Range("C" & 57)
ElseIf (Range("q" & i).Value > 38000) Then
car = car + 1
Cells(59 + car, "r").Value = "jeszcze_raz"
ElseIf (Range("q" & i).Value = "") Then
car = car + 1
Cells(59 + car, "r").Value = ""
End If
Next
End Sub
i teraz mam pytanko czy da sie zrobić aby wartość Value była przedziałem np dla pierwszego if od 0 do 9700
Pozdrawiam