vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest czwartek, 02 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

VBA porównywanie zawartości komórek z tekstem przy użyciu pętli


otwartyotwarty rozpoczął: Tevenet postów: 4



napisał: Tevenet
postów: 2


umieszczony:
14 maja 2009
15:42

edytowany:
15 maja 2009
14:35

  
Witam, poradziłem sobie już z tym problemem. Jeżeli kogoś interesuje ten temat to poniżej zamieszczam rozwiązanie:

Sub Aktualizacjacennika()
  Dim i As Integer
 Dim j As Integer
 For i = 2 To 700
  For j = 2 To 700
   If Arkusz1.Cells(i, 4).Value = Arkusz2.Cells(j, 1).Value And Arkusz1.Cells(i, 4).Value <> "" And Arkusz2.Cells(j, 4).Value <> "BRAK" Then
     Arkusz1.Cells(i, 6).Value = 1
     Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 3).Value * 1.7
     End If
     If Arkusz1.Cells(i, 4).Value = Arkusz2.Cells(j, 1).Value And Arkusz1.Cells(i, 4).Value <> "" And Arkusz2.Cells(j, 4).Value = "BRAK" Then
     Arkusz1.Cells(i, 6).Value = 0
   End If
 Next j
 Next i
End Sub



Dziękuję bardzo za odpowiedź.

Cytat:
Ad 2. Niezbyt rozumiem ... Musisz użyć instrukcji warunkowej If:
Kod VBA:
If Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 1).Value Then
'... instrukcja1
Else
'... instrukcja2
End if


To znaczy ja wiem, że muszę użyć instrukcji warunkowej if ale chodziło mi czy do porównywania typu znakowego (string) muszę użyć jakiejś specjalnej funkcji czy wystarczy najprostsze porównanie wartości z wykorzystaniem znaku =. Poniżej zamieszczam początkowy kod mojego programu:

Sub Ace()
 Dim i As Integer
 Dim j As Integer
 For i = 2 To 1000
  For j = 2 To 1000
   if Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 1).Value
    then Arkusz1.Cells.Value(i, 9) = 1
     Else: Arkusz2.Cells(i, 4).Value = "BRAK"
   End If
 Next j
 Next i
End Sub



Generalnie docelowo mój programik ma aktualizować cennik. Pętle for porównują komórki w dwóch arkuszach i gdy napotkają na taki sam kod produktu sprawdzają dostępność produktu w cenniku hurtowni, jeżeli jest dostępny ustalają cenę w moim cenniku na cena_hurtowni * moja prowizja. Jeżeli produkt nie jest dostępny w hurtowni ustalają dostępność w moim cenniku na 0. Oczywiście w kodzie programu tych warunków jeszcze nie zawarłem ponieważ napotkałem na problem przy pierwszej instrukcji warunkowej.

Z góry dziękuję za pomoc.
napisał: admin
postów: 613


umieszczony:
14 maja 2009
14:57

  
Witam,

Jeśli pojawia Ci się Syntax Error, to znaczy, że masz błąd składni - czyli źle napisany program. Wrzuć kod na forum, może poradzimy.
Ad 1. Zapraszam do działu Artykuły - Kurs VBA dla zielonych - cz. 3
A po krotce:
For i=1 to 10
'... instrukcja1
'... instrukcja2
Next i



Ad 2. Niezbyt rozumiem ... Musisz użyć instrukcji warunkowej If:
If Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 1).Value Then
'... instrukcja1
Else
'... instrukcja2
End if



pozdrawiam

Cytat:
Witam,

Mam problem z napisaniem programu pod VBA. Potrzebuję porównywać wartości komórek z dwóch arkuszy i w momencie gdy są takie same aktualizować pewne pola. Napisałem dwie pętle for do iteracji kolejnych wierszy w obydwu kolumnach niestety w momencie gdy chcę wpisać warunek IF pojawiają mi się błędy kompilacji (Syntax error).

1. Czy jest w VBA możliwość stworzenia jakiegoś bloku instrukcji jak np. w C++ dla pętli FOR pomiędzy klamrami { }. A może napisać jakąś procedurę, która wewnątrz pętli for będzie porównywała komórki?

2. W jaki sposób w VBA porównać wartości komórek w których jest tekst? Trzeba do tego użyć jakiejś konkretnej funkcji czy wystarczy:
Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 1).Value



Dodam, że jestem początkujący i właściwie nigdy wcześniej nie miałem do czynienia z VBA więc jeśli napisałem coś głupiego to najmocniej przepraszam. Jeżeli ma to jakieś znaczenie to piszę to niestety pod Windows Vista i Office 2007. Z góry dziękuję za odpowiedź.
napisał: Tevenet
postów: 2


umieszczony:
14 maja 2009
14:39

  
Witam,

Mam problem z napisaniem programu pod VBA. Potrzebuję porównywać wartości komórek z dwóch arkuszy i w momencie gdy są takie same aktualizować pewne pola. Napisałem dwie pętle for do iteracji kolejnych wierszy w obydwu kolumnach niestety w momencie gdy chcę wpisać warunek IF pojawiają mi się błędy kompilacji (Syntax error).

1. Czy jest w VBA możliwość stworzenia jakiegoś bloku instrukcji jak np. w C++ dla pętli FOR pomiędzy klamrami { }. A może napisać jakąś procedurę, która wewnątrz pętli for będzie porównywała komórki?

2. W jaki sposób w VBA porównać wartości komórek w których jest tekst? Trzeba do tego użyć jakiejś konkretnej funkcji czy wystarczy:
Arkusz1.Cells(i, 8).Value = Arkusz2.Cells(j, 1).Value



Dodam, że jestem początkujący i właściwie nigdy wcześniej nie miałem do czynienia z VBA więc jeśli napisałem coś głupiego to najmocniej przepraszam. Jeżeli ma to jakieś znaczenie to piszę to niestety pod Windows Vista i Office 2007. Z góry dziękuję za odpowiedź.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z