About Me
Seguidores
Estatisticas
Se pretendermos que o tabulador de uma Worksheet obtenha o nome que colocarmos em determinada célula, podemos utilizar o seguinte código ( créditos para Juan Pablo Gonzalez ):
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then Sh.Name = Target
End Sub
E se pretendermos fazer exactamente o contrário, ou seja, obter numa determinada célula o nome do tabulador?
Então, aproveitando o código anterior, podemos alterá-lo para que o resultado seja o pretendido:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Range("$A$1") = Sh.Name
End Sub
Há dias, num grupo de discussão de Excel, foi colocada a seguinte questão (adaptada):
“
Pressupostos:
- Tenho uma folha de cálculo "Clientes" com uma lista de clientes;
- Tenho uma folha de cálculo "Modelo" que é um modelo;
Problema:
- preciso criar folhas de cálculo iguais à folha "Modelo", mas com os nomes constantes da lista de clientes da folha "Clientes".
Alguém me pode ajudar?”
Tomemos o seguinte exemplo ilustrativo:
O que temos:
a) Uma folha, denominada “Modelo”
b) Uma folha, denominada “Clientes”
O que pretendemos, será ter tantas folhas, quantos os nomes que se encontram na folha Clientes, com o nome de cada um deles no tabulador, mas com o conteúdo da folha “mestra” - “Modelo”.
Para uma melhor ilustração, suponhamos que dos 18 nomes, apenas pretendemos obter 6 folhas (de A1:A6), ou seja, de “Manuel a Jorge”. Então, o resultado seria:
Ou seja, todas as 6 folhas, criadas e já renomedas com os nomes pretendidos, teriam como conteúdo, o conteúdo da folha “Modelo”.
O Código, que executaremos em primeiro lugar e que dará para criar o número de folhas pretendido:
Private Sub Copia_Modelo()
Dim sNum As Integer
On Error Resume Next
sNum = InputBox("Quantos Clientes?")
For i = sNum To 1 Step -1
Sheets("Modelo").Select
Sheets("Modelo").Copy Before:=Sheets(1)
Next
Sheets("Clientes").Select
End Sub
Agora o código que executaremos em 2º lugar e que renomeará as folhas criadas anteriormente, com os nomes correspondentes ao número de clientes que estabelecemos com o Código anterior:
Private Sub Renomear_Folhas()
On Error Resume Next
For i = 1 To Worksheets.Count - 2
Sheets(i).Name = Worksheets("Clientes").Cells(i, 1).Value
Next i
End Sub
Por último, o Código que, por uma questão de comodidade, dá para apagar todas as folhas anteriormente criadas e renomeadas, ficando sempre e só, as folhas “Modelo” e “Clientes”:
Sub Delete_Sheets()
Dim sNum As Integer
On Error Resume Next
Application.DisplayAlerts = False
sNum = Worksheets.Count - 2
For i = sNum To 1 Step -1
Sheets(1).Select
Sheets(1).Delete
Next
Application.DisplayAlerts = True
Sheets("Modelo").Select
End Sub
Nota final: As folhas “Modelo” e “Clientes”, deverão ficar sempre na sequência em que se encontram no exemplo, ou seja, as duas últimas, à direita.
Tópicos relacionados:
A pergunta original, continha algo diferente, ou seja, dependia o resultado com base na junção de 2 critérios: freguesia e sexo:
“Gostaria de saber qual a fórmula para calcular o valor do peso do sexo masculino da freguesia de Bustos que mais se repete”.
Neste caso e para o resultado desejado, então o Código, poderia ser assim, tomando como células de controlo as células G2 (sexo) e H2 (Freguesia), como no exemplo do post anterior:
'----------------------------------------------------------
' Procedure : Validar_Click
' DateTime : 14-03-2009 18:51
' Author : Jorge Rodrigues
' Purpose : Atribuir valores no Range L1:L20 retirados
' : do Range D8:D17, a que correspondam,
' : no Range C8:C17, o nome da Freguesia em H2
' : e Sexo (M/F) em G2
'----------------------------------------------------------
'
Private Sub Validar_Click()
Dim spRange As Range
Dim cell As Range
Dim nome As Variant
Dim nome1 As Variant
Dim nome2 As Variant
Dim number As Integer
number = 0
nome = Range("H2").Value
nome1 = Range("G2").Value
nome2 = nome & nome1
Range("L1:L20").ClearContents
Set spRange = Range("C8:C17")
For Each cell In spRange
number = number + 1
If cell & cell.Offset(0, -1) = nome2 Then
Range("L" & number).Value = cell.Offset(0, 1)
End If
Next cell
End Sub
Já agora e para não aparecer, porventura, aquela sigla indesejável (#N/D), em I2, caso não exista qualquer repetição de valor, de acordo com os dois critérios, então a fórmula naquela célula, poderia ser assim:
=SE(É.ERRO(MODA(L1:L20));"";MODA(L1:L20))
Tópicos relacionados:
Há dias, colocaram-me, por e-mail, a seguinte questão (adaptada), que, igualmente foi posta num grupo de discussão:
“Gostaria de saber qual a fórmula para mostrar o valor do peso da freguesia de Bustos que mais se repete (função estatistica Moda() [ing. Mode()])?
Exemplo:
Nome Sexo Freguesia Peso
A F OIÃ 12
B M BUSTOS 11
C F OIÃ 12
D M BUSTOS 11
E F OIÃ 13
F M BUSTOS 14
G F OIÃ 15
H M BUSTOS 16
I F OIÃ 17
J M BUSTOS 18”
Teríamos, então, como resposta para BUSTOS, o valor 11.
Ilustrando o exemplo:
Ora, o peso que mais se repete na Freguesia de BUSTOS, é o 11.
O que se pretende, assim, é coligir, em primeiro lugar, todos os valores de peso a que corresponda a Freguesia BUSTOS, ou seja:
11, 11, 14, 16, 18.
Podemos, então, escolher como fonte, onde serão colocados tais valores, o Range L1:L20.
Assim, em I2, colocaremos a seguinte fórmula, utilizando a função MODA():
=MODA(L1:L20)
Resta-nos, agora, criar o código, para colocar, dentro desse Range – L1:L20, os valores que tenham correspondência com a Freguesia pretendida, no caso do exemplo, BUSTOS, o que daria os seguintes dados:
Cria-se o Botão de Comando, a que, no caso do exemplo, daremos o nome de VALIDAR:
E, se seguida, atribuiremos a esse Botão de Comando - VALIDAR, o seguinte Código:
'----------------------------------------------------------
' Procedure : Validar_Click
' DateTime : 14-03-2009 18:51
' Author : Jorge Rodrigues
' Purpose : Atribuir valores no Range L1:L20 retirados
' : do Range D8:D17, a que correspondam,
' : no Range C8:C17, ao nome da Freguesia BUSTOS
'----------------------------------------------------------
'
Private Sub Validar_Click()
Dim spRange As Range
Dim cell As Range
Dim nome As Variant
Dim number As Integer
number = 1
nome = Range("H2").Value
Range("L1:L20").ClearContents
Set spRange = Range("C8:C17")
For Each cell In spRange
number = number + 1
If cell = nome Then
Range("L" & number).Value = cell.Offset(0, 1)
End If
Next cell
End Sub
De notar que, como atribuímos para identificar o nome da Freguesia, a célula H2, então, com a simples modificação do conteúdo desta célula, para, por exemplo, OIÃ, que se encontra na tabela acima ficaríamos a saber, igualmente, o valor de peso que mais se repete nesta Freguesia, que seria o valor 12.
Tópicos relacionados:
Há dias, num grupo de discussão, foi colocada a seguinte questão:
“Nao sei porque o meu Excel 2003 apresenta as linhas e as colunas "numeradas"
com números. Quando deviam ser as colunas com letras. Como rectifico isso ?”
Logo de seguida, quem colocou a questão, deu, igualmente, a resposta:
“Ok, ja descobri.
1. Abra o Excel
2. Clique em ferramentas
3. Clique em opções
4. Na guia GERAL desmarque a opção "Estilo de referência R1C1"
A imagem do “problema”:
Era assim:
E passou a ficar assim:
Mas, depois de se ter acedido como acima foi descrito:
Tudo voltou ao normal…
Certo!!!
Mas, já agora, convinha dizer mais qualquer coisa acerca do chamado estilo de referência “R1C1” ou, á portuguesa, “L1C1”, em que R quer dizer “Row” ou L “Linha” e C quer dizer “Column” ou “Coluna”.
Então, o melhor é ler o que já muito se escreveu sobre este assunto.
Assim, deixo aqui uns links, para, quem tiver interesse, ter uma melhor compreensão.
Há dias, fizeram-me a seguinte pergunta (adaptada):
"O que preciso quando clico no comandButton, é que me forneça o menor valor da coluna C, mas em vez de aparecer só o valor 12.2 , apareça igualmente HE 100 AA, ou seja, o conteúdo correspondente na coluna B, na mesma linha."
Exemplo:
Resultado pretendido:
O Código (exemplo):
Private Sub CommandButton1_Click()Dim oRg As Range, iMin As Variant
Set oRg = Range("C10:C100")
'Para encontrar o valor mínimo
iMin = Application.Min(oRg)
'Apresenta o valor correspondente ao valor mínimo,
'e na célula à esquerda, o conteúdo correspondente
With Selection
MsgBox "Valor encontrado: " & ActiveCell.Value & vbCrLf & _
"Valor correspondente: " & ActiveCell.Offset(0, -1).Value
End With
End Sub
Dim nVal As Integer
If Sheets(1).Range("A22500").Value = 3 Then
MsgBox "Não pode imprimir mais nenhuma vez!..."
Cancel = True
Exit Sub
Else
nVal = Sheets(1).Range("A22500").Value
nVal = nVal + 1
Sheets(1).Range("A22500").Value = nVal
MsgBox "Só pode imprimir mais!..." & 3 - nVal
End If
End Sub
Private Sub Workbook_Open()
For Each Ctrl In Application.CommandBars.FindControls(ID:=109) ' Faz o disable do ícone Print Preview
Ctrl.Enabled = False
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=4) ' Faz o disable no Menu Ficheiro| Imprimir.
Ctrl.Visible = False
Next Ctrl
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each Ctrl In Application.CommandBars.FindControls(ID:=109) ' Faz o enable do ícone Print Preview
Ctrl.Enabled = True
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=4) ' Faz o enable no Menu Ficheiro| Imprimir.
Ctrl.Enabled = True
Next Ctrl
End Sub
Tópicos relacionados:
- Números dos ID's de Controlo do CommandBar (Microsoft)
- Disable Command bars and controls in Excel 97-2003 (Ron de Bruin)
- Sample macros to return ID for a CommandBar control (Microsoft)
- Lists of Control IDs - Excel 2003 e 2007, para Download (Microsoft)
- Create menu for use in international environment distributed as xla (VbaExpress)
Clique aqui em:
Boas festas!!! e faça o dowload do postal de boas festas!!!
Feliz Ano de 2009 para todos!!!
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.
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.