» »

[Excel] problem z makrojem, visual basic

[Excel] problem z makrojem, visual basic

«
1
2

steev ::

Mam en problem.

Rad bi, da se makro naredi neko stvar pod pogojem (if).
Primer, če je v celici A5 vrednost 1 (ena), naj zbriše celo vrstico 5.

Zna kdo naredi kaj takega?
Takih vrstic je najvec 140. Se da nrediti za vse vrstice naenkrat, da ni treba za usako posebej pisat kodo.

Nekaj sem probaval tako, da sem posnel makro (oznacim vrstico+zbrišem), potem pa sem nekaj u kodi čačku, pa itk nimam veze s programiranjem.

Pls, help!
:|
  • spremenilo: snow ()

Vesoljc ::

vse se da narest :)

povej tocno kaj naj pocne makro. A5 -> to pomeni peto vrstico?
Abnormal behavior of abnormal brain makes me normal...

Zgodovina sprememb…

  • spremenil: Vesoljc ()

steev ::

A5 je celica (A stolpec, vrstica 5). To sm dou mau na blef.
Uresnic mam tko u D stolpcu (D1, D2, D3, D4, ...D140). Če je ena v katerikoli celici, naj zbriše tisto vrstico.

Če je enka v D1, naj zbriše vrstico 1.
Če je v D2, naj zbriše vrstico 2, itd.
:|

Tutankhamun ::

Če ni A je pa D ane
Sub Macro1()
    
    Row = 1
    Do
        If Cells(Row, "D") = 1 Then
            Range(Cells(Row, "D"), Cells(Row, "D")).Select
            Selection.EntireRow.Delete
        Else
            Row = Row + 1
            If Cells(Row, "D") = "" Then Exit Sub
        End If
    Loop
    
End Sub
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

Ok, dela.
Kuko se pa naredi za več vrstic naenkrat:
Da ni sam za prvo. Vem da lahk za usako posebej nardim, sam se verjetn da narest da ti use naenkrat nardi.
Tm k je
Row = 1

Kaj napišem da bo od 1 do 140
:|

steev ::

Zej sem dou talo ven:

If Cells(Row, "D") = "" Then Exit Sub
In dela, samo pojave se okno debug, verjetn k pride do konca tabele, do vrstice xyzwq.
:|

Tutankhamun ::

Ta progi dela tok časa, dokler ne naleti na prazno celico D. Se pravi briše use vrstice, kjer je D = 1, izvajanje programa se zaključi ob prvi prazni D celici.

Tale vrstica zaključi program.
If Cells(Row, "D") = "" Then Exit Sub

Jes ne vem kak zgleda tvoja tabela. Kakšne so pa ostale D celice, če not ne piše 1. A so prazne?
Kako veš do katere vrstice moreš pregledat?
Če imaš fiksno sam do 140 vrstice, lahko namesto vrstice
If Cells(Row, "D") = "" Then Exit Sub
napišeš
if row > 140 Then Exit Sub

Samo, če narediš fiksno do katere vrstice, pa lahko to nardiš tut brez makroja, čist enostavn.
Označš cel D stolpec, greš pod Data->Filter->Auto Filter, potem se ti pojavi pri celeci D1 izbirni okenček, kjer izbereš 1, zdej bi mogu vidt samo vrstice kjer je D = 1. Pa use označš, in pritisneš na remove row. To je vse :D
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

No zej pa dela. Program se nebi smel ustavit pri prvi prazni. Tabela je mešana.
1
0
1
1
0
0
Ko sem dal to ven da se ne ustavi, je delal do konca tabele, pol pa bug.
Zej vse lepo dela tako kot treba.

Hvala ti, mi je prav mal žal da nisem šel na računalništvo.
:|

Tutankhamun ::

Sej nism Računaličar. Jes sm štromar. Ampak mi je zanimiv mal programirat.;)
AMD Phenom QUAD 9950 Black Edition, 8GB

Vesoljc ::

ko najdes prazno vrstico povecas en stevec. ce naletis na polno vrstico ga resetiras nazaj na nic. ce stevec doseze recimo 20, potem je skoraj ziher konec.
Abnormal behavior of abnormal brain makes me normal...

steev ::

Bom se kle neki uprasu.
Mam en stolpec kjer so sami if stvaki notr in pa valda vrednosti, ki jih if stavek vrže vn. Se da razporedit vrednosti (števila) po vrstnem redu od najmanjšega do največjega. More bit neka finta da mi razporedi vrednosti ne pa if stavke (if(D4=F4;E4;""), if(D5=F5;E5;"")... itd.)

Upam da me razumete.
:|

Vesoljc ::

niti ne...
Abnormal behavior of abnormal brain makes me normal...

Tutankhamun ::

A mislš tko:
Imaš recimo v stolpcu A vrednosti
2
1
5
9
7
2
8
in zdej bi ti v tem istem stolpcu sortiral te vrednosti po velikosti.
AMD Phenom QUAD 9950 Black Edition, 8GB

steev ::

Ja, to so vrednosti ki jih izpiše IF stavek. Ko dam da mi razporedi, mi razporedi IF stavke (tisto kar sm sam pisal v celice: =IF(...), ne razporedi mi pa vrednosti (ki jih if stavki izpisejo).

On mi razporeja to (kar je ze po vrstnem redu):
IF(D3>E3;1;2)
IF(D4>E4;1;2)
IF(D5>E5;1;2)
IF(D6>E6;1;2)
IF(D7>E7;1;2)

Jaz bi ba tako kot pravi Tutankhamun.
:|

Tutankhamun ::

To celo tvojo tabelco počrn/označ, pa pejt pod Data->Sort, pa potem ko te upraša Sort By, povej po katerem stolpcu sortiraš(to je stolpec kjer imaš vrednosti, recimo stolpec A iz mojga primera), in to ma da dela ;) .
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

Sam to ni fiksiran ($$, dolar). In kukr kol mi razporedi ostane isto.
A te lahko zaprosm da mi napises en makro.

Ok stvar je taka:
Mas stolpec A kjer so same vrednosti od if stavkov. A mi lahko napises nej u stolpec B nardi naslednje.

V B1 napiš = $A$1 (nej fiksira)
V B2 =$A$2
V B3 =$A$3
V B4 =$A$4
itd.
Da mi to program nardi, ker se mi ne da delat za uskga posebej.
Nemorm sam za enga narest, pa pol potegnt čez ceu stolpec, ker je fiksiran.
:|

Tutankhamun ::

Sploh te ne zastopm, kaj ostane isto????????, dej kšno slikco, prej potem.;)
A si ti mislu, da bi sortiral po velikosti samo stolpec z vrednostmi, ostale stolpce bi pa pustu na mir? To bi se tut dal z makrojem sam, to je mal čudn(če sm te prov zastopu.


Makro za to da upišeš v B celico fiksno A, sploh ga nam testiru, ga bom kr na pamet napisu:D, sam se mi še sana ne kaj bi ti rad s tem naredu :\ .
Row = 1
Do
    Cells(Row, "B") = "=$A$" & Row
    Row = Row + 1
Loop
Ker ČIP makro:D
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

Ja, ja. Tko kt si reku. Sam stolpec z vrednostmi. In mi ni uspel. Zato pa hočem met stolpec s fiksnim vrednostmi.
Tole ubisvtu dela, sam zakva si dou loop. Pi*da, skor zmrznu tale P2.
:|

steev ::

Jao, zmrznu Excel ze drugic. Dej nared da se ustav pr doloceni vrstici, npr. 140.
:|

Tutankhamun ::

:D Sam si pa pojava. To si že sprašval mal bol gor, kak se iz loop zanke pride

Še enkrat

Pod Row = Row + 1 napiš

if Row > 140 then Exit Sub

Namest številke 140 pa upiš do katere vrstice bi ti rad pršu ;)


Pa nau ti prov nč škodl, če bi mal pogledu te makroje, so enostavni, pa še kej bi se nauču - osnove. :)
AMD Phenom QUAD 9950 Black Edition, 8GB

steev ::

Pa sej sm probu, pa ni delal. Nevem kva mi je blo. Ok, zej pa dela.
:|

steev ::

Ok, spet ima nek problem:
Tole je v kodi:

Range("A5").Select

Jest bi pa rad da je namesto tiste '5' vrednost neke celice. Se pravi da bi bilo sprmenljivo. Če imam v neki celici (npr: A1) vrednost 20 naj nardi:

Range("A20").Select

Lp
:|

Tutankhamun ::

Dim vrednost As String

vrednost = Cells(1, "A")
Range("A" + vrednost).Select
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

Dej kle mas celo kodo.

Sub Makro1()
Sheets("List1").Select
Range("A1:F10").Select
Range("F10").Activate
Selection.Copy
Sheets("List2").Select
Range("A6").Select
ActiveSheet.Paste
End Sub

Pa mi prosem dodaj notr
:|

Tutankhamun ::

in v keri celici bo pa pisal, katero celico naj izbere? In na katerem Listu ?
AMD Phenom QUAD 9950 Black Edition, 8GB

steev ::

Kopiral bo z lista 1 na list 2. Tista spremenljivka bo na list2
:|

Tutankhamun ::

Sub Makro1()
Dim vrednost As String

Sheets("List1").Select
Range("A1:F10").Select
Range("F10").Activate
Selection.Copy
Sheets("List2").Select

vrednost = Cells(1, "A")
Range("A" + vrednost).Select

ActiveSheet.Paste
End Sub
AMD Phenom QUAD 9950 Black Edition, 8GB

steev ::

Da, da, dela. Hvala ti. Greš na nest? Maš pir u dobrem :)
:|

Tutankhamun ::

Vau, zdej sm pogledu to temo. Sej to je prov najina tema :D. Pa ksn vesolček naju pride kdaj obiskat ;).
Na nest pa negrem. Ampak pijačka nj bo kr u dobrem :)
AMD Phenom QUAD 9950 Black Edition, 8GB

Vesoljc ::

per? kje? kdaj?

;)
Abnormal behavior of abnormal brain makes me normal...

steev ::

Da, per! Za nest, polet enkrat! Sečovlje! ;) :P
:|

steev ::

Še en problemček

Sub Macro1()

Row = 1
Do
If Cells(Row, "D") = 1 Then
Range(Cells(Row, "D"), Cells(Row, "D")).Select
Selection.EntireRow.Hidden = true
Else
Row = Row + 1
If row > 140 Then Exit Sub
End If
Loop

End Sub

Zdej je pa to tista koda, ki so jo napisu prvo. Sedaj sem zamenjal, da mi namesto izbriše, skrije vrstico.
Vendar se ne ustavi pri 140 vrstici. Ampak Excel zmrzne. Kaj bi lahko naredil ....

Še rajši bi videl, da bi bila koda narejena tako, da najprej označuje vrstice ki imajo v stolpcu (D) 1. Nato pa skirje vse naenkrat.

Hvala
:|

Tutankhamun ::

Lahko v tistmu makroju k si ga prlepu, pod vrstico "...Hidden = True" in pred vrstico "else" napišeš Row = Row + 1.

Al pa kr ta makro prepiš ;)

Sub Macro()
Row = 1

Do
If Cells(Row, "D") = 1 Then
Range("D" & Row).EntireRow.Hidden = True
Else
If Row > 140 Then Exit Sub
End If

Row = Row + 1
Loop
End Sub
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

steev ::

Uf, dela. Nevem, koko nej se ti zahvalim. Zakaj pa tisto ni delal, če ja pa z brisanjem čisto uredu delalo?
:|

Tutankhamun ::

Delal ni zato, ker nis imeu tm napisan Row = Row + 1, pol je pa skos skaku na vrstico 1.

Ti si pa takrt zbrisu če je bla 1, in je bla v vrstici že nova vsebina.

Res sm zakompliciran povedu :), ne znam drgač :8)
AMD Phenom QUAD 9950 Black Edition, 8GB

steev ::

Ej, zdej sem pa res ze tecn, sam usen.

A bi se dal da bi oznaceval vrstice (kot da bi jih sam, vmes pa bi držal ctrl), in na koncu ko jih ima označene skrije vse naenkrat. Ker vrstic je ogromno (40k) in potem to dela dooolgo.

Lp
:|

Zgodovina sprememb…

  • spremenil: steev ()

smetko ::

zamenjaj
Range("D" & Row).EntireRow.Hidden = True
z
Union(ActiveWindow.RangeSelection, Range("D" & Row).EntireRow).Select
in za loop dodaj
ActiveWindow.RangeSelection.EntireRow.Hidden = True

Pazi skrita bo tudi vrstica v kateri si bil pred zagonom makra.
No comment

steev ::

Hm, ste pa pametni, bom probal. Lp
:|

steev ::

Označi jih pravilno (se pravi vse, ki imajo 1) samo skrije jih pa ne. Se bom se mal igral.
:|

smetko ::

ukaz kateri naj bi skril je
ActiveWindow.RangeSelection.EntireRow.Hidden = True
Če ni skril, potem se verjetno ni izvedel.
Mora biti v okviru rutine (pred End Sub).
No comment

steev ::

Sub Makro4()
Row = 1
Do
If Cells(Row, "K") = 1 Then
Union(ActiveWindow.RangeSelection, Range("K" & Row).EntireRow).Select
Else
If Row > 1500 Then Exit Sub
End If

Row = Row + 1
Loop
ActiveWindow.RangeSelection.EntireRow.Hidden = True
End Sub

Tole mam, pa ne nardi. Samo označ jih.
:|

Zgodovina sprememb…

  • spremenil: steev ()

Tutankhamun ::

:D Men use vrstice 65536 kar jih je lahko na enem listu v Excellu nardi v par sekundah

Lej tole prepiš;)

Sub Macro()
Row = 1

Windows.Application.ScreenUpdating = False

Do
If Cells(Row, "D") = 1 Then
Range("D" & Row).EntireRow.Hidden = True
Else
If Row > 40000 Then Exit Do
End If

Row = Row + 1
If Row > 65536 Then Exit Do
Loop

Windows.Application.ScreenUpdating = True
End Sub
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

smetko ::

za steev
zamenjaj vrstico
If Row > 1500 Then Exit Sub
z
If Row > 1500 Then Exit Do,
Da se bo po koncu zanke izvedli še ukazi za zanko
Sam raje uporabljam v primerih, ko je znano število ponavljan for ...next zanko.
No comment

steev ::

Ja Tutankhamun, ker nimaš enk. To tudi meni nardi. ko pa imam veliko enk, pol pa začne ...

Bom oboje probal. Lp
:|

steev ::

Hm, dela. hvala obema, čeprav sem uporabil smetkov predlog. Se mi zdi boljši, pa še čist uredu dela.

Ampak res hvala obema.

P.S.: Kdo gre na nest? 8-)
:|

Tutankhamun ::

Js sm meu 65536 enk, ceu stolpc je biu u enkah. Tko da nevem o čem ti to 8-O. No nared pa tko kot ti paše. Useen pa probj še to pa primerjj.
AMD Phenom QUAD 9950 Black Edition, 8GB

Pifi ::

pozdrav. sem nov tukaj in vidim da obvladate sceno. imam torej problem: napisati funkcijo v makrih, ki zakodira in odkodira aktivno območje celic preglednice(openoffice calc). za kodiranje in odkodiranje mora uporanik vnesti geslo. help anyone?

steev ::

Ja kuko nej ti pa zakodira. Mores me nek algoritem, ki bo dve vrednosti 'spojil' v eno in obratno.
:|

steev ::

Pizda, kuko bi dou

ActiveCell.FormulaR1C1 = "=SUM(R[-12]C:R[-2]C)"

namest tm k je [-12] spremenljivko 'vrednost14'.

lp
:|

Pifi ::

že mam. moram rečt, da programske kode je kar veliko in je kar komplicirana. no hvala vseeno;)


lp
«
1
2


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

vba array

Oddelek: Programiranje
12849 (542) Vazelin
»

Excel: tiskanje po vrsticah

Oddelek: Pomoč in nasveti
7948 (861) luksorzi
»

Makroji v excelu

Oddelek: Programska oprema
62316 (2210) smetko
»

Prosim za pomoč pri VBA

Oddelek: Programiranje
351966 (1769) apachee
»

Visual Basic in Excel

Oddelek: Programiranje
262511 (2077) Vesoljc

Več podobnih tem