About Me
Com tecnologia do Blogger.
Seguidores
Estatisticas
2006-05-29
Excel: Novamente a Função INDIRECT()
12:06 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se se pretender mostrar numa determinada célula o conteúdo de uma outra célula de outra worksheet que pode não ser sempre a mesma, ou seja, por exemplo, a célula mostrar o valor correspondente ao valor acumulado do mês que se encontra numa determinada worksheet, cuja identificação é numérica e está baseada na digitação efectuada numa outra célula ( se valor 1, então Janeiro, se valor 2, então Fevereiro, etc.), pode utilizar-se a Função INDIRECT() para obter o resultado esperado:
O exemplo:
A Fórmula:
=INDIRECT("'"&$B$7&"'!D3")
2006-05-16
VBA: UsedRange
6:38 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos verificar em determinado Range se uma célula de uma coluna tem no seu conteúdo, por exemplo, o texto "REPARADO" e, em caso afirmativo, marcar toda a linha desse Range com um fundo colorido (no exemplo, o verde):
e, se, ao apagarmos o texto da célula, a cor da linha também venha a ser desfeita, como no exemplo:
Então podemos utilizar o seguinte Código:
Private Sub CommandButton1_Click()
Dim r As Long
For r = UsedRange.Rows.Count To 1 Step -1
If Range("G" & r) = "REPARADO" Then _
Range("A:J").Rows(r).Interior.ColorIndex = 10
Next r
For r = UsedRange.Rows.Count To 1 Step -1
If Range("G" & r) = "" Then _
Range("A:J").Rows(r).Interior.ColorIndex = 2
Next r
End Sub
2006-05-07
VBA: Ainda o Filtro
6:40 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Na continuação do post de 27 de Abril p.p., se pretendermos filtrar, por exemplo, por cliente e preparar a impressão de modo a só imprimir os dados filtrados,
podemos utilizar o seguinte código:
'-------------------------------------------------------------------------------
' Procedure : Filtra_Cliente_Click
' DateTime : 02-05-2006 20:23
' Author : JRod
' Purpose : Efectua Filtro por Cliente e prepara para impressão filtrada
'-------------------------------------------------------------------------------
'
Private Sub Filtra_Cliente_Click()
Dim myCliente
myCliente = ActiveCell.Value
Range("E6:E700").Select
If myCliente = "" Then
Selection.AutoFilter
Range("K1").Select
Else
Selection.AutoFilter Field:=1, Criteria1:="=" & myCliente, Operator:=xlAnd
ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address
Range("K1").Select
End If
End Sub
NOTA: No exemplo, para estabelecer o filtro pelo cliente desejado, clica-se na célula pretendida e depois no botão de comando que faz executar o procedimento.
podemos utilizar o seguinte código:
'-------------------------------------------------------------------------------
' Procedure : Filtra_Cliente_Click
' DateTime : 02-05-2006 20:23
' Author : JRod
' Purpose : Efectua Filtro por Cliente e prepara para impressão filtrada
'-------------------------------------------------------------------------------
'
Private Sub Filtra_Cliente_Click()
Dim myCliente
myCliente = ActiveCell.Value
Range("E6:E700").Select
If myCliente = "" Then
Selection.AutoFilter
Range("K1").Select
Else
Selection.AutoFilter Field:=1, Criteria1:="=" & myCliente, Operator:=xlAnd
ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address
Range("K1").Select
End If
End Sub
NOTA: No exemplo, para estabelecer o filtro pelo cliente desejado, clica-se na célula pretendida e depois no botão de comando que faz executar o procedimento.
2006-05-01
VBA: UDF's: contar ocorrências e somar valores, mediante a formatação (cor) dos valores inseridos
9:25 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos contar quantas células existem num determinado Range e que contenham valores apresentadas numa determinada cor, ou se quisermos somar os valores com a mesma cor contidos nesse mesmo Range, como no exemplo seguinte:
,
podemos criar duas User Defined Functions (UDF). Por outro lado, para sabermos a que número corresponde cada uma das 56 cores da palette de cores do Excel, podemos utilizar uma macro, que, ao que julgo, é da autoria do MVP Excel - Tom Ogilvy.
Os Códigos:
(Para contar as ocorrências):
Option Explicit
Function CountFc(rng As Range, Num As Long)
Dim Item
Application.Volatile
For Each Item In rng
If Item.Font.ColorIndex = Num Then CountFc = CountFc + 1
Next
End Function
(Para somar as ocorrências):
Option Explicit
Function SumFC(Source As Range, Num As Long)
Application.Volatile
Dim total As Double
Dim cell As Range
For Each cell In Source
With cell
If .Font.ColorIndex = Num Then
total = total + .Value
End If
End With
Next
SumFC = total
End Function
(Para mostrar a palette de cores):
' By Tom Ogilvy
Sub ShowPalette()
varr = SetPaletteArray
Set rng = Cells(1, 1).Resize(7, 8)
rng.Value = varr
rng.HorizontalAlignment = xlCenter
For Each cell In rng
cell.Interior.ColorIndex = cell.Value
Next
Range("A:H").ColumnWidth = 3.29
Range("A1:H2,A7,H7,E6,E7,F7").Font.ColorIndex = 2
End Sub
Public Function SetPaletteArray()
varr1 = Evaluate(" { 1,53,52,51,49,11,55,56; " & _
"9,46,12,10,14,5,47,16;" & _
"3,45,43,50,42,41,13,48;" & _
"7,44,6,4,8,33,54,15;" & _
"38,40,36,35,34,37,39,2;" & _
"17,18,19,20,21,22,23,24;" & _
"25,26,27,28,29,30,31,32}")
SetPaletteArray = varr1
End Function
Nota:
Como muito bem refere o MVP Excel - Kiril Lapin (KL), num newsgroup, a este propósito:
" 1) O problema principal, consiste em que o Excel não tem nenhum evento que seja impelido quando muda o formato da célula e, consequentemente, não há maneira de advertir uma fórmula, função, macro, etc., atempadamente, de que a mudança ocorreu.
2) Como se disse, não podemos detectar o momento da mudança do formato, pelo que só nos resta ir checando periodicamente (quanto mais frequentemente melhor). Isto poderá ser conseguido, entre outras coisas, mediante a volatilidade da fórmula."
,
podemos criar duas User Defined Functions (UDF). Por outro lado, para sabermos a que número corresponde cada uma das 56 cores da palette de cores do Excel, podemos utilizar uma macro, que, ao que julgo, é da autoria do MVP Excel - Tom Ogilvy.
Os Códigos:
(Para contar as ocorrências):
Option Explicit
Function CountFc(rng As Range, Num As Long)
Dim Item
Application.Volatile
For Each Item In rng
If Item.Font.ColorIndex = Num Then CountFc = CountFc + 1
Next
End Function
(Para somar as ocorrências):
Option Explicit
Function SumFC(Source As Range, Num As Long)
Application.Volatile
Dim total As Double
Dim cell As Range
For Each cell In Source
With cell
If .Font.ColorIndex = Num Then
total = total + .Value
End If
End With
Next
SumFC = total
End Function
(Para mostrar a palette de cores):
' By Tom Ogilvy
Sub ShowPalette()
varr = SetPaletteArray
Set rng = Cells(1, 1).Resize(7, 8)
rng.Value = varr
rng.HorizontalAlignment = xlCenter
For Each cell In rng
cell.Interior.ColorIndex = cell.Value
Next
Range("A:H").ColumnWidth = 3.29
Range("A1:H2,A7,H7,E6,E7,F7").Font.ColorIndex = 2
End Sub
Public Function SetPaletteArray()
varr1 = Evaluate(" { 1,53,52,51,49,11,55,56; " & _
"9,46,12,10,14,5,47,16;" & _
"3,45,43,50,42,41,13,48;" & _
"7,44,6,4,8,33,54,15;" & _
"38,40,36,35,34,37,39,2;" & _
"17,18,19,20,21,22,23,24;" & _
"25,26,27,28,29,30,31,32}")
SetPaletteArray = varr1
End Function
Nota:
Como muito bem refere o MVP Excel - Kiril Lapin (KL), num newsgroup, a este propósito:
" 1) O problema principal, consiste em que o Excel não tem nenhum evento que seja impelido quando muda o formato da célula e, consequentemente, não há maneira de advertir uma fórmula, função, macro, etc., atempadamente, de que a mudança ocorreu.
2) Como se disse, não podemos detectar o momento da mudança do formato, pelo que só nos resta ir checando periodicamente (quanto mais frequentemente melhor). Isto poderá ser conseguido, entre outras coisas, mediante a volatilidade da fórmula."
Subscrever:
Mensagens (Atom)