Random luku + tekstiä soluun?

Hei,

Haluan tulostaa randomilla kaksi lukua samaan soluun. Miten se pitäisi tähän koodiin laittaa? Nyt on siis tämä ja arpoo yhden luvun:

Sub Testitaulu()
Dim a As Integer

For i = 1 To 10
a = Rnd * 10 1
Cells(i 1, 3) = a

Next

End Sub

Tästä siis soluun tulee esim. "2", mutta haluaisin "2 * 2", joista kumpikin lukuarvo on yo. koodin mukaisesti randomilla arvottu ja välissä tekstinä tuo tähti. Apuja?
131625
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

Okei, nyt sain tämmösellä toimimaan

Sub Kertotaulu()
Dim a As Integer

For i = 1 To 10
a = Rnd * 10 1
b = Rnd * 10 1
Cells(i 1, 3) = a & " * " & b

Next

End Sub

Mutta, b luku tulostuu desimaalien kanssa. Miten ne saisi pois?

Näyttää siis tyyliin tältä: 2 * 6,5464577

Äänestä

Miksi? Yhdessä cellissä kasku: =(RAND()*10 1)*(RAND()*10 1) antaa ko kertolaskun tuloksen. Tai:

A1: =RAND()*10 1
B1: =RAND()*10 1
C1: =A1 & "*" & B1

Jossa C1 on täsmälleen kysytty teksttijono.

Äänestä

Ei antanut. Ja tää pitää tehdä ohjelmoinnilla, ei funktiolla.

Äänestä
  • "Ja tää pitää tehdä ohjelmoinnilla"

    Miksi? Miksi pitää tehdä vaikeimman kautta?

    "Ei antanut"

    Kyllä antaa. Kasku RAND ei anna aina samaa arvoa.

    Äänestä

  • Anonyymi kirjoitti:

    "Ja tää pitää tehdä ohjelmoinnilla"

    Miksi? Miksi pitää tehdä vaikeimman kautta?

    "Ei antanut"

    Kyllä antaa. Kasku RAND ei anna aina samaa arvoa.

    Se, että sinä et keksi syytä, miksi joku asia pitäisi tehdä ohjelmoimalla, ei tarkoita, ettei ole mitään syytä tehdä sitä ohjelmoimalla.

    Ohjelmoinnilla toteutettuna solussa on lopulta vain tekstiä, ei kaava, joka lakkaa olemasta kun joku kirjoittaa jotain sen päälle. Jospa tarkoitus on vaikkapa antaa ala-astelaiselle harjoitustehtäväksi läjä kertolaskutehtäviä, joihin pitäisi kirjoittaa vastaus.

    Tai jos haluaa, että solujen sisältö pysyy samana vaikka muualle taulukkoon tekisi muutoksia. RAND arvotaan uudestaan joka kerta kun minkä tahansa solun arvoa muutetaan. Luultavasti on toivottavaa, että kertolaskut pysyvät samana senkin jälkeen kun niihin kirjoitetaan vastaus.

    Äänestä

En nyt ala väitellä miksi pitää, tässä tapauksessa vain pitää.

Laitoin tuon ihan fuktiona niin tulosti #NIMI-herjan.

Äänestä
  • Eli olet jäärä.

    Äänestä

No se nyt et vaikuta siihen, että ei toiminut. :D

Äänestä

Tee funktio, esim:

function satunnaiset(alaraja, ylaraja)
eka = Int((ylaraja-alaraja 1)*Rnd alaraja)
toka = Int((ylaraja-alaraja 1)*Rnd alaraja)
satunnaiset = eka & " * " & toka
end function

Ja sitten laitat soluun tyyliin:
=satunnaiset(1;10)

Josta voi seurata vaikka:
5 * 9

Äänestä
  • Sen sijaan, että kirjoittaa soluun "=satunnaiset(1;10)", se (aloituksesta päätellen) kannattaa tehdä makron puolella:
    SOLU (esim A1) = satunnaiset(1;10)

    Äänestä

  • Anonyymi kirjoitti:

    Sen sijaan, että kirjoittaa soluun "=satunnaiset(1;10)", se (aloituksesta päätellen) kannattaa tehdä makron puolella:
    SOLU (esim A1) = satunnaiset(1;10)

    Riippuu tietysti käyttötarkoituksestakin. Makro on kertaluonteinen erikseen ajettava koodinpätkä, mutta funktiota voi uudelleenkäyttää missä solussa tahansa, ja tehdä siihen viittauksiakin. Esimerkiksi raja-arvot voi laittaa muihin soluihin, ja käyttää niitä parametrina funktiossa.

    Äänestä

  • Anonyymi kirjoitti:

    Riippuu tietysti käyttötarkoituksestakin. Makro on kertaluonteinen erikseen ajettava koodinpätkä, mutta funktiota voi uudelleenkäyttää missä solussa tahansa, ja tehdä siihen viittauksiakin. Esimerkiksi raja-arvot voi laittaa muihin soluihin, ja käyttää niitä parametrina funktiossa.

    Toki, ja juuri sitä tarkoitin. Jos kaavan kirjoittaminen soluun olisi vaihtoehto, niin ei aloittaja kyselisi täällä neuvoja tuon toteuttamiseksi VBA:lla. Luultavasti hän siis haluaa, että solussa on arvonnan jälkeen tekstinä nuo kertolaskut.

    Ja voihan makronkin ajaa uudestaan. Ei se ole sen kertakäyttöisempi kuin kaava solussa. Makrossakin parametrit voi hakea soluista tai kirjoittaa suoraan makroon, ihan kuinka haluaa.

    Jos kaava on kelvollinen vaihtoehto, niin se on tietysti helpompi, mutta jos haluaa, että arvonnan jälkeen soluissa on tekstinä kertolaskuja, niin kaavat eivät tietenkään kelpaa.

    Äänestä

  • Anonyymi kirjoitti:

    Toki, ja juuri sitä tarkoitin. Jos kaavan kirjoittaminen soluun olisi vaihtoehto, niin ei aloittaja kyselisi täällä neuvoja tuon toteuttamiseksi VBA:lla. Luultavasti hän siis haluaa, että solussa on arvonnan jälkeen tekstinä nuo kertolaskut.

    Ja voihan makronkin ajaa uudestaan. Ei se ole sen kertakäyttöisempi kuin kaava solussa. Makrossakin parametrit voi hakea soluista tai kirjoittaa suoraan makroon, ihan kuinka haluaa.

    Jos kaava on kelvollinen vaihtoehto, niin se on tietysti helpompi, mutta jos haluaa, että arvonnan jälkeen soluissa on tekstinä kertolaskuja, niin kaavat eivät tietenkään kelpaa.

    Niin olisihan tuon voinut tehdä suoraan valmisfunktioilla, vaikka:

    =CONCATENATE(RANDBETWEEN(1;10);" * ";RANDBETWEEN(1;10))

    Vba:llahan omat funktiotkin tehdään siellä samassa paikassa kuin makrotkin. Makrojen etu on sekin, ettei solujen arvot muutu päivitettäessä taulukkoa. Tosin funktion arvothan saa kopioimalla ja liittämällä pelkät arvot myös tekstiksi. Yksi funktioiden hyöty on, ettei tarvitse näperrellä koodin puolella niin usein.

    Molempi parempi.

    Äänestä

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

Kommentoi aloitusta


Anonyymi kirjoitti:

Hei,

Haluan tulostaa randomilla kaksi lukua samaan soluun. Miten se pitäisi tähän koodiin laittaa? Nyt on siis tämä ja arpoo yhden luvun:

Sub Testitaulu()
Dim a As Integer

For i = 1 To 10
a = Rnd * 10 1
Cells(i 1, 3) = a

Next

End Sub

Tästä siis soluun tulee esim. "2", mutta haluaisin "2 * 2", joista kumpikin lukuarvo on yo. koodin mukaisesti randomilla arvottu ja välissä tekstinä tuo tähti. Apuja?

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