Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: czyszczenie komórek
toja




Typ: neutral
Postów: 31
Zarejestrowany: Apr 2005
czyszczenie komórek

Czy istnieje może łatwiejszy sposób czyszczenia komórek, aniżeli ten podany poniżej
Nie było by problemu gdyby czyszczone były jedna pod drugą :
.Range("A1:A2000".Clear,

ale występują co druga i co wtedy
mam wpisywać tak jak poniżej
a jak będzie ich np 2000
Może ktoś zna łatwiejszy sposób
Private Sub cmbCzysc_Click()
With ThisWorkbook.Worksheets("Arkusz1"
.Range("A1:A1".Clear
.Range("A3:A3".Clear
.Range("A5:A5".Clear
.Range("A7:A7".Clear
End With

With ThisWorkbook.Worksheets("Arkusz2"
.Range("A1:A1".Clear
.Range("A3:A3".Clear
.Range("A5:A5".Clear
.Range("A7:A7".Clear
End With
End Sub

20-04-2005 14:33
Pokaż profil toja  Wyślij email do toja   
Jarek Grzybowski




Typ: neutral
Postów: 11
Zarejestrowany: Apr 2005

Oczywiście, że istnieje. Jeżeli z góry znana jest liczba tych komórek, które nalezy wyczyścić, to można zastosować pętlę For i=0 to n ... Next i gdzie n to ilość komórek do wyczyszczenia licząc od zera (0, 1, 2, ...). Taka pętla mogła by wyglądać następująco:
...
For i=0 to n
    Range("A1".Offset(2*i, 0).Clear
Next i
...
Metoda Offset oznacza przeskok od komórki A1 o określoną ilość wierszy i kolumn, w naszym przypadku 2*1 wierszy i 0 kolumn. Założyłem, że pierwszą do wyczyszczenia jest A1. Jeżeli nie jest znana ilość komórek można wykorzysta pętlę Do While ... Loop, która wykonywała by czyszczenia do póki kómórki są niepuste. Pierwsza pusta komórka (z ciągu tych komórek liczonych co druga) zakończyła by pętlę i dlasze nawet zapisane komórki nie zostały by wyczyszczone:
...
i=0
Do While Range("A1".Offset(2*i, 0).Value<>""
    Range("A1".Offset(2*i, 0).Clear
    i=i+1
Loop
Problem pierwszej komórki od której należy co drugą czyść można rozwiązać projektując własny formularz (UserForm) z formantem zwanym chyba RefEdit (pozwalający na zczytanie adresu komórki porzez kliknięcie komórki - podobnie jak przy tworzeniu wykresu w kreatorze). Taki formularz po zczytaniu komórki poczatkowej uaktywniałby przycisk np. OK i program ruszałby z czyszczeniem komórek.


_____________________________________________
Pozdrawiam
Jarek

20-04-2005 18:32
Pokaż profil Jarek Grzybowski  Wyślij email do Jarek Grzybowski   
anonim




Typ: Nie zarejestrowany

Jarek, o to mi chodziło, dziękuję

20-04-2005 21:12
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003


i = 1
Do
    ThisWorkbook.Worksheets("nazwa".Range("A" & i).Clear
    i = i + 2
Loop While ThisWorkbook.Worksheets("nazwa".Range("A" & i) <> ""

podany przykład czyści co drugą komórkę w arkuszu nazwa w kolumnie A dopóty, dopóki Ai jest niepuste


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

20-04-2005 21:16
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
toja




Typ: neutral
Postów: 31
Zarejestrowany: Apr 2005

A jeżeli okaże się, że po drodze w kolumnie znajdą się puste komórki, to w jaki sposob je pominąć

20-04-2005 21:34
Pokaż profil toja  Wyślij email do toja   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

a znasz ilość czyszczonych komórek?

Jeśli znasz użyj pętli for

For i = 1 to 500 Step 2
    ThisWorkbook.Worksheets("nazwa".Range("A" & i).Clear
Next i


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

20-04-2005 21:54
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
toja




Typ: neutral
Postów: 31
Zarejestrowany: Apr 2005

Tak to jest to, dziękuję
A jak w czyszczonej komorce chcialbym wyczyścić wartość z zachowaniem formuły to wlaściwość Clear chyba temu nie sprosta, czy muszę wybrać inną?

20-04-2005 22:09
Pokaż profil toja  Wyślij email do toja   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Wiesz, z formułami to jest tak:
=SUMA(A2:A15)
Oznacza to, że w komórce, w której jest formuła, jest wyświetlana suma z komórek A2 do A15. Czyli, jeśli wyczyścisz komórki od A2 do A15, to komórki z formułą czyścić nie musisz (pozostanie w niej formuła z wynikiem 0).

Zatem, w pętli for umieść:

For i = 1 to 500 Step 2
    If Left(ThisWorkbook.Worksheets("nazwa".Range("A" & i).Formula,1) <> "=" then
    ThisWorkbook.Worksheets("nazwa".Range("A" & i).Clear 
    End if
Next i


Piszę z pamięci, więc musisz to sprawdzić.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

20-04-2005 22:51
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Jarek Grzybowski




Typ: neutral
Postów: 11
Zarejestrowany: Apr 2005
P.S.

Wydaje mi się, że jest możliwość czyszczenia co n-tej komórki w kolumnie począwszy od wskazanej komórki i kończąc na ostatniej niepustej, przy czym nie znamy ilości zapisanych komórek oraz dopuszczalne są dziury (czyli puste komórki). Oto kod jaki przypisałem do przycisku na formie, który zwiera jeszcze formant RefEdit (nazwany "re_zakres" do podania przez użytkownika pierwszej komórki, poniżej której będą czyszczone, i pole tekstowe do określania n - co którą komórkę należy wyczyścić (nazwane "tb_n":

Private Sub b_wyczysc_Click()
    Dim n As Integer
    Dim m As Single
    Dim i As Single
    Dim p As Single
    On Error Resume Next
    With Range(Me.re_zakres.Text).Range("A1"
        p = .Row
        m = Val(ActiveCell.SpecialCells(xlLastCell).Row)
        If m < p Then
            MsgBox "Błąd wyboru komórki, poniżej wskazanej komórki nie ma żadnej niepustej komórki.", _
vbCritical + vbOKOnly + vbApplicationModal, "Błąd"
            Exit Sub
        End If
        n = Int(Me.tb_n.Value)
        For i = 0 To m - p
            .Offset(i * n, 0).ClearContents
        Next i
    End With
End Sub

Istotę stanowi metoda ActiveCell.SpecialCells(xlLastCell) określająca ostatnią zapisaną komórkę w arkuszu.


_____________________________________________
Pozdrawiam
Jarek

09-05-2005 16:44
Pokaż profil Jarek Grzybowski  Wyślij email do Jarek Grzybowski   
toja




Typ: neutral
Postów: 31
Zarejestrowany: Apr 2005

Dziękuję, oto mi właśnie chodziło
-------------------------------------------

Pozdrawiam Marian

14-05-2005 23:48
Pokaż profil toja  Wyślij email do toja   
Wszystkich odpowiedzi: 9 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1