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
2005-06-27
A função EOMONTH(), que se encontra no Analysis ToolPak add-in, devolve o número de série correspondente ao último dia do mês que é apurado somando ou diminuindo o número de meses pretendido ao mês que serve de base, sendo a sintaxe a seguinte: EOMONTH(start_date,months).
No entanto, se não se tiver o add-in mencionado, pode efectuar-se o mesmo tipo de cálculo, utilizando as funções DATE(), YEAR() e MONTH() em conjunto. A única diferença é que no segundo caso, temos que adicionar ou subtrair 1 mês, para podermos obter o mesmo resultado:






Nota: as células B1 e B3 estão formatadas como data, porque se estiverem formatadas como geral, a devolução é o número de série.
2005-06-16
Marina Limeira (Forum brasileiro de Office), perguntou como seria possível escolher um fundo da folha de cálculo, de acordo com a seguinte alternativa:

Se fosse maior (>) que 50, o fundo seria uma imagem; se fosse inferior ou igual (<=) a 50, então a imagem seria outra.

Utlizando o Evento SelectionChange, podemos ter o seguinte resultado:

> 50:


<=50:


O Código:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A1") > 50 Then
        Worksheets("Folha1").SetBackgroundPicture "E:\camaleão5.jpg"
    Else
        Worksheets("Folha1").SetBackgroundPicture "E:\butterflies.jpg"
    End If
End Sub
2005-06-07
No post anterior, mostrei um exemplo com uma fórmula para contar o número de células com valor compreendido entre 0 e 15 dentro de um Range fixo ( no exemplo: A1:A6).

Mas como fazer, se pretendermos que o Range possa ser variável, ou seja, podendo ser A1:A6, ou A1:A8 ou A1:A12?. Então, o que teremos que fazer é construirmos a formula de modo a que à variável (x) em A1:A(x) seja atribuído um valor sem ser necessário estar sempre a alterar a fórmula:

Neste caso, sem termos que recorrer ao VBA, podemos utilizar uma célula de referência, a qual irá "informar" a fórmula de qual será o valor que irá receber, para que o Range pretendido seja avaliado.

No exemplo, a célula de referência é E1, que deve ser formatada como texto:
que pode ser formatada como número:



O Array em B1:

{=SUM((INDIRECT("A1:A"&VALUE(E1))>0)*(INDIRECT("A1:A"&VALUE(E1))<=15))}


=SUM((INDIRECT("A1:A"&E1)>0)*(INDIRECT("A1:A"&E1)<=15))

NOTA: Para obter o Array {} utilizar - CTRL + Shift + Enter


2005-06-06
Num forum sobre Excel, foi colocada a seguinte questão:
"Tenho uma tabela e gostaria de criar uma fórmula para contar o número de células com valor entre 0 e 15".

Vejamos então o exemplo:



Na tabela, verifica-se que existem 5 células com valores > 0 e <= 15. Então, em B1 podemos escrever:



O Array:

={SOMA((A1:A6>0)*(A1:A6<=15))}

NOTA: Para obter o Array {} utilizar - CTRL + Shift + Enter
2005-06-02
Num newsgroup de Excel, foi colocada a seguinte questão:

"Gostava que em determinadas àreas de uma worksheet só fosse possível escrever em maiúsculas. Existe alguma maneira de formatar uma célula dessa maneira?"

De notar que foi afirmado não se pretender usar do Evento WorkSheet_Change().

Bom, uma possível resposta a esta questão será socorrermo-nos de uma formatação de células em que a fonte a utilizar possua somente maiúsculas, como é o caso do exemplo seguinte:



No exemplo, utilizou-se uma TTF (Invite Engraved SF). Assim, ao escrever-se na célula A6 "exceler" (em minúsculas), o que aparece é o seu conteúdo em maiúsculas. De notar que o Excel assume internamente a função UPPER() ou MAIÚSCULAS(), ou seja, é como se tivessemos escrito na célula A6: =UPPER("exceler").
2005-05-27
Leal Diogo, a propósito de um post meu, datado de 30 do passado mês de Abril, sobre uma UDF [NomeLF()] que devolve o nome da folha, (opção "F"), formulou a seguinte questão:

"Se se tiverem 2 folhas em que se faz uso desta função, sempre que se mude o nome de uma das folhas a outra também devolve o mesmo nome.
Como é que se poderá parar o efeito nas outras folhas?"


De facto, perante esta pergunta, a resposta só poderá ser esta: a UDF referida, não resolve esta questão, uma vez que, como é referido, mudando-se o nome de uma das folhas, a outra devolve igualmente o nome da folha modificada.

A resolução do problema assenta na inclusão da Propriedade Caller associada ao objecto Application, ou seja do código   Application.Caller numa outra função, a que chamaremos TesteNomedaFolha():



O Código:

Public Function TesteNomedaFolha()
    Application.Volatile
    Dim rng As Range
    Set rng = Application.Caller
    TesteNomedaFolha = rng.Parent.Name
End Function


Nota: Função elaborada a partir de código apresentado num forum por Tom Ogilvy - MVP Excel, em Maio de 2000.
2005-05-26
João Pereira, num comentário a um post meu, formulou a seguinte questão:

"Tenho que fazer uma macro que copie a coluna que estiver indicada na célula A1 e colar numa nova planilha.

Exemplo: Se na célula A1 conter o dado "B", então a Macro vai copiar a coluna B e colar numa outra planilha...

Como devo fazer para que isso ocorra?"



Bom, uma resposta possível, será, tomando o exemplo acima descrito:

1º - cria-se um botão de comando na Sheet1, e atribui-se-lhe o código adequado à resolução:



2º clica-se no botão de comando para executar o código:



3º o resultado será, na Sheet2:



O Código:

Private Sub CommandButton1_Click()
    Dim strNome As String

    strNome = Range("A1").Value
    strNome = strNome & ":" & strNome
    Me.Range(strNome).Copy
    Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues, _
                                              Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub





Por vezes temos interesse em que não seja possível aceder às diferentes folhas de um workbook através dos respectivos tabuladores. Para isso, temos que nos socorrer de um pouco de código para conseguirmos esse efeito.

Exemplo:



Acedemos então ao Editor de VBE, clicando no icone do workbook com a tecla direita do rato, para incluirmos o respectivo código no mesmo workbook:



Depois de inserirmos o código, salvamos o ficheiro. Ao ser aberto novamente, já não aparecerão os tabuladores das folhas:



O Código:

Private Sub Workbook_Open()
    Sheets("Sheet1").Activate
    ActiveWindow.DisplayWorkbookTabs = False
End Sub


2005-05-24
Para desactivar uma tecla de função, podemos utilizar o seguinte Código:

Application.OnKey "{F3}", ""

Para activar novamente:

Application.OnKey "{F3}"
2005-05-21
Se pretendermos abrir um determinado programa (no exemplo o programa Calc.exe, que abre a calculadora) através de uma tecla de função (v.g. F3):



Podemos utilizar o seguinte Código:

Sub Auto_Open()
    Application.DisplayAlerts = False
    Application.OnKey "{F3}", "ShowCalc"
    Application.DisplayAlerts = True
End Sub


Sub ShowCalc()
    Shell "Calc.Exe", vbNormalFocus
End Sub