Helppo Excel makro?

Tarvitsemani makron teko ei onnistu nauhoittamalla, enkä osaa Visual Basic
kieltä yhtään. Voisiko joku auttaa?

Riveillä 1-2 on ensin tekstiä. Riviltä 3 alkaa numerot sarakkeessa B, joita
on muutamia kymmeniä allekkain. Uusimmat tiedot tulevat aina B-sarakkeen
loppuun, jonka jälkeen on tyhjä rivi ja vasta sen jälkeisellä rivillä
tehdään laskutoimitus. Alla malli:

A B C
1 tekstiä 99
2 tekstiä
3 123
4 567
5 9421
6 tyhjä rivi
7 B-sarakkeen viimeinen arvo (tässä B5) - C1 solun arvo

Makron pitäisi etsiä B-sarakkeesta rivi kerrallaan viimeinen solu, jolla on
numeerinen arvo ja vähentää sen sisältämästä luvusta solun C1 sisältämä luku
ja pistää tulos B-sarakkeen viimeisen numereesin arvon sisältävän solun
(tässä B5) jälkeisen tyhjän rivin soluun (tässä B7 soluun).

Lienee helppo tehtävä, jos yhtään osaa Visual Basic -kieltä?
134675
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

tekee pyytämäsi.
Miten muuten numeron syöttö tapahtuu?

Sub Summa()
Dim vika As Double
vika = Range("B1").End(xlDown).Row
Range("B" & vika 1) = ""
Range("B" & vika 2) = Range("B" & vika) - Range("C1")
End Sub

Äänestä
  • Teinköhän jotain väärin vai tuliko makroon bugi?

    Makro ei siis toiminut, vaan herjasi Run-time error '13': Type mismatch. Debug toiminto osoitti vian olevan End Sub riviä edeltävällä rivillä.

    Lukuja olen syöttänyt käsin, lisäten aina tarvittavan määrän tyhjiä rivejä.

    Äänestä

  • Neuvoton kirjoitti:

    Teinköhän jotain väärin vai tuliko makroon bugi?

    Makro ei siis toiminut, vaan herjasi Run-time error '13': Type mismatch. Debug toiminto osoitti vian olevan End Sub riviä edeltävällä rivillä.

    Lukuja olen syöttänyt käsin, lisäten aina tarvittavan määrän tyhjiä rivejä.

    Kokeilin makroa niin, että poistin B-sarakkeen parilta ensimmäiseltä riviltä tekstikentät (B1-B2 soluista), jonka jälkeen makro toimi oikein.

    Oikeasti tekstien pitäisi siinä olla, joten makron pitäisi jättää ne huomioimatta ja aloittaa homma B3-solusta eteenpäin tai vielä parempi, jos se etsisi ensimmäisen numeerisen kentän B-sarakkeesta, josta eteenpäin aloitetaan tyhjän rivin etsintä.

    Onnistuisiko edellä mainitut korjaukset? Kiitos paljon jo tähänastisesta avusta!

    Mielestäni on todella upeata, että löytyy avuliaita kavereita, jotka avustavat ohjelmointiongelmien ratkaisussa.

    Itse osaan kaikenlaista muuta tehdä atk-maailmassa, mutta ohjelmointia ei ole tullut koskaan opeteltua ja se harmittaa, kun säästyisi paljon aikaa, kun osaisi tehdä näppäriä makroja eri tarpeisiin.

    Luulen, että menisi kauan aikaa (jopa vuosia?), ennen kuin oppisi tekemään monipuolisia ja vaativia makroja tuosta vain.

    Katselin aiempia viestejä ja siellä oli hienon näköisiä makroja sinun (Kunde) ja joidenkin muidenkin tekeminä. Minkälainen kokemus sinulla mahtaa olla ohjelmoinnista/makroista, jos saan kysyä?

    Äänestä

  • neuvoton silti kirjoitti:

    Kokeilin makroa niin, että poistin B-sarakkeen parilta ensimmäiseltä riviltä tekstikentät (B1-B2 soluista), jonka jälkeen makro toimi oikein.

    Oikeasti tekstien pitäisi siinä olla, joten makron pitäisi jättää ne huomioimatta ja aloittaa homma B3-solusta eteenpäin tai vielä parempi, jos se etsisi ensimmäisen numeerisen kentän B-sarakkeesta, josta eteenpäin aloitetaan tyhjän rivin etsintä.

    Onnistuisiko edellä mainitut korjaukset? Kiitos paljon jo tähänastisesta avusta!

    Mielestäni on todella upeata, että löytyy avuliaita kavereita, jotka avustavat ohjelmointiongelmien ratkaisussa.

    Itse osaan kaikenlaista muuta tehdä atk-maailmassa, mutta ohjelmointia ei ole tullut koskaan opeteltua ja se harmittaa, kun säästyisi paljon aikaa, kun osaisi tehdä näppäriä makroja eri tarpeisiin.

    Luulen, että menisi kauan aikaa (jopa vuosia?), ennen kuin oppisi tekemään monipuolisia ja vaativia makroja tuosta vain.

    Katselin aiempia viestejä ja siellä oli hienon näköisiä makroja sinun (Kunde) ja joidenkin muidenkin tekeminä. Minkälainen kokemus sinulla mahtaa olla ohjelmoinnista/makroista, jos saan kysyä?

    Tekemäni makro on tunteeton solun sisällölle,sillä se vain etsii viimeisen käytössä olevan solun sarakkeessa B.Tämän jälkeen lisätään vähennyslasku

    No seuraava makro kysyy syötettävän luvun ja hyvöksyy vain luvun ja jos syötät virheellisen arvon niin antaa virheilmoituksen.
    periaate sama kuin ekassa makrossa
    etsii viimeisen käytössä olevan solun
    lisää seuraavaan alempaan soluun luvun
    tyhjentää seuraavan alemman solun(edellisen lopputulos)
    lisää seuraavaan alempaan vähennyslaskun tuloksen

    Muihin kysymyksiin vastaan ,että täysipainoisesti reilut 5 vuotta olen ohjelmoinut CAD/CAM ohjelmien parissa ja Exceliä tulee käytettyä paljon noiden systeemien integroimisessa(tuotannonhallinta tilauksesta-> kirjanpitoon). Vba:n avulla Excelillä voi tehdä mitä vaan...

    Äänestä

  • neuvoton silti kirjoitti:

    Kokeilin makroa niin, että poistin B-sarakkeen parilta ensimmäiseltä riviltä tekstikentät (B1-B2 soluista), jonka jälkeen makro toimi oikein.

    Oikeasti tekstien pitäisi siinä olla, joten makron pitäisi jättää ne huomioimatta ja aloittaa homma B3-solusta eteenpäin tai vielä parempi, jos se etsisi ensimmäisen numeerisen kentän B-sarakkeesta, josta eteenpäin aloitetaan tyhjän rivin etsintä.

    Onnistuisiko edellä mainitut korjaukset? Kiitos paljon jo tähänastisesta avusta!

    Mielestäni on todella upeata, että löytyy avuliaita kavereita, jotka avustavat ohjelmointiongelmien ratkaisussa.

    Itse osaan kaikenlaista muuta tehdä atk-maailmassa, mutta ohjelmointia ei ole tullut koskaan opeteltua ja se harmittaa, kun säästyisi paljon aikaa, kun osaisi tehdä näppäriä makroja eri tarpeisiin.

    Luulen, että menisi kauan aikaa (jopa vuosia?), ennen kuin oppisi tekemään monipuolisia ja vaativia makroja tuosta vain.

    Katselin aiempia viestejä ja siellä oli hienon näköisiä makroja sinun (Kunde) ja joidenkin muidenkin tekeminä. Minkälainen kokemus sinulla mahtaa olla ohjelmoinnista/makroista, jos saan kysyä?

    Ei ollut kirjoitusvirhe, koska kopion copy-pastella makron täältä exceliin.

    Outoa, että homma toimii uudella excel-lomakkeella ja siihen testimielessä tehdyilä riveillä, niin kuin sanoit (myös teksirivien kanssa), mutta oikealla aineistolla päätyy aina aiemmin ilmoittamaani virheilmoitukseen. Solujen muotoiluja ym. seikkoja yritin muuttaa, mutta niillä ei ollut vaikutusta, virheilmoitus tuli aina vain.

    Taidanpa jäädä odottelemaan uutta versiota, jos sellaisen ehtisit jossain välissä tehdä?

    Äänestä

  • outo virhe kirjoitti:

    Ei ollut kirjoitusvirhe, koska kopion copy-pastella makron täältä exceliin.

    Outoa, että homma toimii uudella excel-lomakkeella ja siihen testimielessä tehdyilä riveillä, niin kuin sanoit (myös teksirivien kanssa), mutta oikealla aineistolla päätyy aina aiemmin ilmoittamaani virheilmoitukseen. Solujen muotoiluja ym. seikkoja yritin muuttaa, mutta niillä ei ollut vaikutusta, virheilmoitus tuli aina vain.

    Taidanpa jäädä odottelemaan uutta versiota, jos sellaisen ehtisit jossain välissä tehdä?

    ei tuu vanhuus näköjään yksin...
    unohdin liitttää makron edelliseen vastaukseeni
    tässä siis toi puuttuva makro

    Sub Summa()
    Dim vika As Double
    Dim luku As Double
    On Error GoTo virhe:
    alku:
    luku = InputBox("Anna luku")
    vika = Range("B1").End(xlDown).Row
    Range("B" & vika 1) = luku
    Range("B" & vika 2) = ""
    Range("B" & vika 3) = Range("B" & vika 1) - Range("C1")
    Exit Sub
    virhe:
    MsgBox "sinun on annettava luku", vbInformation
    Exit Sub
    End Sub

    Äänestä

  • Kunde kirjoitti:

    ei tuu vanhuus näköjään yksin...
    unohdin liitttää makron edelliseen vastaukseeni
    tässä siis toi puuttuva makro

    Sub Summa()
    Dim vika As Double
    Dim luku As Double
    On Error GoTo virhe:
    alku:
    luku = InputBox("Anna luku")
    vika = Range("B1").End(xlDown).Row
    Range("B" & vika 1) = luku
    Range("B" & vika 2) = ""
    Range("B" & vika 3) = Range("B" & vika 1) - Range("C1")
    Exit Sub
    virhe:
    MsgBox "sinun on annettava luku", vbInformation
    Exit Sub
    End Sub

    Kiitos paljon, homma toimii juuri niin, kuin pyysin, mutta nyt huomasin alkuperäisen pyyntöni olleen puutteellinen kokonaisuuden kannalta, kun yritin liikaa yksinkertaistaa asiaa.

    Lähtötilanne:

    esim:

    _ a b c d e f g
    1 5 7 6 2 3 kaava kaava
    2 1 9 2 3 4 kaava kaava
    3
    4 yht 3 sum(d1:d3) sum(e1:e3) jne..

    B4-solussa lasketaan B2-C1 (tulos 3).

    Makro lisäisi B3-soluun uuden luvun ja tekisi yhden tyhjän rivin lisää, jolloinka uusi lasku tehtäisiin solussa B5 ja samalla A4, D4 jne. soluissa olevat tekstit/laskut siirtyisivät rivin alaspäin.

    Makron suorituksen jälkeen:

    _ a b c d e f g
    1 5 7 6 2 3 kaava kaava
    2 1 9 2 3 4 kaava kaava
    3 46 4 5 6 7 kaava kaava
    4
    5 yht 40 sum(d1:d4) sum(e1:e4) jne..

    B5-solussa lasketaan B2-C1 (tulos 40)

    Homma pitäisi kai tehdä niin, että ensin lisätään tyhjä rivi ja sitten vasta uusi luku vanhojen perään, jonka jälkeen laskutoimitus.

    Tämä siksi, että D,E jne. solujen lopussa on sum-funktio tai joku muu funktio (esim average), joka laskee aina koko sarakkeen yhteen siihen asti esim. D5-solussa sum(D1:D4).

    F ja G sarakkeissa lasketaan poikittain asioita, esim F3 laskee C3 ja D3 välisiä suhteita.

    Lisäongelmana on se, että lukuja pitäisi syöttää B-sarakkeen viimeisen kohdan lisäksi myös A,C,D ja E sarakkeen viimeiseksi. A-sarakkeessa on päivämäärä ja muissa sarakkeissa lukuja.

    Onnistuisiko tälläinen muutos makroon?

    Äänestä

  • onnistuisiko muutos? kirjoitti:

    Kiitos paljon, homma toimii juuri niin, kuin pyysin, mutta nyt huomasin alkuperäisen pyyntöni olleen puutteellinen kokonaisuuden kannalta, kun yritin liikaa yksinkertaistaa asiaa.

    Lähtötilanne:

    esim:

    _ a b c d e f g
    1 5 7 6 2 3 kaava kaava
    2 1 9 2 3 4 kaava kaava
    3
    4 yht 3 sum(d1:d3) sum(e1:e3) jne..

    B4-solussa lasketaan B2-C1 (tulos 3).

    Makro lisäisi B3-soluun uuden luvun ja tekisi yhden tyhjän rivin lisää, jolloinka uusi lasku tehtäisiin solussa B5 ja samalla A4, D4 jne. soluissa olevat tekstit/laskut siirtyisivät rivin alaspäin.

    Makron suorituksen jälkeen:

    _ a b c d e f g
    1 5 7 6 2 3 kaava kaava
    2 1 9 2 3 4 kaava kaava
    3 46 4 5 6 7 kaava kaava
    4
    5 yht 40 sum(d1:d4) sum(e1:e4) jne..

    B5-solussa lasketaan B2-C1 (tulos 40)

    Homma pitäisi kai tehdä niin, että ensin lisätään tyhjä rivi ja sitten vasta uusi luku vanhojen perään, jonka jälkeen laskutoimitus.

    Tämä siksi, että D,E jne. solujen lopussa on sum-funktio tai joku muu funktio (esim average), joka laskee aina koko sarakkeen yhteen siihen asti esim. D5-solussa sum(D1:D4).

    F ja G sarakkeissa lasketaan poikittain asioita, esim F3 laskee C3 ja D3 välisiä suhteita.

    Lisäongelmana on se, että lukuja pitäisi syöttää B-sarakkeen viimeisen kohdan lisäksi myös A,C,D ja E sarakkeen viimeiseksi. A-sarakkeessa on päivämäärä ja muissa sarakkeissa lukuja.

    Onnistuisiko tälläinen muutos makroon?

    voisitko lähettää mallin ja ohjeet e-mailina- helpompi ymmärtää mitä tahdot...
    en nyt ihan ymmärtänyt mitä pitäisi tehdä
    [email protected]

    Äänestä

  • Kunde kirjoitti:

    voisitko lähettää mallin ja ohjeet e-mailina- helpompi ymmärtää mitä tahdot...
    en nyt ihan ymmärtänyt mitä pitäisi tehdä
    [email protected]

    Voin lähettää postiakin, mutta yritän vielä kerran selventää tilannetta täällä.

    Etsitään B-sarakkeen viimeinen solu, jossa on jokin arvo ennen tyhjää riviä. Tyhjän rivin jälkeisellä rivillä on tekstiä ja kaavoja.

    Lisätään yksi tyhjä rivi edellä mainitun viimeisen arvon sisältävän solun jälkeen (joka oli siis ennen tyhjää riviä) ja kopioidaan ensimmäiselle tyhjälle riville kaavat ja muotoilut viimeiseltä riviltä, joilla merkintöjä on (koko rivi kaavoineen ja muotoiluineen).

    Tämän jälkeen vain kysytään A,B,C,D ja E soluihin tiedot. A-solussa on päiväys ja muissa lukuarvo. Kaikki kysytyt tiedot laitetaan aina oman sarakkeensa viimeiseksi ennen tyhjää riviä.

    Sitten lasketaan B-sarakkeen viimeisen solun arvo miinus C1-solun arvo ja sijoitetaan tieto tyhjän rivin jälkeiseen soluun. Esim. B4 soluun tulee uusi arvo (jonka makro kysyy), niin laskutoimituksen tulos tulee silloin tyhjän viitos rivin jälkeen B6 soluun.

    esim.

    rivi 1 tässä on dataa
    rivi 2 tyhjä rivi
    rivi 3 täällä on tekstiä ja kaavoja

    makro luo uuden rivin 1 rivin jälkeen

    rivi 1 tässä on dataa
    rivi 2 tähän tulee makron kysymät tiedot
    rivi 3 tyhjä rivi
    rivi 4 täällä on tekstiä ja kaavoja ja tämän rivin B-soluun tulee laskutoimitus B-viimeinen solu miinus C1-solu

    Ideana on siis se, että makro lisäämä rivi ei sotke olemassa olevia laskutoimituksia, joita tehdään pystysuunnassa ja vaakasuunnassa.

    Äänestä

  • Asiaan kirjoitti:

    Voin lähettää postiakin, mutta yritän vielä kerran selventää tilannetta täällä.

    Etsitään B-sarakkeen viimeinen solu, jossa on jokin arvo ennen tyhjää riviä. Tyhjän rivin jälkeisellä rivillä on tekstiä ja kaavoja.

    Lisätään yksi tyhjä rivi edellä mainitun viimeisen arvon sisältävän solun jälkeen (joka oli siis ennen tyhjää riviä) ja kopioidaan ensimmäiselle tyhjälle riville kaavat ja muotoilut viimeiseltä riviltä, joilla merkintöjä on (koko rivi kaavoineen ja muotoiluineen).

    Tämän jälkeen vain kysytään A,B,C,D ja E soluihin tiedot. A-solussa on päiväys ja muissa lukuarvo. Kaikki kysytyt tiedot laitetaan aina oman sarakkeensa viimeiseksi ennen tyhjää riviä.

    Sitten lasketaan B-sarakkeen viimeisen solun arvo miinus C1-solun arvo ja sijoitetaan tieto tyhjän rivin jälkeiseen soluun. Esim. B4 soluun tulee uusi arvo (jonka makro kysyy), niin laskutoimituksen tulos tulee silloin tyhjän viitos rivin jälkeen B6 soluun.

    esim.

    rivi 1 tässä on dataa
    rivi 2 tyhjä rivi
    rivi 3 täällä on tekstiä ja kaavoja

    makro luo uuden rivin 1 rivin jälkeen

    rivi 1 tässä on dataa
    rivi 2 tähän tulee makron kysymät tiedot
    rivi 3 tyhjä rivi
    rivi 4 täällä on tekstiä ja kaavoja ja tämän rivin B-soluun tulee laskutoimitus B-viimeinen solu miinus C1-solu

    Ideana on siis se, että makro lisäämä rivi ei sotke olemassa olevia laskutoimituksia, joita tehdään pystysuunnassa ja vaakasuunnassa.

    helpoin tapa lienee tehdä lomake. lisää sinne 5 textboxia ja 2 commandbuttonia ja alleolevat koodit niihin(oletusnimet)

    Private Sub CommandButton1_Click()
    End
    End Sub
    Private Sub CommandButton2_Click()
    Dim vika As Double
    vika = Range("B1").End(xlDown).Row
    Range("A" & vika 1) = TextBox1
    Range("B" & vika 1) = TextBox2
    Range("C" & vika 1) = TextBox3
    Range("D" & vika 1) = TextBox4
    Range("E" & vika 1) = TextBox5
    Range("B" & vika 2) = Range("B" & vika 1) - Range("C1")
    Range("B" & vika 2).EntireRow.Insert Shift:=xlUp
    End Sub
    Private Sub TextBox1_AfterUpdate()
    If Not IsDate(TextBox1) Then
    MsgBox "sinun on annettava päiväys oikeassa muodossa", vbInformation
    TextBox1 = ""
    TextBox1.SetFocus
    End If
    End Sub
    Private Sub TextBox2_AfterUpdate()
    If Not IsNumeric(TextBox2) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox2 = ""
    TextBox2.SetFocus
    End If
    End Sub

    Private Sub TextBox3_AfterUpdate()
    If Not IsNumeric(TextBox3) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox3 = ""
    TextBox3.SetFocus
    End If
    End Sub

    Private Sub TextBox4_AfterUpdate()
    If Not IsNumeric(TextBox4) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox4 = ""
    TextBox4.SetFocus
    End If
    End Sub
    Private Sub TextBox5_AfterUpdate()
    If Not IsNumeric(TextBox5) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox5 = ""
    TextBox5.SetFocus
    End If
    End Sub

    tee taulukkoon nappi ja liitä siihen koodi

    Private Sub CommandButton1_Click()
    UserForm1.Show
    End Sub

    koodissa lisää muut kaavat tyyliin (B-sarakkeen laskutoimitus)
    Range("B" & vika 2) = Range("B" & vika 1) - Range("C1")

    eiköhän se noilla eväillä jo synny sultakin

    Äänestä

  • Kunde kirjoitti:

    helpoin tapa lienee tehdä lomake. lisää sinne 5 textboxia ja 2 commandbuttonia ja alleolevat koodit niihin(oletusnimet)

    Private Sub CommandButton1_Click()
    End
    End Sub
    Private Sub CommandButton2_Click()
    Dim vika As Double
    vika = Range("B1").End(xlDown).Row
    Range("A" & vika 1) = TextBox1
    Range("B" & vika 1) = TextBox2
    Range("C" & vika 1) = TextBox3
    Range("D" & vika 1) = TextBox4
    Range("E" & vika 1) = TextBox5
    Range("B" & vika 2) = Range("B" & vika 1) - Range("C1")
    Range("B" & vika 2).EntireRow.Insert Shift:=xlUp
    End Sub
    Private Sub TextBox1_AfterUpdate()
    If Not IsDate(TextBox1) Then
    MsgBox "sinun on annettava päiväys oikeassa muodossa", vbInformation
    TextBox1 = ""
    TextBox1.SetFocus
    End If
    End Sub
    Private Sub TextBox2_AfterUpdate()
    If Not IsNumeric(TextBox2) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox2 = ""
    TextBox2.SetFocus
    End If
    End Sub

    Private Sub TextBox3_AfterUpdate()
    If Not IsNumeric(TextBox3) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox3 = ""
    TextBox3.SetFocus
    End If
    End Sub

    Private Sub TextBox4_AfterUpdate()
    If Not IsNumeric(TextBox4) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox4 = ""
    TextBox4.SetFocus
    End If
    End Sub
    Private Sub TextBox5_AfterUpdate()
    If Not IsNumeric(TextBox5) Then
    MsgBox "sinun on annettava luku", vbInformation
    TextBox5 = ""
    TextBox5.SetFocus
    End If
    End Sub

    tee taulukkoon nappi ja liitä siihen koodi

    Private Sub CommandButton1_Click()
    UserForm1.Show
    End Sub

    koodissa lisää muut kaavat tyyliin (B-sarakkeen laskutoimitus)
    Range("B" & vika 2) = Range("B" & vika 1) - Range("C1")

    eiköhän se noilla eväillä jo synny sultakin

    Täytyy myöntää, että nyt loppuu osaaminen kesken.

    Makronapin onnistuin tekemään ja kytkemään siihen makron, mutta lomakkeet ja textboxit saivat minut hämmentymään.

    Normaalisti textbox on vain kehystetty alue, johon voi vapaasti kirjoittaa tekstiä. Tässä lienee kyse jostain muusta textboxista?

    Lomake on varmaankin syöttölomake? Olen myös lomakkeiden kohdalla aika pihalla eli kuinka niitä tehdään.

    Neuvoisitko vielä lisää?

    Täytyy muistaa, että olen makrojen kanssa hyvin noviisi. Osaan lähinnä nauhoitella niitä ja ehkä aivan vähän muokata, mutten sen enempää (vielä).

    Tarkoituksena on kyllä opetella edes vähän alkeita, ettei sormi menisi suuhun heti kättelyssä.

    Äänestä

  • jonkin verrran kirjoitti:

    Täytyy myöntää, että nyt loppuu osaaminen kesken.

    Makronapin onnistuin tekemään ja kytkemään siihen makron, mutta lomakkeet ja textboxit saivat minut hämmentymään.

    Normaalisti textbox on vain kehystetty alue, johon voi vapaasti kirjoittaa tekstiä. Tässä lienee kyse jostain muusta textboxista?

    Lomake on varmaankin syöttölomake? Olen myös lomakkeiden kohdalla aika pihalla eli kuinka niitä tehdään.

    Neuvoisitko vielä lisää?

    Täytyy muistaa, että olen makrojen kanssa hyvin noviisi. Osaan lähinnä nauhoitella niitä ja ehkä aivan vähän muokata, mutten sen enempää (vielä).

    Tarkoituksena on kyllä opetella edes vähän alkeita, ettei sormi menisi suuhun heti kättelyssä.

    excelissä paina näppäinyhdistelmä ALT F11 ja VBA editori aukeaa.Menusta Insert lisää userform ja näytölle tulee lomake. Työkaluvalikosta(toolbox) valitset textboxin(toista 5x) ja raahat sen lomakkeelle samoin commandbuttonin(toista(2x) kanssa.
    Tuplaklikkaa sitten jossakin kohtaa lomakkeella(älä kuitenkaan ohjektien päällä) ja lomakkeen moduuli aukeaa kopioi koodi sinne ja varmista,että nimet täsmää.Voit tietenkin nimetä objektit omilla nimillä.Objektien koodiin pääset lomakkelta tuplaklikkaamalla sen päällä
    Ja napin koodi viittaa userform1, jolla lomake aukeaa.
    eiköhän se siitä

    Äänestä

  • Kunde kirjoitti:

    excelissä paina näppäinyhdistelmä ALT F11 ja VBA editori aukeaa.Menusta Insert lisää userform ja näytölle tulee lomake. Työkaluvalikosta(toolbox) valitset textboxin(toista 5x) ja raahat sen lomakkeelle samoin commandbuttonin(toista(2x) kanssa.
    Tuplaklikkaa sitten jossakin kohtaa lomakkeella(älä kuitenkaan ohjektien päällä) ja lomakkeen moduuli aukeaa kopioi koodi sinne ja varmista,että nimet täsmää.Voit tietenkin nimetä objektit omilla nimillä.Objektien koodiin pääset lomakkelta tuplaklikkaamalla sen päällä
    Ja napin koodi viittaa userform1, jolla lomake aukeaa.
    eiköhän se siitä

    Nyt ollaan jo lähellä täysin toimivaa!

    Syöttölomake toimii hienosti ja luvut tulevat oikeisiin paikkoihin.

    En vain osannut lisätä F ja G soluissa olevia kaavoja makroon. Ajatellaan, että vikalla rivillä (olkoon se vaikka rivi 5). F5-solussa on kaava D5/C5*100 ja G5-solussa on kaava E5/D5.

    Mikäli mahdollista, niin nämä kaavat saisivat näkyä, jos ko. soluja käy katsomassa eli makro ei toisi pelkkää laskun tulosta soluun.

    Nyt makro tuo hienosti riville 5, A-E soluihin arvot syöttölomakkeelta. Pitäisi saada myös kaavat F ja G -soluihin.

    Toinen ongelma liittyy viimeisen rivin jälkeisen tyhjän rivin jälkeiseen riviin (tässä rivi 7), jossa lasketaaan sum tai average funktioilla sarakkeita pystysuunnassa. Esim. D7-solussa kaava sum(d3:d6).

    Kun makro lisää uudet arvot esim. vitos-riville, niin sum(d3:d6) ei muutu eli muutaman lisäyksen jälkeen rivejä voi olla vaikka 10, mutta summa laskee edelleen d3:d6 väliä.

    Mikäli käsin lisää tyhjän rivin, niin excel osaa sen automaattisesti huomioida eri kaavoissa.

    Makron lisätessä rivin, näin ei näyttäisi käyvän..

    Äänestä

Kommentoi aloitusta


En osaa itse tehdä kirjoitti:

Tarvitsemani makron teko ei onnistu nauhoittamalla, enkä osaa Visual Basic
kieltä yhtään. Voisiko joku auttaa?

Riveillä 1-2 on ensin tekstiä. Riviltä 3 alkaa numerot sarakkeessa B, joita
on muutamia kymmeniä allekkain. Uusimmat tiedot tulevat aina B-sarakkeen
loppuun, jonka jälkeen on tyhjä rivi ja vasta sen jälkeisellä rivillä
tehdään laskutoimitus. Alla malli:

A B C
1 tekstiä 99
2 tekstiä
3 123
4 567
5 9421
6 tyhjä rivi
7 B-sarakkeen viimeinen arvo (tässä B5) - C1 solun arvo

Makron pitäisi etsiä B-sarakkeesta rivi kerrallaan viimeinen solu, jolla on
numeerinen arvo ja vähentää sen sisältämästä luvusta solun C1 sisältämä luku
ja pistää tulos B-sarakkeen viimeisen numereesin arvon sisältävän solun
(tässä B5) jälkeisen tyhjän rivin soluun (tässä B7 soluun).

Lienee helppo tehtävä, jos yhtään osaa Visual Basic -kieltä?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu