Epäsuora viittaus Excelissä

Epäsuora viittaus Excelissä

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.

EPÄSUORA

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.

2 kommenttia artikkeliin ”Epäsuora viittaus Excelissä

  1. 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ää

    • 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ää

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s