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
Excel guruille makrohaaste, jota en itse osaa
19
<50
Vastaukset
- 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.RowValitetteá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 SubTarkoitin, 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
Lavrov suivaantui Stubbille perustellusti.
Lavrov perusteli suivaantumistaan tosiasioilla Suomen tarinasta sotiemme jälkeen, tutkija Tynkkynen ja pankkihenkilö Sol6062426Sukupuolia on vain kaksi- kohukassista tuli kova tuomio perheenisälle oikeudessa.
https://www.iltalehti.fi/kotimaa/a/4d4db0d9-4dda-4ba6-a699-25d725683ad6 Miten näin normaalista kassissa olevasta tekstis4131925Eronnut Janni Hussi palaa julkisuuteen - Aloittaa uudessa työssä, joka on aivan uusi pesti Suomessa
Janni Hussi on saanut viime aikoina kohujulkisuutta, kun hänen ja Joel Harkimon avioliitto päättyi eroon kesällä 2025. H231760Se ei ihan oikeasti vaatisi kuin yhden
Tekstiviestin... Jos rakastat minua vielä toivoisin että laittaisit minulle viestiä. Rakastatko? Oletko oikeasti niin pe641458JM lukkoliike
Mihin helvetin kuuseen te olette tällä kertaa siirtäneet Lukkoliikkeenne? Sen kerran kun ensimmäisen ja viimesen kerran191406- 651301
- 1221184
Helena Ahti-Hallberg uudessa elämäntilanteessa - Paljastaa eläkehaaveestaan Espanjassa: "Mä.."
Oi, kuulostaa ihanalta eläkepäivillä! Helena Ahti-Hallberg on ostanut kakkoskodin Espanjasta ja hänellä on puolisonsa ka22960Pankin avajaiset
Osuuspankin uuden toimitilan viralliset avajaiset vetävät väkeä. Kyllä oli outo nauhan leikkaus, kun leikkaajat pyllisti16938Miten kesäsi meni?
Oletko tyytyväinen siihen? Oliko kaivattusi mielessäsi? Lähennyitkö vai etäännyitkö hänen kanssaan?66853