About Me
Com tecnologia do Blogger.
Seguidores
Estatisticas
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
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:
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
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
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
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
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:
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.
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
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
Subscrever:
Mensagens (Atom)