vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest poniedziałek, 28 kwietnia 2025 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Jak napisać makro w vba excel porównujące wartości w komórkach danej kolumny z zadaną wartością?


otwartyotwarty rozpoczął: robertk postów: 5



napisał: robertk
postów: 3


umieszczony:
20 lutego 2006
22:03

  
Cytat:

Jednak problem jest w tym, że celem forum jest pomoc w rozwiązywaniu konkretnych problemów i raczej nie jest miejscem, które ma pomóc w opanowaniu absolutnych podstaw. Niestety, bez ich samodzielnego opanowania czarno widzę Twoje dalsze próby z VBA. I wcale nie piszę tego z powodu jakiejkolwiek złośliwości.


dzięki, zrozumiałem przesłanie i zabieram się za opanowanie podstaw
przykładowe kody stosowane w makrach same w sobie mają duża wartość poznawczą i pokazują możliwości zastosowań,
suche wyjaśnienia w helpach tego nie dają

dzięki za przykładowy kod, postaram się go wykorzystać i będę w przyszłości zgłaszał konkretne problemy, z którymi sam sobie nie poradzę

pozdrawiam
napisał: jottad
postów: 118


umieszczony:
19 lutego 2006
23:39

  
Witam!
Cytat:

formatowanie warunkowe ... niestety to dla mnie dwa słowa, które w świetle posiadanej przeze mnie wiedzy w VBA nic nie znaczą


Problem w tym, że to nie ma nic wspólnego z VBA. To jest opcja w menu Format, za pomocą której można uzaleznić format komórki od pewnych warunków. Lecz to nie ma nic wspólnego z tematyką forum.

Cytat:

przy rozwiązaniu z zakresem występuje jakaś skończona liczba powtórzeń zależna od zakresu (np. Range ("A1:A15"))
i to dla moich celów wystarcza, ponieważ zawsze jest taka sama liczba wierszy do przeliczenia,
ale co wtedy gdy liczba tych wierszy jest zmienna?


Zapewne chodzi Ci o wyszukanie ostatniej wypełnionej komórki w określonej kolumnie. Są różne metody. Najczęściej robi sie to poprzez wykorzystanie metody End, która wyszukuje pierwszą taką komórkę, położoną powyżej komórki w ostatnim wierszu arkusza.
wartosc = 5
ostatniWiersz=Range("A65536").End(xlUp).Row
For i=1 to ostatniWiersz
     If Cells(i,1) < wartosc Then
       Cells(i,1).Interior.ColorIndex = 3
     Else
        Cells(i,1).Interior.ColorIndex = xlColorIndexNone
     End If
Next



Cytat:

a jak napisać pętlę która wykonuje się określoną liczbę razy poczynając od konkretnej komórki i przesuwając się w dół o jedną komórkę???


Przykład masz w powyższym kodzie. W celu odwołania się do komórki zastosowałem instrukcję Cells. Zmienna i, zwiększana w każdym przebiegu pętli For o 1, powoduje, że kolejno odwołujemy się do komórek w 1 kolumnie, przesuwając się w dół o jedną komórkę. Jest jeszcze kilka innych sposobów, ale ten jest najczęściej stosowany.

Cytat:

poza tym jak obliczyć ile razy ma się wykonać taka pętla?
powiedzmy jak zliczyć ile jest wierszy, w których w danej kolumnie występuje liczba?


Zliczanie to już sprawa konkretnych zastosowań. nie ma konkretnej recepty. Zauważ, że w powyższym przykładzie wcale nie musimy wiedzieć ile razy wykona się pętla. Interesuje nas tylko od której komórki ma się zacząć przetwarzanie danych i na której komórce ma się zakończyć.
Trochę niżej jest wątek o liczeniu wystąpień wartości w obszarze.

Cytat:

Proszę nie traktujcie moich pytań jako poszukiwania gotowych rozwiąń i żerowanie na zdobytej przez kogoś wiedzy, bardzo przyda mi się wiedza z VBA, ale nie mam czasu by uczyć się jej od początku i potrzebuję wskazówek.


Jednak problem jest w tym, że celem forum jest pomoc w rozwiązywaniu konkretnych problemów i raczej nie jest miejscem, które ma pomóc w opanowaniu absolutnych podstaw. Niestety, bez ich samodzielnego opanowania czarno widzę Twoje dalsze próby z VBA. I wcale nie piszę tego z powodu jakiejkolwiek złośliwości.
Cytat:

nie mam pojęcia jak w VBA zapisać "o jedną komórkę w lewo od komórki aktywnej"


ActiveCell.Offset(0,-1)

Pozdrawiam
napisał: robertk
postów: 3


umieszczony:
19 lutego 2006
17:33

  
dzięki jottad

to dla Was zapewne banał, ale bardzo mi pomogło

formatowanie warunkowe ... niestety to dla mnie dwa słowa, które w świetle posiadanej przeze mnie wiedzy w VBA nic nie znaczą

mam jeszcze pytanko dotyczące takiej pętli:

przy rozwiązaniu z zakresem występuje jakaś skończona liczba powtórzeń zależna od zakresu (np. Range ("A1:A15"))
i to dla moich celów wystarcza, ponieważ zawsze jest taka sama liczba wierszy do przeliczenia,
ale co wtedy gdy liczba tych wierszy jest zmienna?

czy można zapisać np. taki warunek:
powtarzaj jakąś czynność tyle razy ile jest wierszy które mnie interesują,
rozumiem że jeśli napiszę:

For Each kom In Range("A1:A10") to pętla będzie się powtarzać przez cały ten zakres,

a jak napisać pętlę która wykonuje się określoną liczbę razy poczynając od konkretnej komórki i przesuwając się w dół o jedną komórkę???

poza tym jak obliczyć ile razy ma się wykonać taka pętla?
powiedzmy jak zliczyć ile jest wierszy, w których w danej kolumnie występuje liczba?

zapewne jest to kolejne banalne pytanie, ale przedzieranie się przez help do VBA w excelu jest dla mnie niezmiernie trudne bez jakichkolwiek podstaw, wysiadam kompletnie na zupełnie banalnych problemach

Proszę nie traktujcie moich pytań jako poszukiwania gotowych rozwiąń i żerowanie na zdobytej przez kogoś wiedzy, bardzo przyda mi się wiedza z VBA, ale nie mam czasu by uczyć się jej od początku i potrzebuję wskazówek.
Przede wszystkim ginę przy adresowaniu komórek w kodzie VBA, np. banalna z pozoru sprawa jak: kopiuj formatowanie z komórki znajdującej się o 1 w lewo od komórki aktywnej do komórki aktywnej jest dla mnie nie do przejścia, ponieważ chociaż znam komendę, która by takie coś wykonała to nie mam pojęcia jak w VBA zapisać "o jedną komórkę w lewo od komórki aktywnej"

dość tego użalania, jeśli znajdzie się dobra dusza, która mi pomoże, to będę wdzięczny

pozdrawiam
Robert
napisał: jottad
postów: 118


umieszczony:
18 lutego 2006
19:31

  
Kod może wyglądać następująco:
wartosc = 5
For Each kom In Range("A1:A100")
    If kom < wartosc Then
       kom.Interior.ColorIndex = 3
    Else
       kom.Interior.ColorIndex = xlColorIndexNone
    End If
Next



ale po cichu powiem (aby admin nie usłyszał :D ), że formatowanie warunkowe byłoby do tego zadania lepszym rozwiązaniem.

Pozdrawiam
napisał: robertk
postów: 3


umieszczony:
18 lutego 2006
17:58

  
Witam wszystkich na forum.
Nie znam visual basic praktycznie wcale i tworząc makra z reguły wykorzystuję rejestrację i później usuwam niepotrzebne fragmenty.
Tym razem jednak muszę napisać makro, którego nie da się zarejestrować.
Makro ma za zadanie /między innymi/ porównać wartości zapisane w komórkach danej kolumny do danej Wartości i jeśli wartość w danej komórce będzie mniejsza od tej Wartości to w komórce tej tło powinno zostać zmienione ze zwykłego białego np. na czerwony.
Makro to jest mi potrzebne do jednego rodzaju pliku, który zawiera jednak zbyt wiele wierszy żeby robić to ręcznie, a podświetlenie interesujących komórek ułatwia mi pracę z tego rodzaju plikami.
Sama zmiana koloru jest trudna, ale jak napisać kod porównujący wartości nie mam najmniejszego pojęcia.
Jeśli mógłby mi ktoś pomóc, byłbym ogromnie wdzięczny, ewentualny link do stron gdzie mógłbym znaleźć tak podstawowe /tak mi się wydaje/ informacje też byłby pomocny.

Pozdrawiam
Robertk


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z