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

  tytuł wątku:
Wątki dyskusji

Zadanie dla wymiataczy VBA - Help me


otwartyotwarty rozpoczął: 0jack0 postów: 12



napisał: 0jack0
postów: 24


umieszczony:
24 maja 2007
18:13

  
DZIĘKI ZA POMOC WSZYSTKIM WYMIATACZOM VBA.

POZDRO
napisał: michal84
postów: 15


umieszczony:
24 maja 2007
14:47

  
zmien sobie typy danych z integer na long i bedzie dobrze i supeeeeeeeer wydajnie


wersja z zamiana:


Sub braki()
Dim i As Long, wiersz As Long, j As Long
Dim nowy As Worksheet, stary As Worksheet, roznica As Long, k As Long

Application.ScreenUpdating = False

Set stary = ActiveSheet
Set nowy = Worksheets.Add
stary.Select

wiersz = Cells(Cells.Rows.Count, 1).End(xlUp).Row

k = 0
For i = 1 To wiersz - 1
     If Cells(i + 1, 1) - 1 <> Cells(i, 1) Then
     roznica = Cells(i + 1, 1) - Cells(i, 1)
         For j = 1 To roznica - 1
         k = k + 1
         nowy.Cells(k, 1) = Cells(i, 1) + j
         Next j
     End If
    
Next i

Application.DisplayAlerts = False
If Application.WorksheetFunction.CountA(nowy.Cells) = 0 Then nowy.Delete
Application.DisplayAlerts = True

Set nowy = Nothing
Set stary = Nothing

Application.ScreenUpdating = True

End Sub

napisał: 0jack0
postów: 24


umieszczony:
24 maja 2007
14:22

  
Czy mozna to VBA zoptymalizować tak aby przetrawił około 50000 wierszy. Przy takiej ilości przez 40 minut mam ajętośc 100% procesora i nic niemogę zrobić . Przy małej ilości danych makro działa DZIĘKi.
napisał: tashemik
postów: 35


umieszczony:
24 maja 2007
13:26

  
Mała poprawka:

w lini
' sortuje dane
     Range("A1").Select ' sortuje dane
     Range("A1:A35").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _



zmień
Range("A1:A35")



na:
Range("A:A").



Sorki pomyłka przy zaznaczaniu.
Pozdrawiam Tashemik
napisał: tashemik
postów: 35


umieszczony:
24 maja 2007
12:58

  
Wymagania: Zrób formatkę excel. Dwie zakładki. W pierwszej wklej dane od kom A1. Uruchom a w drugiej dostaniesz wyniki.

U mnie działa po małym teście.

Pozdrawiam Tashemik
Sub brakujce()
' sortuje dane
    Range("A1").Select ' sortuje dane
    Range("A1:A35").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    
    Sheets(1).Activate
    Range("a1").Select
    Range(Selection, Selection.End(xlDown)).Select
    z = Selection.Rows.Count 'ilosc rekordów
    maksio = Sheets(1).Cells(z, 1) 'to jest max wart. rekordów
    mini = Sheets(1).Cells(1, 1) 'to jest minimum wart. rekordów
    'pętla duza; zakres danych
    For y = mini To maksio
                'petla mala ; szuka w komórkach
                For x = 1 To z
                If Sheets(1).Cells(x, 1) = y Then ' jak znajdzie
                GoTo bezdod
                End If
                Next x
                poz = poz + 1
                Sheets(2).Cells(poz, 1) = y
bezdod:
    Next y
End Sub

napisał: 0jack0
postów: 24


umieszczony:
24 maja 2007
11:28

  
Super !!!!

Teraz już nic z tego nie rozumiem.
Dane które muszę sparwdzić są wynikiem wygenerowanego raportu z aplikacji i zaimportowaniu do excella.
Dopiero po zaimportowaniu zapuszczam niżej napisane makro. Makro działa na małej ilości danych jeśli kolumna ma dużo wiecej wierszy pojawia sie opisany błąd. Co do max. jest to ostatatnia wartość wiersza.
Byłvby happy jaby komuś udało się dopracowaćten kod.
Pozdro
napisał: michal84
postów: 15


umieszczony:
24 maja 2007
11:18

  
zamiast :

Dim i As Integer, wiersz As Integer, j As Integer,roznica As Integer, k As Integer



dac:

Dim i As long, wiersz As long, j As long,roznica As long, k As long



i problem powinien sie rozwiazac
napisał: jalamas
postów: 316


umieszczony:
24 maja 2007
10:36

edytowany:
24 maja 2007
10:42

  
1. Cytat:
roznica As Integer

a jaki jest max dla typu Integer

O innych Integer nie wspomnę !!!!
Ale na przykład:
Row Property
Returns the number of the first row of the first area in the range. Read-only Long !!!!!.



2. uwaga na k skoro się zwiększa do roznica (max numer wiersza - a jaka może być max róznica u pytającego ????)
nawet gdyby deklaracje były w porzo

For j = 1 To roznica - 1
k = k + 1
nowy.Cells(k, 1)
lecz pytacz mógły sam...
napisał: tashemik
postów: 35


umieszczony:
24 maja 2007
09:46

  
Czy te dane jest to raport który importujesz do excela? A może przeklejasz je do arkusza. Makro musi znajdować się gdzieś. Przedstaw jak to wygląda w praktyce.
napisał: 0jack0
postów: 24


umieszczony:
24 maja 2007
08:15

  
WOw

Pojawił się błąd przy weryfikacji kolumny z większą ilością danych:

Runtime '6'
Overflow

??????
napisał: michal84
postów: 15


umieszczony:
23 maja 2007
23:55

  
witaj
zalozenie jest takie ze dane znajduja sie w pierwszej koumnie aktywnego arkusza i sa posortowane

Sub braki()
Dim i As Integer, wiersz As Integer, j As Integer
Dim nowy As Worksheet, stary As Worksheet, roznica As Integer, k As Integer

Application.ScreenUpdating = False

Set stary = ActiveSheet
Set nowy = Worksheets.Add
stary.Select

wiersz = Cells(Cells.Rows.Count, 1).End(xlUp).Row

k = 0
For i = 1 To wiersz - 1
    If Cells(i + 1, 1) - 1 <> Cells(i, 1) Then
    roznica = Cells(i + 1, 1) - Cells(i, 1)
        For j = 1 To roznica - 1
        k = k + 1
        nowy.Cells(k, 1) = Cells(i, 1) + j
        Next j
    End If
    
Next i

Application.DisplayAlerts = False
If Application.WorksheetFunction.CountA(nowy.Cells) = 0 Then nowy.Delete
Application.DisplayAlerts = True

Set nowy = Nothing
Set stary = Nothing

Application.ScreenUpdating = True

End Sub



pozdrawiam
napisał: 0jack0
postów: 24


umieszczony:
23 maja 2007
19:02

  
Bardzo proszę o kod VBA który wyrzuci do innego arkusza brakujące numery w kolumnie:

30000654
30000655
30000656
30000657
30000658
30000659
30000660
30000661
30000662
30000663
30000664
30000665
30000686
30000687
30000688
30000689
30000690
30000690
30000690
30000690
30000691
30000692
30000693
30000694
30000694
30000694
30000695
30000696
30000697
30000698
30000699
30000700
30000701
30000702
30000703
W tym przypadku powinien umieścic w drugim arkuszu numery od 30000666 do 30000687

Z góry dzięki a odpowiedzi


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z