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
2006-02-11
Num newsgroup, foi feita a seguinte pergunta: Será que é possivel num Range em que tenho números (1,2,3,4,5, etc.) acrescentar letras atrás (COL1,COL2,COL3,COL4,COL5, etc.) sem editar célula a célula?

Selecciona-se o Range pretendido:



Executa-se a macro:



O resultado:



O Código do exemplo, em VBA:

Option Explicit

Sub AdicionaTexto()

    Dim rng As Range
    Dim rngCell As Range
    Const sCHARACTER As String = "COL"

On Error GoTo Exit_AdicionaTexto

    Set rng = ActiveWindow.RangeSelection

        For Each rngCell In rng.Cells
            If IsEmpty(rngCell.Value) = False Then
                    rngCell.Value = sCHARACTER & rngCell.Value
            End If
        Next rngCell

Exit_AdicionaTexto:

    Set rngCell = Nothing
    Set rng = Nothing

End Sub
2006-02-06
Se pretendermos efectuar um cálculo para obter a diferença entre dois horários e sabermos o resultado em minutos, podemos utilizar, por exemplo, os seguintes métodos:








E se a hora final for inferior à hora inicial, como no caso de a hora final ser já depois da meia-noite? Aqui, podemos utilizar a seguinte fórmula:

2006-01-22
O MVP em Excel,Kirill Lapin, também conhecido por KL, apresentou uma alternativa ao post anterior, que pela sua qualidade e simplicidade, passo a referir:

O Código:

Private Sub CommandButton2_Click()
    Dim r As Long
    For r = UsedRange.Rows.Count To 1 Step -1
        If Range("A" & r) = "" And Range("H" & r) = "" Then _
            Range("A:H").Rows(r).Interior.ColorIndex = 48
    Next r
End Sub
2006-01-14
Se tivermos um determinado Range de dados como no exemplo que se segue:



e quisermos colorir as linhas totalmente em branco desse Range:



Podemos utilizar um pouco de VBA.

O Código:

Private Sub CommandButton2_Click()
    Dim RowNdx As Long
    Dim LastRow As Long
    Dim x
    Dim y


    LastRow = ActiveSheet.UsedRange.Rows.Count
    For RowNdx = LastRow To 1 Step -1
        On Error Resume Next
        x = Cells(RowNdx, "A").Value = ""
        y = Cells(RowNdx, "H").Value = ""
        If x Then
            If y Then
                Cells(RowNdx, "A").Interior.ColorIndex = 48
                Cells(RowNdx, "B").Interior.ColorIndex = 48
                Cells(RowNdx, "C").Interior.ColorIndex = 48
                Cells(RowNdx, "D").Interior.ColorIndex = 48
                Cells(RowNdx, "E").Interior.ColorIndex = 48
                Cells(RowNdx, "F").Interior.ColorIndex = 48
                Cells(RowNdx, "G").Interior.ColorIndex = 48
                Cells(RowNdx, "H").Interior.ColorIndex = 48
            End If
        End If
    Next RowNdx
End Sub
2006-01-09
Por vezes podemos ter a necessidade de redefinir uma tecla para uma outra. No exemplo seguinte, redefine-se a tecla ENTER (incluindo a numérica) para a tecla TAB e provoca-se um avanço de uma coluna na mesma linha:


Sub Auto_open()
    Application.OnKey "~", "JumpNext"
    Application.OnKey "{ENTER}", "JumpNext1"
End Sub


Sub JumpNext()
    r = ActiveCell.Row
    c = ActiveCell.Column


    If c >= 1 Then
        c = c + 1
        r = r
    Else
        
    End If


    Cells(r, c).Activate


End Sub

Sub JumpNext1()
    r = ActiveCell.Row
    c = ActiveCell.Column


    If c >= 1 Then
        c = c + 1
        r = r
    Else
        
    End If


    Cells(r, c).Activate


End Sub
2006-01-03
Se tivermos preenchidas linhas, como no exemplo



e pretendermos inserir linhas em branco após 4 linhas de dados, ou seja, sempre à próxima 5ª linha,



podemos utilizar o seguinte Código, adaptado de Dave Peterson:

Private Sub CommandButton1_Click()

'Adiciona 1 linha em branco após 4 linhas
'Código original por: Dave Peterson
    
    Dim iCtr As Long
    Dim LastRow As Long
    Dim myRng As Range
    
    With ActiveSheet
        LastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
        Set myRng = Nothing
        For iCtr = 5 To LastRow Step 4
            If myRng Is Nothing Then
                Set myRng = .Cells(iCtr, "A")
            Else
                Set myRng = Union(.Cells(iCtr, "A"), myRng)
            End If
        Next iCtr
    End With

    If myRng Is Nothing Then
        'Não faz nada
    Else
        myRng.EntireRow.Insert
    End If
    
End Sub
2005-12-29
É com muito gosto que informo da existência de um Grupo de Discussão sobre Microsoft Office no Brasil, do qual sou, a partir de ontem, dia 28-12-2005, membro: Microsoft Users Group Rio Grande do Sul - Brasil




2005-12-26
Como é sabido, o caracter " / " (slash) é um caracter especial em formatos numéricos e que é usado em datas e fracções.

Mas de que modo podemos fazer com que o Excel trate tal caracter de um modo literal numa formatação, como por exemplo: 1234/56789?

O modo como o Excel "força" o caracter " / " (slash) a ser tratado literalmente, é precedendo-o com o caracter " \ " (backslash).

Claro que a introdução é efectuada como um número inteiro, ou seja, 123456789, para obter o resultado 1234/56789.

Vejamos o exemplo:



Utilizando a formatação personalizada,




Obteremos então:

2005-12-11
Um dia destes, foi-me perguntado, por mail, como é que se consegue, numa coluna, obter uma sequência de datas coincidentes com o fim de cada mês, assim:
31-01-2005
28-02-2005
31-03-2005
etc .....

Tomemos o seguinte exemplo:

No Range A1:A12, introduzem-se os 12 meses do ano e em A13, insere-se o ano pretendido:




O Código, para uma possível solução, em C1:

=DAY(DATE($A$13;MONTH(DATEVALUE(A1&"-"&$A$13))+1;0))&"-"&MONTH(DATEVALUE(A1&"-"&$A$13))&"-"&$A$13

NOTA 1: Esta fórmula deve ser copiada até à célula C12, para indicar o último dia correspondente a cada mês.

NOTA 2: Alterando o ano em A13, por exemplo, para 2008, verificaremos que o último dia do mês de Fevereiro passará a ser 29, uma vez que 2008 é um ano bissexto.
2005-12-07
Por norma, a ordenação ascendente ou descendente, é efectuada de cima para baixo (Top to Bottom):



mas também pode ser efectuada da esquerda para a direita (Left to Right):



No entanto, como fazer, de modo a efectuarmos múltiplos sorts Left to Right. como, por exemplo, no seguinte Range:



de maneira a, de uma só vez, ficar como segue?



Tom Ogilvy, mostrou, em 2001, num newsgroup de Excel, como se pode fazer este tipo de sort, através de VBE.

O Código, adaptado:

Private Sub CommandButton1_Click()
'baseado numa macro de Tom Ogilvy, 2001-03-24, em "Excel Programming"
Dim rw As Range
If Selection.Columns.Count = 1 Then
   MsgBox "Seleccionar mais do que 1 célula ou mais do que 1 coluna"
   Exit Sub
End If
For Each rw In Selection.Rows
    rw.Sort key1:=rw, Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight
Next
End Sub