GRY-Online.pl --> Archiwum Forum

VBA dla Excel'a potrzebna pomoc do stworzenia prostego makra

31.05.2004
16:29
[1]

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

31.05.2004
16:34
[2]

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ć :(((((((((

31.05.2004
16:42
[3]

czesterek [ Konsul ]

upss nie dodałem rysunku :)

31.05.2004
17:20
[4]

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

31.05.2004
17:25
[5]

czesterek [ Konsul ]

fanlegii --> wysłałem ci na maila arkusz z tym problemikiem

31.05.2004
17:26
[6]

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 :)

31.05.2004
17:54
[7]

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

31.05.2004
19:07
smile
[8]

czesterek [ Konsul ]

^up^

troche postasuje ale naprawde jest mi to potrzebna i wierze że ktos mi pomoze

01.06.2004
01:25
[9]

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

01.06.2004
01:28
[10]

gkowal [ Chor��y ]

aha
vlookup to wyszukaj.pionowo
ale match to niestety nie wiem jak bedzie w polskiej wersji jezykowej

01.06.2004
07:52
[11]

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

01.06.2004
17:57
[12]

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

02.06.2004
22:29
[13]

gkowal [ Chor��y ]

By wyroznic jedynke uzyj "Formatowania warunkowego" z menu Format.
jezeli wartosc komorki przyjmie 1 to definiujesz dowolny (latwy do zauwazenia) format

13.06.2004
12:24
smile
[14]

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 !!!

13.06.2004
13:17
[15]

czesterek [ Konsul ]

up

13.06.2004
13:33
[16]

Swidrygajłow [ ]

pomógłbym, ale zaraz mam samolot
do tego nie rozumiem jak z tej tabelki wybrac trasy?

13.06.2004
14:02
[17]

fanlegii79 [ Konsul ]

daj to na maila, rozumiem ze kazda trasa zaczyna sie i konczy w magazynie?

13.06.2004
14:07
[18]

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

13.06.2004
14:11
[19]

czesterek [ Konsul ]

fanLegii- poszło na maila

14.06.2004
18:40
[20]

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

© 2000-2025 GRY-OnLine S.A.