About Me

A minha foto
JRod - PORTUGAL
Microsoft [MVP] - Excel (10º ano consecutivo)
Ver o meu perfil completo
Com tecnologia do Blogger.

Seguidores

Estatisticas

Free Blog Counter

eXTReMe Tracker
2008-11-14

Por defeito, o Excel aloca a RAM para 16 níveis de anulações ("undo"). O ajustamento do Registry pode mudar o valor por defeito, para o valor que seja especificado.


Para ver como fazer, clique: AQUI


Válido para o Excel 2000, 2002, 2003 e 2007.

2008-11-01

Este add-in adiciona uma nova aba (Tab) na barra do Microsoft Office Excel 2007.
Os comandos nesta aba (Tab) dão-lhe acesso fácil ao conteúdo livre do Office Online que ajuda, muito rapidamente, a aprendizagem do Excel 2007.

Novo Add-In para o Excel 2007 - Clique aqui

2008-10-12

Questão (adaptada):

“ Como faço para o Excel me dar o endereço da célula que possui o maior valor numa determinada coluna?”

 

Tomemos o seguinte exemplo:

image

Se pretendessemos apenas saber qual o maior valor encontrado, então utilizariamos a seguinte fórmula:

=MÁXIMO(A1:A9)

No exemplo, o valor mais elevado é o 7.

Então, o que se pretende, é obter uma fórmula que nos diga qual a célula que contém o valor mais elevado, ou seja, “A3”.

 

A Função CORRESP() procura por um valor num array e devolve a posição relativa desse valor.

Por sua vez, a Função ENDEREÇO() devolve a representação em texto do endereço de uma determinada célula.

 

Assim, a fórmula a utilizar, será a seguinte, combinando as três Funções descritas:

=ENDEREÇO(CORRESP(MÁXIMO(A1:A9);$A$1:A9;0);1)

ou seja, devolve image

 

Pode, igualmente, utilizar-se uma UDF, como, por exemplo, esta apresentada num newsgroup por Ron Rosenfeld:


A sintaxe é a seguinte: =MaxAdr(rng), em que rng é o Range que se pretende utilizar:

 

Function MaxAdr(rng As Range)
    Dim c As Range
    Dim MaxNum As Double

    MaxNum = Application.WorksheetFunction.Max(rng)

    For Each c In rng
        If c.Value = MaxNum Then
            MaxAdr0 = c.Address
            Exit Function
        End If
    Next c
End Function

 

Tópicos relacionados:

Há dias, foi-me colocada a seguinte questão (adaptada):

“ Quando trabalhava com o Lotus123 fazia /Range/ Name/Create para uma zona seleccionada e mais tarde poderia utilizar esse nome para imprimir, apagar, formatar etc. Como é que eu faço isso agora, imprimir por exemplo, sem ter que estar sempre a definir a área de impressão? “

 

A minha resposta no Forum do EXCELer, foi a seguinte:

“ Defines um nome para o teu Range, ou seja:
a   -   Marcas a área pretendida
b - Escolhes de seguida: INSERIR>NOME>Definir, digitas o nome pretendido, adicionas e dás OK.

c   -  Depois, vais ao Campo Name Box (ou Caixa de Nome, em português) e clicas no dropdown para veres o nome. Verificarás que o Range fica imediatamente marcado.


Para imprimires, vais a FICHEIRO>IMPRIMIR, marcas o item Selecção e dás OK.”

 

A Imagem do que se pretende:

a -

image

b -

image

image

c -

image

Resultado:

image

Para a impressão:

image

 

Ou seja, podemos definir os Ranges que quisermos e, como no exemplo, efectuarmos as diversas impressões, sem ter que estar sempre a definir as áreas de impressão.

 

Tópicos relacionados:

2008-10-07

2009_Microsoft_MVP

E fui ao 2009 MVP Open Day, em Madrid, no dia 3 deste mês de Outubro!!!!

Um espectáculo!!!

03102008(001)

E apreciei a iniciação dos novos MVP’s na Comunidade Microsoft!!!!

MVPs_Baptism

Eis a Microsoft MVP Lead Ibérica, Cristina Herrero, a “armar” mais um “cavaleiro MVP”…

PA030244

E a foto dos MVP’s presentes, para a posteridade!…

image

Foi, como não podia deixar de ser, um momento inesquecível, que irá perdurar na minha memória!!!

2008-09-24

Ainda a propósito do post anterior, foi colocada a questão de encontrar uma data que esteja entre a Data inicial e a Data final (por exemplo, 14/03/2007-11/05/2008) e depois partir daí para a contagem dos dias até à data final (que poderá estar também entre uma data inicial e final mais abaixo).


A imagem do que se pretende:

 

image
Ou seja,


Campos a preencher:


- Data de início (será 14/03/2007) - D2
- Data de fim (será 11/05/2008) -D4
- Capital (será 1000) - E2


Resultado pretendido:


De 14/03/2007 a 30/06/2007 - 109 dias à taxa de 0,1058 = 31,60
De 01/07/2007 a 31/12/2007 - 184 dias à taxa de 0,1107 = 55,80
De 01/01/2008 a 11/05/2008 - 132 dias à taxa de 0,1120 = 40,50
-------------------------------------------------- Total de juros: 127,90


Então, com a utilização da função PROCV(), poderemos chegar ao resultado pretendido.


Assim, teremos:

Em F2:=SE(D2="";ARRED(C2*((B2-A2)+1)/365*$E$2;2);ARRED(PROCV(D2;$A$2:$C$4;3)*((B2-D2)+1)/365*$E$2;2))


Em F3:=SE(D3="";ARRED(C3*((B3-A3)+1)/365*$E$2;2);ARRED(PROCV(D3;$A$2:$C$4;3)*((B3-D3)+1)/365*$E$2;2))


Em F4:=SE(D4="";ARRED(C4*((B4-A4)+1)/365*$E$2;2);ARRED(PROCV(D4;$A$2:$C$4;3)*((D4-A4)+1)/365*$E$2;2))
2008-09-22

No Forum do EXCELer, foi apresentada a seguinte questão (adaptada):


“A tabela abaixo representa valores de taxas de juros aplicáveis nas datas indicadas, isto é, entre as datas indicadas aplicam-se as taxas que estão à frente.
      A                  B                  C
1 01/01/07    30/06/07       0,1058
2 01/07/07    31/12/07       0,1107
3 01/01/08    30/06/08       0,1120
4 01/07/08    31/12/08       0,1120


(Em que A= Data de Início
Em que B= Data de Fim
Em que C= Taxa a Aplicar)

Se um documento for emitido em 14/03/07 e contar juros até 11/05/08, é possível obter o valor dos juros na totalidade.


Eu pretendia obter no final valores parcelares, assim:


De 14/03/2007 a 30/06/2007 - 109 dias à taxa de 0,1058 = 31,60
De 01/07/2007 a 31/12/2007 - 184 dias à taxa de 0,1107 = 55,80
De 01/01/2008 a 11/05/2008 - 132 dias à taxa de 0,1120 = 40,50 “


Representemos então, o que se pretende:

 

image


Para calcularmos o número de dias entre as duas datas que contêm a mesma taxa de juro a aplicar, utilizaremos a seguinte fórmula:

Em E1: =(B1-A1)+1

Em E2: =(B2-A2)+1

Em E3: =(B3-A3)+1

(A formatação destas células deverá ser “Número”, sem casas decimais)


E agora, para calcularmos os valores dos juros, de forma parcelar, teremos:

Em F1: =ARRED(C1*E1/365*1000;2)

Em F2: =ARRED(C2*E2/365*1000;2)

Em F3: =ARRED(C3*E3/365*1000;2)

(A formatação destas células deverá ser “Número”, com 2 casas decimais)

 

Tópicos relacionados:

2008-09-06

A estrutura para guardar múltiplos valores - de tipo semelhante ou diferente - chama-se registo. Para definir um registo em VBA, pode utilizar-se a indicação Type (Type Statement), a qual tem a seguinte sintaxe:
 
Type varType
    Variable1 As varType1
    Variable2 As varType2
    ...
    VariableN As varTypeN
End Type

VariableX é o nome da variável e varTypeX. Com uma declaração como esta, pode criar-se um tipo de dados que se pode usar nas nossas aplicações.
 
Exemplo de uma declaração para uma estrutura de registo:
 
Type Meuregisto

    registoNumero As Integer
    registoData As Date
    registoValor As Currency
    registoNome As String * 50

End Type



Esta estrutura pode ser utilizada da mesma maneira que as variáveis normais, como no exemplo a seguir:
 
Private registo1 As Meuregisto
 
Então, a forma de associar valores aos elementos do objecto, seria:
 
registo1.registoNumero = 1
registo1.registoData = "06-09-2008"
.
.
.

 Tópicos relacionados:

2008-08-31

Por mail, fizeram-me a seguinte pergunta (adaptada): "...gostava de incluir a informação ao utilizador quais as medidas a cortar de uma barra para maior aproveitamento, por exemplo: tenho 5 cortes com 112, 1 com 30, 2 com 4 etc etc.. as barras têm 6 metros e a intenção era tirar o maior aproveitamento no corte, para as sobras serem o menor possivel, isto é, escolher valores cuja soma fosse o mais perto possivel dos 6 metros, a mensagem ao utilizador fosse por exemplo: de uma barra cortas 5 com 112 e uma com 30, na outra cortas tantas com tanto e outras ou outra com tanto etc..."


Bom, vejamos a imagem da possível resolução do problema:

 

image

 

As fórmulas:

Em E5: =ARRED.PARA.BAIXO((C1/C5);0)

Em E6: =SE(C6="";"";ARRED.PARA.BAIXO((I5/C6);0))

Em E7: =SE(C7="";"";ARRED.PARA.BAIXO((I6/C7);0))

Em I5: =C1-(C5*E5)

Em I6: SE(C6="";"";I5-(C6*E6))

Em I7: SE(C7="";"";I6-(C7*E7))

 

Mas, e se não quisermos, no exemplo, cortar as 5 barras da medida 112, mas apenas 4? Como faríamos para, aceitando a alteração, harmonizar o número de cortes relativos às outras medidas?

Vejamos então, o exemplo do que agora referi:

image

 

Eis as fórmulas, referentes à coluna I:

Em I5: =SE(F5="";C1-(C5*E5);C1-(C5*F5))

Em I6: =SE(F6="";SE(C6="";"";I5-(C6*E6));SE(C6="";"";I5-(C6*F6)))

Em I7: =SE(F7="";SE(C7="";"";I6-(C7*E7));SE(C7="";"";I6-(C7*F7)))

 

Tópicos relacionados:

 

 

2008-08-16

Se pretendermos utilizar a indicação Option Explicit (Option Explicit Statement), a mesma deve aparecer num módulo antes de todos os procedimentos. Quando a Option Explicit aparece num módulo, devem declarar-se explicitamente todas as variáveis usando as indicações Dim, Private, Public, ReDim, ou Static. Se tentarmos usar uma variável tipo “undeclared”, ocorre um erro na compilação. Se não se utilizar a indicação Option Explicit, todas as variáveis “undeclared” são do tipo Variant, a menos que o tipo seja especificado de outra maneira, por exemplo, com uma indicação de DefType. Por norma, é de utilizar a indicação Option Explicit para evitar incorrecções de digitação do nome de uma variável existente.

Nas opções de VBA, encontra-se uma checkbox, chamada “Require Variable Declaration”:

image

Seleccionando esta checkbox, fazemos com que o VBA insira a linha “Option Explicit”, no topo de qualquer módulo que criamos. Esta indicação força-nos a declarar todas as variáveis antes de as referirmos no nosso código.

 

Tópicos relacionados: