Ensimmäinen nolla puuttuu solusta tulostettaessa (makro)

Moi!

Mulla ko laskukaava (makro) Excelissä. Voitteko kertoa miten muutan koodia, että ohjelma tulostaisi D11-solussa myös ensimmäisenä numerona olevan nollan? Nyt ensimmäinen nolla puuttuu...
-----------------------------------------------------
Sub Sarjanumero_tulostus()


' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Dim Arvo, Loppu As String

Dim Alku As Long
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
Arvo = 1
Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

Range("D11").Value = Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Do While Arvo <= (Loppu - 1)
'Range("C5").Value = Alku

Range("D11").Value = Arvo Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Arvo = Arvo 1
On Error GoTo 0
Loop
MsgBox ("Tulostus valmis"), 64, "Huomautus!"

' toimii

End Sub
35698
Äänestä

Muut lukivat myös

Vastaukset 35

Vanhimmat

Pyytäisin ystävällisesti asiallisia kommentteja/vastauksia/neuvoja...

Äänestä

Pitäisi olla function eikä sub. Etunollat saa muuttamalla funktion sisältävän solun muotoilua, jos funktio palauttaa soluun numeerisen arvon.

Muitakin tapoja on riippuen vähän käyttötarkoituksesta. https://excelchamps.com/blog/leading-zeros/

Äänestä

Sarja- ja puhelinnumerot, varaosanumerot yms. millä ei lasketa, pitää määrittää tekstiksi, eikä luvuiksi jo solumäärityksissä.

Äänestä

Itse en osaa, joten voisitko ystävällisesti kertoa miten muutan ko koodia? Kiitos jo etukäteen...

Äänestä
  • Opettele. Kaikkea ei maailmassa saa valmiina.

    Äänestä

Jos se Sub()ista tuleva numero on vaikka solussa B3, piilota se tulostuksessa ja kirjoita viereen tulostukseen apusarake kaavalla =TEKSTI(B3;"000000") olettaen että B3:n luvun pituus on 5 merkkiä. Kuusi nollaa merkkaa siis että eteen laitetaan yksi nolla kyseiseen soluun.

Äänestä

Laskurin kuuluu olla kokonaisluku, sarjanumeron merkkijono.

Alkunollat poistuvat kun sarjanumeroa käsitellään lukuna. On otettava ylös sarjanumeron pituus ja lisättävä erikseen mahdolliset alkunollat lukuarvon eteen erikseen.

Tulostusta ym. ei kannata jakaa moneen paikkaan, vaan vain Do-lauseen sisään. Aloita laskuri nollasta ja lopetusehdoksi <= määrä.

Äänestä

Alkuperäinen kysyjä kysyy. Eli vieläkään en saa onnistumaan, joten olisiko mahdollista että joku osaaja voisi auttaa ja antaa ehjää koodia...

Olisin todella kiitollinen.

Äänestä
  • Oletetaan, että sarjanumero koostuu vain merkeistä 0...9.

    Sub Sarjanumero_tulostus()

    ' Tulostetaan haluttu määrä sarjanumeroita
    ' määriteltyyn soluun
    ' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

        Set solu = Range("D11")
        solu.NumberFormat = "@"

        Dim Alku As String
        Alku = InputBox("Anna sarjanumero mistä aloitetaan")
        pituus = Len(Alku)
        Arvo = Val(Alku)
        lkm = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

        For i = 0 To lkm - 1
            solu.Value = Right(String(pituus, "0") & Arvo   i, pituus)
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Next i

        MsgBox ("Tulostus valmis"), 64, "Huomautus!"

    End Sub

    Äänestä

  • Solun format =text
    Ja tällä tulostus
    Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")

    Äänestä

Hei! Testasin tätä koodia ja heti ohjelmaa ajaessa (ctrl Q) ilmoittaa, että soluja ei löytynyt? Mikä on väärin? Apuja tarvitaan, itsellä ei osaamista/taitoa...

--------------------------------


Sub Sarjanumero_tulostus()

' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Set solu = Range("D11")
solu.NumberFormat = "@"

Dim Alku As String
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
pituus = Len(Alku)
Arvo = Val(Alku)
lkm = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

For i = 0 To lkm - 1
solu.Value = Right(String(pituus, "0") & Arvo i, pituus)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next i

MsgBox ("Tulostus valmis"), 64, "Huomautus!"

End Sub

Äänestä

Korjausta. Siis tuolla edellisellä koodilla toimii, mutta edelleen tulostettaessa solusta D11 puuttuu numerosarjan alusta kaikki nollat (eli jos olen kirjoittanut 00100, niin tulostaa 100).

Äänestä
  • Laitaa syöttäessä heittomerkki (') eteen. Silloin Excel pitää luvun merkkijonona.

    Äänestä

  • Tällainen toimii, kute kerroin jo aikojasitten.
    Solun format =text
    Ja tällä tulostus
    Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")

    Äänestä

Ei onistu jos laittaa esim '000123

Äänestä

Mikähän tässä vielä on väärin?

---------------------------------------

Sub Sarjanumero_tulostus()


' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Dim Arvo, Loppu As Integer
Dim Alku As Long
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
Arvo = 1
Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")

Do While Arvo <= (Loppu - 1)
'Range("C5").Value = Alku

Range("D11").Value = Arvo Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Arvo = Arvo 1
On Error GoTo 0
Loop
MsgBox ("Tulostus valmis"), 64, "Huomautus!"

' toimii

End Sub

Äänestä
  • Käytä Copy-pastea

    Äänestä

Jos etunollat jossain vaiheessa katoaa, niin solu on muuttunut numeeriseen muotoon. Tarkasta siis että tulostus on aina teksimuotoista.

Äänestä

Tuolla alimmalla koodilla ei tulosta ollenkaan ja ohjelma tuo välillä nollia numerosarjan eteen ja välillä taas ei. Mikähän tuossa on vikana?

Äänestä
  • Kuten sanottu tuossa edellä, niin solu on silloin numeerisessa muodossa.

    Äänestä

  • Anonyymi kirjoitti:

    Kuten sanottu tuossa edellä, niin solu on silloin numeerisessa muodossa.

    Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.

    Äänestä

  • Anonyymi kirjoitti:

    Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.

    Molemmista listaksistasi puuttuu rivejä. Käytä copy-pastea.

    Äänestä

  • Anonyymi kirjoitti:

    Molemmista listaksistasi puuttuu rivejä. Käytä copy-pastea.

    Korjaan. Jälkimmäisestä puuttuu rivi
    solu.NumberFormat = "@"

    Äänestä

  • Anonyymi kirjoitti:

    Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.

    Hoitaa kyllä, jos se on tehty oikein. Makron pitää siis muuttaa solut aina oikeaan muotoon. Kiinnitä huomio siis siihen.

    Äänestä

Ei toimi vieläkään tulostus tällä koodilla, jotain on väärin...
Pyytää kyllä ensin "Anna sarjanumero" ja sen jälkeen pyytää "Anna tulostettavien sarjanumeroiden määrä" ja sitten tulee heti ilmoituslaatikko, että "Huomautus, tulostus valmis" ja tulostimelle ei kumminkaan mene tulostuskäskyä? Ainakaan ei tulosta mitään.

--------------------------------------

Sub Sarjanumero_tulostus()


' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Dim Arvo, Loppu As Integer
Dim Alku As Long
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
Arvo = 1
Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

Set solu = Range("D11")
solu.NumberFormat = "@"

Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "0000")

Do While Arvo <= (Loppu - 1)
'Range("C5").Value = Alku

Range("D11").Value = Arvo Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Arvo = Arvo 1
On Error GoTo 0
Loop
MsgBox ("Tulostus valmis"), 64, "Huomautus!"

' toimii

End Sub

Äänestä
  • Onko sulla varmasti oikea ikkuna aktiivisena? Kokeile vaihtaa printoutiin sen worksheetin nimi, jossa solukin on. Activesheettiäkin voi tietty kokeilla.

    Äänestä


En saa onnistumaan =(
Tarvin lisää apuja (valmista koodia)...

Äänestä
  • Mitä olet tekemässä? Tarvitset samaan soluun monta lukua, jos oikein ymmärsin? Peräkkäin? Alekkain?

    Äänestä

  • Jos Pythoni taipuu, niin siinä voi tehdä esim. näin:

    for i in range(0,13000,777):
        print('{0:0{width}}'.format(i, width=5))

    00000
    00777
    01554
    02331
    03108
    03885
    04662
    05439
    06216
    06993
    07770
    08547
    09324
    10101
    10878
    11655
    12432

    Äänestä

  • Valmis koodi on annettu.

    Laita tulostusrivi kommentiksi:
    ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Paina seuraavan rivin kohdalla F9 (vasemmalle tulee punainen pallo)

    Kun ohjelma pysähtyy, mitä on solussa D11?
    Jatka kierros kerrallaan painamalla F5.

    Äänestä

  • Anonyymi kirjoitti:

    Valmis koodi on annettu.

    Laita tulostusrivi kommentiksi:
    ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Paina seuraavan rivin kohdalla F9 (vasemmalle tulee punainen pallo)

    Kun ohjelma pysähtyy, mitä on solussa D11?
    Jatka kierros kerrallaan painamalla F5.

    ActiveWindow viittaa ehkä väärään ikkunaan. Mitä MsgBox ActiveWindow.Caption näyttää?

    Äänestä

Pythoni ei valitettavasti taivu... =(

Äänestä

ei ole virhetarkastelua lisättynä
inputboxissa on nyt sallittu vain numerot ja sen virhettä vo käsitellä helpostikini
Sub Tulosta()
Dim Alku As Long
Dim Loppu As Long
Dim i As Long
Alku = Application.InputBox("Anna sarjanumero mistä aloitetaan", 1)
Loppu = Application.InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ", 1)
For i = Alku To Alku Loppu
Range("D11") = Format(i, "0000")
Range("D11").NumberFormat = "@"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next
MsgBox ("Tulostus valmis"), 64, "Huomautus!"
End Sub

Äänestä

Ketjusta on poistettu 1 sääntöjenvastainen viesti.

Kommentoi aloitusta


Anonyymi kirjoitti:

Moi!

Mulla ko laskukaava (makro) Excelissä. Voitteko kertoa miten muutan koodia, että ohjelma tulostaisi D11-solussa myös ensimmäisenä numerona olevan nollan? Nyt ensimmäinen nolla puuttuu...
-----------------------------------------------------
Sub Sarjanumero_tulostus()


' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Dim Arvo, Loppu As String

Dim Alku As Long
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
Arvo = 1
Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

Range("D11").Value = Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Do While Arvo <= (Loppu - 1)
'Range("C5").Value = Alku

Range("D11").Value = Arvo Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Arvo = Arvo 1
On Error GoTo 0
Loop
MsgBox ("Tulostus valmis"), 64, "Huomautus!"

' toimii

End Sub

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