Af samme forfatter:

Excel til skabeloner …

Excel til rapporter …

Arno, den lille flod

Drømmen om palmeøerne

82

Få succes med CRM

Tilegnet mor & far, Peter og sejlervennerne

Om at gøre regnearket til et værktøj der kan meget mere

Om nye ideer, sjove indfald og at gøre det umulige muligt

Af Martin Georg Houlberg Jensen

Excel til spil, sjov og spas

Velkommen

Jeopardy!

Layout af ’tavlearket’

Automatisk visning af stillingen

Layout-trick: Betinget formatering til pointtavlen

Hjælpemakroer – oprettelse af makroer

Automatiske makroer – ved åbning og lukning af Excel-mappe

Spilmekanisme: Ark til svar/spørgsmål

Spilmekanisme: Valg af spilfelt med dobbeltklik

Egen dialogboks / formular

Sænke slagskibe

Spiloverblik med bl.a. stilling og funktioner

Automatiske makroer til opsætning ved start og afslutning af spillet

Søkort-ark for spillerne

Dynamiske hjælpetekster i søkortet

Markering i søkort: Placering af skibe eller skyd

Makro: TilMenu()

Hjælpemakro: CellInRange()

Hjælpemakro: MuligtSkib()

Makro: AfgivSkud()

Skibets grafik

Hjælpemakro: FindSkib()

Makro: PlacerSkib()

Ny funktion til ’højreklik’

Beskyttet visning af søkort

Start af (nyt) spil: makroerne NytSpil() og StartSpil()

Hjælpemakroen NulstilForSpiller()

Udvidelse: Fælles søkort-ark til slagmarkerne

Udvidelse: Vis skibet når det sænkes

Bordtennis – ”Pong”

Layout som for (næsten) 50 år siden

Gør bordet klar til spil: makroen NytSpil()

Spilmekanisme: Bordtennisbattet

Spilmekanisme: Lad bolden leve

Spilmekanisme: Boldens intelligens

Anvendte formler, kommandoer og funktioner

1. Velkommen

I denne omgang gælder det alt andet end noget seriøst, for ja, Excel kan sagtens benyttes til en masse underholdning og ikke kun anvendes forretningsmæssigt. Man skal nok være lidt ekstra vild med – eller skør med – Excel, kodning og at fordybe sig i denne tekniske og måske nok lidt smånørdede verden. Men når det er på plads, er der masser af sjove muligheder lige ved hånden.

De kommende sider beskriver opbygning af nogle forholdsvis enkle men meget anvendelige spil og har til formål at inspirere til at finde på endnu mere selv. Vi lægger ud med en god gammel traver ”Jeopardy!”, som igennem mange år er blevet set i mange afskygninger og i forskellige former. Spillets turbaserede forløb og strukturerede opbygning matcher virkelig godt grundtanken i Excel. Derefter kommer flere eksempler og de bliver (nok) tiltagende krævende og kommer længere og længere væk fra Excel som regnearket normalt opfattes. Det er pointen. Hovedformålet er at inspirere til at benytte Excel til andre og sjovere ting, og selv finde på nye muligheder og måske endda flere og nye spil.

Sådan lød det i indledningen til seriens to tidligere hæfter ”Excel til rapporter …” og ”Excel til skabeloner …”, der havde fokus på forretningsprocesser, samt optimering, udvikling og udfordring af disse. Denne gang er formålet udelukkende at lege med Excel til alt muligt andet – kun for fornøjelsens skyld. En del af de anvendte teknikker på de følgende sider er også anvendt i de to første hæfter, hvor yderligere forklaring, uddybning, anvendelse osv. kan hentes, men emnerne forklares her kort (igen), så eksemplerne kan stå alene. Har du ikke læst de tidligere hæfter, følger nu introduktion til strukturen og indholdet af de følgende sider.

Eksemplerne er også denne gang bygget og vist med Microsoft® Office Excel® 2007 (version 12.0.6762.5000) SP3, samt testet med en række versioner helt op til Office365. De vil temmelig sikkert også fungere med mange flere versioner, da meget af det anvendte har fungeret siden de tidlige versioner af Excel. Sprogversionen af Excel i eksemplerne er dansk, hvilket i praksis kun har betydning for navne på formler og menuer. Har du en anden sprogversion, kan du finde de tilsvarende kommandoer i din Excel.

Hvert kapitel i bogen indeholder og fortæller om et eksempel og bygger det op med de forskellige elementer der skal til. Sidst er der et kapitel med et overblik over, hvor en given formel, kommando, funktion eller et begreb er beskrevet og anvendt første gang. Hvis du ønsker yderligere information og inspiration om anvendte kommandoer og teknikker, kan det hentes fra de tidligere hæfter.

Hvert eksempel starter med en introduktion (som også er tænkt som en inspiration) samt en formålsbeskrivelse og kapitlerne er opbygget i den følgende struktur:

Formål

Ligesom kapitlerne starter med en kort formålsbeskrivelse der bl.a. beskriver hvoraf eksemplet kommer og hvad det kan bruges til, skal også nu kort defineres bogens formål: Hovedformålet er nemlig at åbne for de mange muligheder vi kommer ind på, så du kan arbejde videre både med dem og med mange andre du får ideer til. Helt grundlæggende funktioner og anvendelse af Excel gennemgås ikke, da tanken ikke er en grundlæggende lærebog, men som en inspiration i at komme endnu længere med Excel og udbygge og udnytte styrkerne til vildere ting end du måske havde forestillet dig – nu altså også til at lave spil.

Læs dette afsnit i kapitlerne for at finde inspiration eller direkte relevans.

Hvad kommer der ud af at læse dette kapitel

Derefter følger stikord til indholdet og hvilke krav det stiller til (eller kompetencer det bygger op med) Excel og viden, og dermed dig og andre, der ønsker at benytte mulighederne. Altså: hvad kommer der ud af at læse kapitlet.

Læs dette afsnit i kapitlerne for at dykke ned i et særligt relevant emne du ønsker på baggrund af konkrete områder af og med Excel.

Hvad skal der til

Det brydes derefter ned i de konkrete opsætninger, funktioner, formler, makroer, tilpasninger og andet der skal laves. Makroerne opbygges med scripting eller lettere programmering ved hjælp af VBA: Visual Basic for Applications. Det er makrosproget i programmerne i Microsoft Office pakken og er særdeles effektivt og kraftfuldt. Det har eksisteret i disse programmer i en hel del år og det kan bestemt anbefales at se nærmere på det, da det rummer enorme muligheder. Her opstår nemlig en del af magien.

Læs dette afsnit for at få en ide om sammenhængen med og specifikation af de områder der arbejdes med i kapitlet og relationen til opgaven, dermed hvad vi skal igennem i kapitlet, hvad der skal ’bygges’.

Hvordan gøres det

Eksemplet bygges derpå detaljeret op skridt for skridt indtil løsningen er færdig og det er beskrevet hvordan. Du kan undervejs tilpasse til egne behov eller alternativer, da alle elementerne er kortlagt. På den måde kommer vi fra almindelig Excel til det excellente værktøj vi egentlig sidder med.

Læs dette afsnit for at se de konkrete løsninger bygget op og beskrevet i detaljer.

Hvis det skal stikke lidt af

Måske stikker det også lidt af indimellem – det er nok allerede sket med valget af emnet denne gang – og hvert eksempel slutter med forslag til, hvad man mere kunne lave – bare for at skrue en ekstra gang på styrkeknappen.

Læs dette afsnit for at få inspiration og ideer til at arbejde videre fra eksemplet.

Nu håber jeg, du vil finde fornøjelse ved læsningen, ved indholdet, ved at forsøge dig med eksemplerne, ved at se resultaterne og naturligvis en masse udbytte fornøjelse ved det hele! Forresten, fornøjelse er også en vigtig form for udbytte!

Rigtig god læselyst!

2. Jeopardy!

Det første eksempel på at udnytte Excel til underholdning kommer fra noget så festligt som et sejlertræf, hvor det velkendte spil ”Jeopardy!” udfordrede alles viden indenfor vores fælles hobby og passion. Eksemplet her tager derfor udgangspunkt i sejlerverdenen, men indholdet kan naturligvis erstattes og tilpasses som ønsket samt fra gang til gang spillet benyttes.

I mere end et halvt århundrede har ”Jeopardy!” fornøjet og underholdt –i stuerne og på skærmen. Grundtanken er enkel: Stil det rigtige spørgsmål til et bestemt svar. Der dystes i et antal kategorier (typisk fem) mellem et antal spillere eller hold (typisk tre) i paratviden og på hurtighed. Det sker i struktureret og sekventiel orden, det vil sige ét svar ad gangen, men det er ikke nødvendigvis den samme spiller der starter med at vælge en kategori og sværhedsgrad for svaret, som også får lov til at stille spørgsmålet, der passer til. Det er dog sådan, at hvis spørgsmålet er rigtigt, opnås point og spilleren (eller holdet) kan vælge det næste svar – kategori og sværhedsgrad. Spørges forkert, må andre forsøge at spørge til svaret.

Formål

Dette kapitel vil opbygge et Excel-ark til denne ’leg’ med funktionalitet til både at klargøre og udføre spillet. Indholdet i kategorierne, svarene og spørgsmålene, forberedes og tilføjes Excel-mappen inden selve spillet går i gang. Afviklingen af spillet vil blive understøttet af Excel-arket fx på en storskærm. Der tilføjes et par remedier til at melde ’klar med spørgsmål’ – fx horn, klokke osv. – og spillet kan gå i gang.

Hvad kommer der ud af at læse dette kapitel

Vi kommer her ind på bl.a.:

opsætning og tilpasning af layout med formatering af Excelarket der skal være Jeopardy!-tavlen, med bl.a. grafik og strukturer til at ligne den velkendte version

opbygning af funktionalitet til afvikling af et svar/spørgsmål ved hjælp af et par formler, opslag og makroer

opbygning af funktionalitet til at holde styr på stillingen mellem spillerne/holdene

mappens struktur for svar og spørgsmål af forskellige typer, fx tekst og billeder

start af et nyt spil – nulstilling af tavlen og oprettelse af ark til svar og spørgsmål

Hvad skal der til?

Til det får vi brug for:

formatering af layout – udseendet – af Excel-arket med tavlen af forskellig art, bl.a. brug af velkendte farver, formatering af visning afhængig af cellers indhold samt tilpasning af selve Excel’s visning

nogle få formler til at holde styr på stillingen blandt deltagerne ud fra opnåede point på tavlen

et par makroer til tilpasningen samt opstart af spillet for nemheds skyld

en struktur for ’under-ark’ med svar og spørgsmål

en dialogboks/formular til kontrol af svar/spørgsmål-kombinationen og eventuel tildeling af point til rette deltager/holf

hjælpemakroer for at lette både forberedelsen og afviklingen af spillet

samt naturligvis en del forarbejde med at udvælge kategorier, svar og spørgsmål (benyt relevante kilder og emner)

Hvordan gøres det

Et helt almindeligt og helt tomt Excel-ark er udgangspunktet for dette spil. Det eneste der er lidt specielt fra starten er, at det gemmes med ’efternavnet’ ”.xlsm” så det senere kan indeholde makroer. Det sidste punkt ovenfor med alt forarbejdet antages i dette eksempel som udført på forhånd: kategorierne er hentet fra sejlerverdenen og du kan vælge egne kategorier, værdier, svar og spørgsmål. Hvordan det struktureres i Excel-mappen så spillet kører ’af sig selv’ når det sættes i gang, gennemgås og ligeledes hvordan en del af forarbejdet gøres lidt enklere, fx oprettelse af relevante ’underark’. Derudover er det bare at samle relevant indhold og lægge ind. Strukturen i mappen vil blive bygget op således:

Et ’tavle-ark’ som vil være den primære visning i spillet med både selve spiltavlen med kategorier, sværhedsgrader/point, overblik over hvilke svarmuligheder der er tilbage at vælge fra, hvilke der er ’vundet’ af hvilke deltagere, samt en tabel med stillingen blandt deltagerne

Et ’indholdsark’ med en liste over svar/spørgsmål-ark der skal vises når et valg er foretaget – når et svar vises og deltagerne kan byde ind med spørgsmålet der hører til

Samt et ark pr. svar/spørgsmål-kombination som listet i indholdsarket, men i stedet for at oprette disse ark manuelt laver vi om lidt en lille hjælpemakro til at gøre dette trivielle arbejde

Det er kun tavlearket der vil blive vist under spillet og naturligvis efterhånden i løbet af spillet det relevante underark det øjeblik det skal bruges. Underarkenes layout/formatering afhænger af, hvad de skal vise som igen afhænger af hvilke muligheder der ønskes for svarene der skal spørges til. I dette eksempel er der mulighed for at have billeder eller tekst som svar, og tekst som tilhørende spørgsmål.

Layout af ’tavlearket’

Det første der skal gøres ved layout’et er alt det der dels kan gøres direkte med Excels opsætningsmuligheder og dels altid skal være ens – også når spillet ikke er startet og man er i gang med at forberede, tilpasse osv. Senere laves makroer til at tilpasse de andre indstillinger, der fx kun skal gælde mens et spil er i gang. I menuen ”Vis” gøres følgende:

deaktivering af gitterlinjerne som Excel per standard foreslår

deaktivering af overskrifter for rækker og kolonner

Fra samme menu kan ”Fuldskærmsvisning” aktiveres så det meste af Excel udenom mappen ikke vises, men det bygges i stedet senere ind i en opstartsmakro så menuen m.m. er til rådighed mens spillet forberedes.

Tavlearkets baggrundsfarve (i alle celler) er ændret til som standard at være ”Grå - 50%” ved at markere hele arket og derpå vælge denne ”Udfyldningsfarve” i værktøjslinjen/menuen ”Startside”.

Et område til overskriften for spiltavlen udvælges og sættes sammen af flere celler for at spænde over alle kolonner med kategorier. I dette tilfælde er det fem celler (fem kategorier) og de markeres, der tastes [Ctrl]+[1] (afhængig af sprogversionen af Excel) og i dialogboksen der kommer frem, vælges i fanebladet ”Justering” med et flueben i ”Flet celler” at disse celler skal hænge sammen i eet område. Derudover kan her vælges justering i cellen (her er valgt centreret både vandret og lodret), samt skriftstørrelse og farve i fanebladet ”Skrifttype”. Her er også skriftstørrelsen forøget og fremhævet (Fed), samt farven er sat til den foruddefinerede ”Gylden”. Sluttelig er baggrundsfarven i cellen sat til sort i fanebladet ”Fyld”.

Det nye område navngives til venstre for formellinjen ved at taste det ønskede navn. Det kan så senere benyttes til at hoppe direkte hertil som en slags udgangsposition ved at vælge det i listen her til venstre i formellinjen. Det kan også anvendes af makroer for samme effekt og det får vi brug for. Her er valgt at navngive området til ”rOverskrift”. Overskriftsteksten er angivet helt normalt til ”Velkommen til ExcelJeopardy!”. Samlet er disse første opsætninger således:

Området under overskriften opdeles nu i tre afsnit (adskilt af en tom række):

En række med titlerne for de fem kategorier – området navngives på samme måde som lige før til ”rKategorier”

Pointområdet: fem rækker x fem kategorikolonner – dette område navngives ”rTavle”

Statusområdet: stillingen for de tre deltagere – hvor hver spillernavns celle bliver navngivet, fx til ”rSpillerA” osv.

Navngivningen af områder gør, at vi om lidt meget lettere kan tilgå dem fra makroerne. Alle tre områder defineres med skriftfarven ”Gylden”, de første to områder med baggrundsfarven ”Indigo” og rammer i den tykkeste streg med farven sort – alt sammen via samme dialogboks som lige før. Rammerne sættes under fanebladet ”Kant” og både indvendig og udvendig. Det nederste område får baggrundsfarve sort og kanter/rammer farven ”Grå - 50%” (samme farve som baggrunden for resten af arket). Derudover:

justeres skriftstørrelsen i cellerne så de er passende

rækkers højde og kolonners bredde justeres

kategorioverskrifterne udfyldes med de ønskede kategorier

og pointområdet udfyldes med tallene 1-5 oppefra og ned i alle fem kolonner

Dermed ser spiltavlen nu således ud:

Automatisk visning af stillingen

De tre celler under spillernavnene A, B og C benyttes til summering af de point hver deltager har opnået. Når en deltager opnår point vises det ved at sætte hhv. A, B eller C i den respektive celle. Det styres gennem funktionalitet til spillet der laves senere. Lige nu kan opsummering derfor ske ved at tælle hvor mange ’felter’ en spiller har sit navn stående i, vægtet efter sværhedsgrad 1-5. Til det benyttes formlen ”TÆL.HVIS()”, der tager to ’argumenter’:

hvor skal der tælles –i dette eksempel række 6 for sværhedsgrad 1 osv.

og hvad skal tælles – spillernavn, som står i cellen lige over formelcellen

Det gøres for hver sværhedsgrad og ser således ud for alle de 1’ere A har opnået:

TÆL.HVIS($B$6:$F$6;C$13)

=TÆL.HVIS($B$6:$F$6;C$13)

+2*TÆL.HVIS($B$7:$F$7;C$13)

+3*TÆL.HVIS($B$8:$F$8;C$13)

+4*TÆL.HVIS($B$9:$F$9;C$13)

+5*TÆL.HVIS($B$10:$F$10;C$13)

Layout-trick: Betinget formatering til pointtavlen

Dermed er tavlearket færdigt og kan faktisk allerede bruges til at spille med, hvis resten af spilmekanismerne foregår udenfor Excel (og ’rigtige’/ vundne felter tastes manuelt).