Miten saada excel luomaan käyttäjän haluama määrä rivejä taulukkoon? Jos esim on rivi, jossa käyttäjää pyydetään syöttämään näytemäärä, jonka jälkeen ilmestyisi tulostaulukko, jossa on haluttu määrä rivejä. Olen makrolla tehnyt yhden missä oli vaihtoehtoja vain kolme eli nauhoitin 3 makroa erikseen, jotka sitten toivat näkyviin taulukot toivotuilla näytemäärillä. Nyt kuitenkin näytteitä voi olla jopa 100, joten ei niitä ainakaan yksitellen viitsisi nauhoittaa.
Nykymuotoisessa Excel -taulukossa on aina 1048576 riviä ja kussakin aina 16384 saraketta. Siihen ei siis varsinaisesti voi luoda rivejä.
Jos haluat esim. syöttää tietylle määrälle rivejä dataa, niin sen voi tehdä VBA-koodilla. Kun nauhoitit makron, niin se makrokin tallentui VBA -koodiksi
Siellä vois siis olla esim. jotain tällaista:
Sub Test() ' ' Test Makro ' ' Range("E1:E3").Select Selection.FormulaR1C1 = "Testi" End Sub
Jos siis haluat esim. täyttää vastaavalla tavalla käyttäjän antaman määrän rivejä, niin se onnistuisi:
Sub Test() Dim r As Long r = InputBox("Montako riviä?") Range("E1:E" & r).Select Selection.FormulaR1C1 = "Testi" End Sub
Kiitos, lähden kokeilemaan. Tosiaan en halua luoda varsinaisia rivejä exceliin vaan luoda taulukon, jossa on toivottu määrä rivejä. Saan varmaan helpoiten haluamani näköisen taulukon nauhoittamalla sen ensin ja kopioimalla VBA:ssa sen koodin sitten tuohon kohtaan "Testi". Saa nähdä miten käy.
Hei jos vielä joku ehtii miettimään, en osaa tehdä. Eli tuo komento montako riviä kirjoittaa nyt tekstin "Testi". Jos haluaisin tuohon seuraavanlaisen toiminnon:
Sub TaulukonSiirto() ' ' TaulukonSiirto Macro ' ' Range("P2:U4").Select Selection.Copy Range("A21:A23").Select ActiveSheet.Paste End Sub
Niin miten ihmeessä tuo tapahtuu?
Eli käyttäjä valitsisi näytemäärän (toimii hienosti, kuten yllä minua opastettu), mutta jokaista toivottua näytettä kohden kopioituisi tuollainen taulukonpätkä, jonka nyt olen makrolla nauhoittanut.
Toinen vaihtoehto voisi olla tehdä taulukko 100:lle näytteelle ja piilottaa ne kaikki. Jos saisi jollakin komennolla näkyviin aina yhtä näytettä kohden tuon 3 rivisen taulukon pätkän??? Menee vaikeeksi
Itse en tykkää makroista. Mikset vain laittaisi solujen kopiointia kaavaksi, jossa on ehto? Esimerkiksi kopiointi B4:ään kolme riviä ylempää menisi jotenkin näin: B4=IF(A4<$F$1,B1,""), ja A-sarakkeeseen juokseva numerointi ja F1-soluun se haluttu lukumäärä.
Tein tästä vielä toimivan esimerkin. Taulukon sisältö on alla. Juoksevaa numerointia (A-sarakkeessa) jatketaan kaavalla siihen asti, että haluttu määrä on täynnä. Kopioitavat tiedot kopioidaan vain alueelle, jossa juokseva numerointi jatkuu. Jokaiselle kopioitavalle riville (3 kpl) tarvitaan oma kaavansa, jotta viittaus juoksevaan numeroon tulee oikein, mutta kaavaa voi tietysti monistaa useaan vierekkäiseen soluun.
F1 (syötä tähän näytettävä rivimäärä) A1 1 B1 tekstiä B2 lisää tekstiä B3 kolmas rivi tekstiä A4 =IF(AND(A1<$F$1;A1<>"");A1+1;"") B4 =IF($A4<>"";B$1;"") B5 =IF($A4<>"";B$2;"") B6 =IF($A4<>"";B$3;"") A7... kopioi edellisten rivien (A4:B6) kaavoja haluamasi määrä.
Tyhjän solun kopiointi tuottaa näköjään nollan, mutta tämän voi välttää joko jättämällä tyhjästä solusta kopiointikaavan pois tai laittamalla siihen ympärille CONCAT().
Täytyy totakin kokeilla. En äkkivilkaisulla vielä sisäistänyt, mutta varmaan aukeaa, kun testaan.
Eilen tein ensimmäiselle excel sivulle Grezin antamalla makrolla toiminnon, jolla sain tarvitsemani rivit ja niihin haluamani tekstin. Tulostaulukoita on useilla excel sheeteillä, joten laitoin muille sivuille kaavalla kopioitumaan nuo eka sivun makrolla valitut näytteet ja laitoin conditional formatting-toiminnolla aina sen taulukon osan "muodostumaan" (eli värit ja reunaviivat ja desimaalit...), jonka olin ekalla sivulla makrolla valinnut. Sillä tavoin toimii aika hyvin. Kaikki tulossivut ovat siis tyhjiä ja täyttyvät nyt sitä mukaan kuinka monta näytettä valitsen ensimmäisellä sivulla tehtäväksi. Tässä aina oppii uutta, isot kiitokset!!!
Nyt näitä on kaikkia onnistuneesti käytetty. Vielä yksi kysymys ehdollisesta muotoilusta (tai joku muu konsti) jos osaajia löytyisi :
Testiin tulee 3 näytettä samaa tuotetta. Kukin näyte mitataan 3 kertaa --> saadaan kolme tulosta/näyte, joista lasketaan keskiarvo.
Rajat ovat 1,2 - 1,4
Yksittäisen mittauksen ei tarvitse mennä rajoihin,
jokaisen mittauksen keskiarvon pitää mennä rajoihin,
lopullinen tulos on kaikkien kolmen mittauksen keskiarvon keskiarvo.
1 näyte:
mittaus 1=1
mittaus 2=1,5
mittaus 3=1,2
mittausten keskiarvo = 1,2
2 näyte:
mittaus 1=0,5
mittaus 2=1,5
mittaus 3=0,8
mittausten keskiarvo = 1,4
3 näyte:
mittaus 1=0,1
mittaus 2=1,9
mittaus 3=1
mittausten keskiarvo = 1,0
LOPULLINEN TULOS KESKIARVOJEN KESKIARVO: (1,2+1,4+1,0)/3= 1,2
LOPULLINEN TULOS MENEE RAJOIHIN, MUTTA SÄÄNTÖ ON, ETTÄ MYÖS MITTAUSTEN KESKIARVOJEN TULEE MENNÄ RAJOIHIN. Helppoa on saada keskiarvot näyttämään punaista/vihreää sen mukaan ovatko rajoissa, mutta...
MITEN VÄRJÄTÄ PUNAISEKSI KESKIARVOJEN KESKIARVO, KUN SE ITSE NUMEERISESTI OSUU SALLITTUIHIN RAJOIHIN, MUTTA ON HYLÄTTÄVÄ, KOSKA YKSI MITTAUSTEN KESKIARVOISTA ON ALLE RAJAN?
Mulla on jo aivot ihan solmussa. Lisäongelman tekee se, että näytteitä tulee välillä 1 ja välillä vaikka 10. Ehdollinen muotoilu toimi jos kaikki sarakkeet oli täytetty, mutta jos on tyhjiä soluja taulukossa niin taaskaan ei toimi.
Laitat kunkin keskiarvon kohdalle kentän joka kertoo osuuko haarukkaan..
Eli esim. jos keskiarvo olis solussa C3, niin voisit laittaa soluun D3:
=JA(C3>=1,2;C3<=1,4)
Sit laitat lopulliseen tulokseen tarkistuksen, jossa on esim. =JA(D:D)
(Näyttäisi TOSI vain jos kaikki D-sarakkeen arvot ovat TOSI)
Yksi ongelma: Näytesarakkeita on nyt 10 (maksimimäärä näytteitä). Näytteitä voi tulla 1-10 eli osa taulukosta voi olla täyttämättä, mutta jokaiseen sarakkeeseen täytyy tuo kaava laittaa. Nyt tulos on false niin kauan kuin minulla on ne kaikki 10 näytettä tehty. Saanko mitenkään tuota viimeistä =JA(D:D) ignooraamaan noita tyhjiä soluja?
Taisin keksiä eli tein kaavaan ehdon, että jos solussa on jotain niin tee tuo =JA(C3>=1,2;C3<=1,4) muussa tapauksessa näytetään "TRUE". Ensimmäiseen riviin sitä ei voi laittaa tai kokonaan tyhjä taulukkokin antaa true arvon. Toimi ainakin äkkiseltään.
Aihe on jo aika vanha, joten et voi enää vastata siihen.