Excel guruille makrohaaste, jota en itse osaa

petexi

Kirjanpitotapahtumat ovat excelillä.

Sovitaan, että minulla on sarakkeessa A kirjanpidon tilejä allekkain n 1000 riviä

Miten teen makron, joka aloittaa A1:stä testaa oleva kirjanoidon tili välillä esim 100-200 ja jos on niin korvaa sisällön sanalla hallinto, jos taas A1 on tili välillä 200-300 se merkitsee käyttä ja huolto eli korvaa kirjanpidon tilit sanoilla

ja kävisi koko kirjanpidon 1000 riviä läpi ja korvaisi tilinumeroita sanoilla. esim hallinto 100-200, käyttä ja huolto 200-300 ulkoalueiden hoito 300-400 jne koko sarakkeen loppuun asti korvaten tilinumerot sanoilla, joita voin sitten välisummilla suodatella ja laskea kulukohtaisesti

19

<50

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • PHAKU

      Jos nyt oikein ymmärsin tarkoituksesi, niin alla on linkki excel-kuvaan, jossa "temppu" tehdään ilman makroa.
      http://aijaa.com/jHXjpm

    • Seebra

      odotellaan kannymanin vastausta.
      kannyman on ollut koulussa ja saanut atk-ajokortinkin, vai onko?

    • En ole excelguru, joten ryhmittäisin koko taulukon uudelleen pistämällä sen A-sarakkeen mukaiseen numerojärjestykseen, jolloin taulukon sisältö näkyisi kuluryhmittäin. Jättäisin alkuperäiset tilinumerot näkyviin (jos niillä on jatkossakin jotain merkitystä) ja lisäisin A:n eteen oman sarakkeen kuluryhmien nimille (hallinto...ym). (ehkä vielä värittäisin kuluryhmille erisävyiset taustavärit). Lisäisin vielä loppuun yhteenlaskusummien viereen sarakkeen, joka kerää välisummia ryhmittäin.Tästä olisi helppo ilman suodatuksiakin tarkkailla ryhmittäin kuluja, koska kokonaiskuva näkyy koko ajan.
      Ryhmien ja niiden summien perusteella olisi helppo laatia kaavio (piirakka tms), jolla eri ryhmien kulut piirtyy kuvaksi.

    • petexi

      Kiitos erinomaisista ratkaisuehdotuksista. Ongelmalliseksi tiliasian tekee se, että tiliajo ajetaan melko usein suoraan kirjanpitojärjestelmästä csv:nä exceliin.

      Olisi helpompaa, jos takana olisi makro, sillloin osoittaisi vain jonkin solun ja makro lähtisi muuttamaan tilinumeroita vastaaviksi tilinimiksi, kunnes tyhjä solu saavutetaan

      • Tämmöinen

        Sub koe()
           R = 1
           Do
              Tili = Cells(R, 1).Value
              If Tili = "" Then Exit Do
              If Tili >= 100 And Tili < 200 Then
                 Cells(R, 1) = "hallinto"
              ElseIf Tili >= 200 And Tili < 300 Then
                 Cells(R, 1) = "huolto"
              ElseIf Tili >= 300 And Tili < 400 Then
                 Cells(R, 1) = "ulkoalueiden hoito"
              Else
                 Cells(R, 1) = "virhe"
              End If
              R = R 1
           Loop
        End Sub


    • petexi

      Erittäin suuri kiitos, toimii kuin Sveitsiläinen kello. Tuosta saa muokkaamalla todella näppärän makron. Toivotaan, että auttaa muitakin, tuollahan voi korvata muitakin, kuin tilejä.

      Kiitos ja kumarrus avusta.

      • petexi

        Muuten osaan muuttaa koodia, mutta miten tuota pitäisi muuttaa, että aloittaisi tilien muuntamisen sanoiksi aina valitusta solusta eli ensin valitsen solun ja sitten ajan makron ja se alkaisi siitä ajaa ajon tilien loppuun asti ?


      • Tämmöinen
        petexi kirjoitti:

        Muuten osaan muuttaa koodia, mutta miten tuota pitäisi muuttaa, että aloittaisi tilien muuntamisen sanoiksi aina valitusta solusta eli ensin valitsen solun ja sitten ajan makron ja se alkaisi siitä ajaa ajon tilien loppuun asti ?

        Alkuun
        R = Selection.Row


      • petexi
        Tämmöinen kirjoitti:

        Alkuun
        R = Selection.Row

        Valitetteávasti ei toiminut , vaikka liitin tuon alkuun. Koodi alla:





        Sub Tilinumerot_nimekkeiksi()

        R = Selection.Row


        Do

        Tili = Cells(R, 1).Value

        If Tili = "" Then Exit Do

        If Tili >= 100 And Tili < 200 Then

        Cells(R, 1) = "Hallinto"


        ElseIf Tili >= 200 And Tili < 300 Then

        Cells(R, 1) = "Huolto"

        ElseIf Tili >= 300 And Tili < 400 Then

        Cells(R, 1) = "Ulkoalueiden hoito"

        Else

        Cells(R, 1) = "Tuntematon tili"
        MsgBox "Löytyi tuntematon tili, korjaisitko ?"

        End If

        R = R 1

        Loop

        End Sub


      • petexi

        Ihme ja kumma , mikään koodissa ei muuttunut, vaikka laitoin alkuun tuon
        "R = Selection.Row", edelleen laski A solusta. Aika kummallista, paljoa en koodista ymmärrä, mutta ei siinä ole enää viittausta a sarakkeeseen ...Olisiko mahdollista saada koko toimiva koodi. Muutenhan tuo toimii loistavasti, mutta sen pitäisi aloittaa aina valitusta solusta alaspäin.


      • Tämmöinen
        petexi kirjoitti:

        Ihme ja kumma , mikään koodissa ei muuttunut, vaikka laitoin alkuun tuon
        "R = Selection.Row", edelleen laski A solusta. Aika kummallista, paljoa en koodista ymmärrä, mutta ei siinä ole enää viittausta a sarakkeeseen ...Olisiko mahdollista saada koko toimiva koodi. Muutenhan tuo toimii loistavasti, mutta sen pitäisi aloittaa aina valitusta solusta alaspäin.

        Merkintä Cells(R,1) tarkoittaa solua rivillä R ja sarakkeessa 1. (Myös tämä käy: Cells(R, "A") ).

        Laittamasi koodi toimii oikein, eli se alkaa tarkistuksen vasta sillä hetkellä aktiivisena olevalta riviltä. Kenties sinulla on koodista kaksi versiota ja kutsut sitä ensimmäistä (alkuperäinen Koe ja ja muokattu Tilinumerot_nimekkeiksi).

        3pointsin Select Case -koodi on sievempi. Koodi ei toimi, koska siinä tilinumeron sijasta testataan rivinumeroa. Siis, rivin
        Select Case ActiveCell.Row
        tilalle tulee
        Select Case ActiveCell.Value

        Lisäksi valitun solun pitää olla A-sarakkeesta, muutoin testatan ja muutetaan väärää tietoa. Alkuun on hyvä lisätä rivi, joka varmistaa, että ollaan A-sarakkeessa:
        Cells(ActiveCell.Row, "A").Select

        Aktiivisen solun hyppyytäminen hidastaa koodia, vaikka tässä tapauksessa sillä ei liene käytännön merkitystä.


      • petexi

        Kokeilin tällä koodilla, mutta ei toimi, kuin A sarakkeessa. Jos vien hiiren vaikka D sarakkeeseen ja týritän ajaa ohjelmaa, ei tapahdu mitään. Poistin kaikki vanhat makrot ja pitäydyin täysin sinun veriossasi, mutta ei toimi...kummallista...alla koodi, jota käytin

        Sub koe()

        R = Selection.Row

        R = 1

        Do

        Tili = Cells(R, 1).Value

        If Tili = "" Then Exit Do

        If Tili >= 100 And Tili < 200 Then

        Cells(R, 1) = "hallinto"

        ElseIf Tili >= 200 And Tili < 300 Then

        Cells(R, 1) = "huolto"

        ElseIf Tili >= 300 And Tili < 400 Then

        Cells(R, 1) = "ulkoalueiden hoito"

        Else

        Cells(R, 1) = "virhe"

        End If

        R = R 1

        Loop

        End Sub


      • Tämmöinen
        petexi kirjoitti:

        Kokeilin tällä koodilla, mutta ei toimi, kuin A sarakkeessa. Jos vien hiiren vaikka D sarakkeeseen ja týritän ajaa ohjelmaa, ei tapahdu mitään. Poistin kaikki vanhat makrot ja pitäydyin täysin sinun veriossasi, mutta ei toimi...kummallista...alla koodi, jota käytin

        Sub koe()

        R = Selection.Row

        R = 1

        Do

        Tili = Cells(R, 1).Value

        If Tili = "" Then Exit Do

        If Tili >= 100 And Tili < 200 Then

        Cells(R, 1) = "hallinto"

        ElseIf Tili >= 200 And Tili < 300 Then

        Cells(R, 1) = "huolto"

        ElseIf Tili >= 300 And Tili < 400 Then

        Cells(R, 1) = "ulkoalueiden hoito"

        Else

        Cells(R, 1) = "virhe"

        End If

        R = R 1

        Loop

        End Sub

        Tarkoitin, että korvaisit rivin R = 1 rivillä R = Selection.Row

        Muuttujaa R käytetään rivilosoittimena. Se saa koodissasi ensin oikean alkuarvon, mutta heti seuraavalla rivillä laitat sen arvoksi ykkösen. Tämä rivi on poistettava. Muuten edellisellä rivillä ei ole meritystä.


    • 3points

      Tämä aloittaa valitusta solusta.

      Sub Main
      do while activecell.value<>""
      select case activecell.row
      case 100 to 199
      activecell.value="hallinto"
      case 200 to 299
      activecell.value="käyttö ja huolto"
      case 300 to 399
      activecell.value= "ulkoalueiden hoito"
      end select
      activecell.offset(1,0).select

      loop
      End Sub

      • petexi

        Yritin tätä, mutta ei tehnyt muuta kuin hyppäsi rivin loppuun.


      • 3points

        Sub Main
        dim solu as range
        set solu=activecell
        print solu.address
        do
        select case solu.value
        case 100 to 199
        solu.value="hallinto"
        case 200 to 299
        solu.value="huolto"
        case 300 to 399
        solu.value= "ulkoalueiden hoito"
        case else exit do
        end select
        set solu=solu.offset(1,0)
        loop
        End Sub


      • petexi

        Moi

        Yritin tätä, mutta ohjelman ajo loppui johonkin virheilmoitukseen, josta kuvakaappaus liitteenä:

        [url]http://aijaa.com/rQeDLy[/url]


      • 3points

        Sub Main

        dim solu as range

        set solu=activecell

        do while solu.value<>""

        select case solu.value

        case 100 to 199

        solu.value="hallinto"

        case 200 to 299

        solu.value="huolto"

        case 300 to 399

        solu.value= "ulkoalueiden hoito"

        end select

        set solu=solu.offset(1,0)

        loop

        End Sub


      • petexi

        Bingo !!!

        Kiitos paljon. Tämä toimi juuri kuten pitää ja on helppoa ylläpitää. Tuo toinen koodi ei ainakaan minulla valitettvasti toiminut, mutta iso kiitos kaikille ongelman ratkaisusta. Tämä on hellppo ja selkeä koodi muihin vastaaviin tarpeisiin Excelissä


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Minkähän takia ns. persuille ei tunnu työ maistuvan?

      Vaikuttavat olevan joutoväkeä syystä tai toisesta  – työttömiä tai työeläkeloisia. Muiden rahoilla pötköttelevää väkeä,
      Maailman menoa
      83
      4493
    2. Olit ihan

      Kiihkona silloin. Sen näki ja lähes tunsi. Ei tainnut olla kaukana et olisit vetänyt lähellesi jos siihen olisi hetki tu
      Ikävä
      26
      3284
    3. Miksiköhän vasemmistossa on niin paljon ns. tapatyöttömiä ja muita köyhiä?

      Tokihan Minja Koskela oli sitä mieltä, että ei terveenkään ihmisen ole pakko tehdä töitä, sitä neuvoa moni vassu noudatt
      Maailman menoa
      40
      2920
    4. Kaipaamasi miehen nimi?

      Ja maakunta tai kaupunki?
      Ikävä
      17
      2772
    5. Trump huonommassa kunnossa kuin Usasta virallisesti sanotaan?

      "Terveys on vakaa mutta ei normaali".Uskallan melkein sanoa,että Trumpin terveydentilaa kaunistellaan.Myös se että se nu
      Maailman menoa
      117
      2737
    6. Oletko keskustellut kaivatustasi muiden

      Kanssa lähiaikoina? Jos, onko keskustelu ollut positiivista tai negatiivista? Vaikuttaako keskustelut mielipiteeseesi ka
      Ikävä
      43
      2597
    7. Kyllä on Vasemmistoliitosta Koskelan johdolla tullut todellinen ääripuolue

      se on niin tulipunainen kuin olla voi, ja selvästi haluaa jatkuvasti eripuraa, ja repiä kansaa kahtia. Siinä on jo vuod
      Maailman menoa
      17
      2559
    8. Suomen veroaste 5 %-yks liian matala

      Palauttamalla kokonaisveroaste 1990-luvun tasolle saadaan hyvinvointivaltion palvelut rahoitettua ilman velan ottoa.
      Maailman menoa
      113
      2295
    9. MTV: Harvinainen haastattelu! Vappu Pimiä kommentoi vihdoinkin uutta TTK-juontajaa

      TTK-juontajaspekuloinnit käyvät edelleen kuumana. Kenet sinä haluaisit uudeksi TTK-juontajaksi? Kommentoi alle! Lue,
      Suomalaiset julkkikset
      14
      2095
    10. Yleveron tuotto siirrettävä S-ryhmälle

      Yleisradio on mukana kansanmurhassa. Tuollaista ei voi tukea verovaroin. S-ryhmä on ainoa selkärankainen iso toimija S
      Maailman menoa
      28
      1737
    Aihe