
Sain sähköpostitse kysymyksen, jonka ratkaisu saattaa kiinnostaa muitakin excelöitsijöitä:
”Minulla on monivälilehtinen tiedosto ja sen ensimmäisellä lehdellä on kooste, johon haetaan tietoa muilta välilehdiltä. Esimerkissä haettu ”TAMMIKUU” ja ”HELMIKUU” lehdiltä tieto kahdesta solusta. Haluaisin helpottaa monimutkaisten kaavarimpsujen tekemistä niin että rivin edessä (esimerkissä solussa A3 ja A4 olisi välilehtien nimet ja kaava hakisi sen tästä solusta. Kun rivejä on kymmeniä niin rivit saisi aikaan yksinkertaisesti kopioimalla. Eli solun B2 kaavassa ”TAMMIKUU!” korvattaisiin jollakin niin että välilehden nimi löytyykin solusta A3.”
Ratkaisu
Excelissä voi viitata epäsuorasti soluun muodostamalla soluviittausta muistuttavan merkkijonon ja käyttämällä INDIRECT (EPÄSUORA) -funktiota.
Yllä olevassa ensimmäisessä kaavassa muodostetaan solussa A3 olevasta tekstistä ja merkkijonosta ”!A1” yhtenäinen merkkijono & -operaattorin avulla. Tuloksena siis merkkijono ”TAMMIKUU!A1”, joka muistuttaa Excelin viittausta, joten INDIRECT osaa hakea kyseisen solun sisällön.
Huom! Jos lisäät rivejä kuukausi-taulukoihin, muista muokata lainausmerkkien sisällä olevat osoitteet.
Hei Heidi, tämä oli hyödyllinen tieto. Miten homman voisi hoitaa päinvastoin. Kun solussa on nimi, miten sen saisi välilehden nimeksi helposti? Voiko tätä epäsuoraa viittausta käyttää minun tarpeeseen?
TykkääTykkää
Moi Aarno,
Sivuja ei pysty automatisoidusti nimeämään muuten kuin makron avulla. Esimerkiksi seuraava koodi käy läpi kaikki työkirjassa olevat laskentataulukot ja sijoittaa solussa A1 olevan arvon sivun nimeksi. Jos nimeäminen epäonnistuu (esim. sama nimi on jo tai nimi on muutoin epäkelpo), makro jatkaa suoritustaan suorittamatta kyseisen sivun nimeämistä.
Sub VaihdaNimet()
Dim Laskentataulukko As Worksheet
For Each Laskentataulukko In Worksheets()
On Error Resume Next
Laskentataulukko.Name = Laskentataulukko.Range(”A1”).Value
Next Laskentataulukko
End Sub
Seuraava makro antaa sivulle aktiivisessa solussa olevan arvon. Jos arvo ei kelpaa nimeksi, makro antaa siitä ilmoituksen.
Sub AnnaNimi()
On Error GoTo VIRHE
ActiveSheet.Name = ActiveCell.Value
Exit Sub
VIRHE:
MsgBox ”Valitun solun arvo ei kelvannut sivun nimeksi.”
End Sub
TykkääTykkää