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