la llista de funcions en anglès la podem trobar a la wiki: http://wiki.services.openoffice.org/wiki/Documentation/How_Tos/Calc:_Functions_listed_by_category
En l'exemple invocarem la funció BDEXTREU (DGET en anglès) que permet trobar en un rang de cel·les aquella que verifica unes determinades condicions. Els paràmetres de BDEXTREU (DGET) també els trobem a la wiki:
http://wiki.services.openoffice.org/wiki/Documentation/How_Tos/Calc:_DGET_function
http://wiki.services.openoffice.org/wiki/Documentation/How_Tos/Calc:_DGET_function
En una fulla de Calc posaré els següents valors en el rang B1:D22. Aquesta serà la taula de dades:
I en el rang B24:D25 hi poso les condicions de cerca. Els títols han de coincidir amb els de la taula de dades
Poso que em cerqui el valor ID=8
Aleshores, en una altre cel·la verifico que la funció troba el valor posant:
=BDEXTREU(B1:D22;C1;B24:D25)
Que ho llegeixo així, en el rang de dades B1:D22, obté el valor de la columna de títol C1, que verifica les condicions expressades al rang B24:D25.
Les condicions que hi ha a B24:D25 són (ID=8) i (NOM pot ser qualsevol valor) i (VALOR pot ser qualsevol valor).
La funció retorna "h" com era d'esperar.
Aquesta és una funció molt útil per a fer cerques en fulles. Com puc utilitzar-la en una macro? Primer de tot, creo un nou mòdul de macros i hi afegeixo el següent codi:
function MacroBDExtreu as String
Dim oFuncio As Object
Dim oFull As Object
Dim oRangTaula As Object
Dim oColumnaSelect As Object
Dim oColumnaCondicions as Object
Dim sRetorn As String
oFull = ThisComponent.Sheets.getByName("Full1")
oRangTaula = oFull.getCellRangeByName("B1:D22")
oColumnaSelect = oFull.getCellByPosition(2, 0)
oColumnaCondicions = oFull.getCellRangeByName("B24:D25")
oFuncio = createUnoService("com.sun.star.sheet.FunctionAccess")
' Invoca la funció pel seu nom en anglès: BDEXTREU --> DGET
sRetorn = oFuncio.callFunction("DGET", _
Array(oRangTaula, _
oColumnaSelect.String, _
oColumnaCondicions))
MsgBox(sRetorn)
MacroBDExtreu = sRetorn
End Function
I invoquem la macro que ens mostra un missatge amb la dada trobada.
id | nom | valor |
1 | a | aa |
2 | b | bb |
3 | c | cc |
4 | d | dd |
5 | e | ee |
6 | f | ff |
7 | g | gg |
8 | h | hh |
9 | i | ii |
10 | j | jj |
11 | k | kk |
12 | l | ll |
13 | m | mm |
14 | n | nn |
15 | o | oo |
16 | p | pp |
17 | q | |
18 | r | rr |
19 | s | ss |
20 | t | tt |
21 | u | uu |
I en el rang B24:D25 hi poso les condicions de cerca. Els títols han de coincidir amb els de la taula de dades
id | nom | valor |
8 |
Poso que em cerqui el valor ID=8
Aleshores, en una altre cel·la verifico que la funció troba el valor posant:
=BDEXTREU(B1:D22;C1;B24:D25)
Que ho llegeixo així, en el rang de dades B1:D22, obté el valor de la columna de títol C1, que verifica les condicions expressades al rang B24:D25.
Les condicions que hi ha a B24:D25 són (ID=8) i (NOM pot ser qualsevol valor) i (VALOR pot ser qualsevol valor).
La funció retorna "h" com era d'esperar.
Aquesta és una funció molt útil per a fer cerques en fulles. Com puc utilitzar-la en una macro? Primer de tot, creo un nou mòdul de macros i hi afegeixo el següent codi:
function MacroBDExtreu as String
Dim oFuncio As Object
Dim oFull As Object
Dim oRangTaula As Object
Dim oColumnaSelect As Object
Dim oColumnaCondicions as Object
Dim sRetorn As String
oFull = ThisComponent.Sheets.getByName("Full1")
oRangTaula = oFull.getCellRangeByName("B1:D22")
oColumnaSelect = oFull.getCellByPosition(2, 0)
oColumnaCondicions = oFull.getCellRangeByName("B24:D25")
oFuncio = createUnoService("com.sun.star.sheet.FunctionAccess")
' Invoca la funció pel seu nom en anglès: BDEXTREU --> DGET
sRetorn = oFuncio.callFunction("DGET", _
Array(oRangTaula, _
oColumnaSelect.String, _
oColumnaCondicions))
MsgBox(sRetorn)
MacroBDExtreu = sRetorn
End Function
I invoquem la macro que ens mostra un missatge amb la dada trobada.
Cap comentari:
Publica un comentari a l'entrada