Visual Basic para Aplicaciones - Selección rango macro excel

Life is soft - evento anual de software empresarial
 
Vista:

Selección rango macro excel

Publicado por JJ (2 intervenciones) el 26/03/2008 22:06:43
Hola,
¿Podría alguien decirme como puedo seleccionar un rango en una macro de excel?
El problema es cuando quiero seleccionar el rango desde la primera celda que contiene datos a la ultima celda de la misma columna que contiene datos.
El efecto sería el mismo que si presiono la tecla de función "fin" y la tecla flecha hacia abajo. Por ejemplo a3:a6
Si grabo la macro utilizando ésto último me lo hace bien la primera vez pero si el rango de datos se amplia sigue seleccionando la primera selección
Por ejemplo si el nuevo rango tiene datos desde a3:a9 utilizando la macro grabada anteriormente me seguiria seleccionando a3:a6 en vez de a3:a9.

Espero alguien me haya entendido y pueda ayudarme.

Muchas gracias.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Selección rango macro excel

Publicado por JuanC (243 intervenciones) el 27/03/2008 13:34:09
hay muchas formas de seleccionar rangos, todo dependerá de lo que tienes
como dato y de lo que quieres lograr...

esto es lo que teóricamente vos tenés (si no es así probá!)

[A3].Select
Range(Selection, Selection.End(xlDown)).Select

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Selección rango macro excel

Publicado por Joel (9 intervenciones) el 19/04/2008 01:51:26
Puueba este codigo, selecciona el rango aun cuando existan celdas vacias en la columna, es decir selecciona hasta que encuentra la ultima celda con un dato en la columna

Solo es validos hasta la version de excel 2003.

Range("A3:A" & Columns("A:A").Range("A65536").End(xlUp).Row).Select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Selección rango macro excel

Publicado por Juan  (1 intervención) el 28/11/2008 16:24:37
Gracias!!!!! Me salvaste después de 2 días de intentar hacer algo como lo que tú escribiste.
Yo lo modifiqué así...

Range("B3:E" & Columns("B:E").Range("B10").End(xlUp).Row).Select

Selecciona las columnas B a E.

Otra vez, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ricardo Rodriguez (rjrp1944)

RE:Selección rango macro excel

Publicado por Ricardo Rodriguez (rjrp1944) (14 intervenciones) el 29/09/2012 21:32:14
Hola a todos.

Hice una modificación de la la fórmula:

Range("A3:A" & Columns("A:A").Range("A65536").End(xlUp).Row).Select

Por esta otra, para contemplar la diferencia de capacidad del Excel 2003 y el Excel 2010

Dim PrimeraCelda As String, Rango As String, RangoF As String, PrimeraColumna as String
Dim PrimeraFila as Long

' Este Método permite tener celdas en blanco y se debe saber la Versión del Excel _
para eso se utiliza "Application.Version" para determinar la capacidad de Filas _
de cada versión. Este método hace la busqueda de abajo hacia arriba.
PrimeraColumna = "A"
PrimeraFila = 2
PrimeraCelda = PrimeraColumna & CStr(PrimeraFila)

Rango = PrimeraColumna & ":" & PrimeraColumna
RangoF = PrimeraColumna & IIf(Application.Version <= "12.0", "65536", _
IIf(Application.Version >= "13.0", "1048576", "1"))
UltimaFila = Columns(Rango).Range(RangoF).End(xlUp).Row

' Para seleccionar toda una columna
Range(PrimeraCelda & ":" & PrimeraColumna & UltimaFila).Select

' Para seleccionar una columna diferente, cambie el valor de PrimeraColumna por otro

Espero les sea de utilidad

Ing. Ricardo Rodríguez (MSc.)
Caracas, Venezuela
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ricardo Rodriguez (rjrp1944)

RE:Selección rango macro excel

Publicado por Ricardo Rodriguez (rjrp1944) (14 intervenciones) el 29/09/2012 22:02:42
Hola a todos.

Revisando el enunciado original del problema, enviado por JJ, le hice unos cambios al
programa:

Dim PrimeraCelda As String, Rango As String, RangoF As String, PrimeraColumna as String
Dim Celda as String, UltimaColumna as String
Dim PrimeraFila as Long, UltimaFila as Long

' Este Método permite tener celdas en blanco y se debe saber la Versión del Excel _
para eso se utiliza "Application.Version" para determinar la capacidad de Filas _
de cada versión. Este método hace la busqueda de abajo hacia arriba.
PrimeraColumna = "A"
PrimeraFila = 2
PrimeraCelda = PrimeraColumna & CStr(PrimeraFila)

Rango = PrimeraColumna & ":" & PrimeraColumna
RangoF = PrimeraColumna & IIf(Application.Version <= "12.0", "65536", _
IIf(Application.Version >= "13.0", "1048576", "1"))
UltimaFila = Columns(Rango).Range(RangoF).End(xlUp).Row

' Se determina la última celda en la fila "PrimeraFila". Ejemplo: "N13"
Celda = Range(PrimeraCelda).End(xlToRight).Address(RowAbsolute:=False, _ ColumnAbsolute:=False)

' Se obtiene la "UltimaColumna quitandole a la "Celda" el valor de la "Primera Fila". Ejemplo: "N"
UltimaColumna = Mid(Celda, 1, Len(Celda) - Len(CStr(PrimeraFila)))

' Para seleccionar toda las columnas
Range(PrimeraCelda & ":" & UltimaColumna & UltimaFila).Select

Espero les sea de utilidad

Ing. Ricardo Rodríguez (MSc.)
Caracas, Venezuela
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alexander

RE:Selección rango macro excel

Publicado por Alexander (2 intervenciones) el 13/05/2015 04:38:40
como podria colocar un condicionar en el rango ej si llega a la celda con el valor 3 entonces selecciona rango y para
y cuenta los datos que hay en la seleccion en un mensaje o una celda muchas gracias y que Dios te bendiga
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Selección rango macro excel

Publicado por ANDRES (1 intervención) el 28/12/2011 19:47:09
este es muy bueno gracias me sirvio en realizad y tambien funciona para excel 2010
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de alexander

RE:Selección rango macro excel

Publicado por alexander (2 intervenciones) el 13/05/2015 04:17:01
excelente muchas gracias pues la verdad cambie el rango A65536 por 361 filas hacia arriba y funciona perfecto
muchas gracias y que Dios te bendica desde Manizales-Colombia Alex y Paola
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Selección rango macro excel

Publicado por IGNACIO (2 intervenciones) el 25/09/2012 19:19:57
Function Pato_Concatena(RANGO As RANGE) As String
Dim c As RANGE
Dim cadena As String
cadena = ""
For Each c In RANGO
If Trim(c.Value) <> "" Then
If cadena <> c.Value Then
cadena = cadena & c.Value & ","
End If
End If
Next c
Pato_Concatena = Trim(cadena)
End Function

Function Pato_Left(RANGO As RANGE) As String
Dim c As RANGE
Dim cadena As String
Dim pos As Integer
pos = 0
cadena = ""
For Each c In RANGO
If Trim(c.Value) <> "" Then
If cadena <> c.Value Then
pos = InStr(1, c.Value, ",", vbTextCompare) - 1
cadena = Left(c.Value, pos)
Exit For
End If
End If
Next c
Pato_Left = Trim(cadena)
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Selección rango macro excel

Publicado por Pato (1 intervención) el 25/09/2012 19:49:00
Mi heroe!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OTROS METODOS Y FUNCIONES PARA MI PATO

Publicado por IGNACIO RIOS HERNANDEZ (2 intervenciones) el 25/09/2012 20:10:04
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
Public Function Pato_Funcion_CleanCadena(cadena As String) As String
'FUNCION QUE BARRE LA CADENA CADENA QUE RECIBE DE PARAMETRO Y LA REGRESA LIMPIA
    Dim chars As String
    chars = "<>{}[]^+;_/*?¿!$%&()='¡Ã¢£ª?€ƒ­¬®§š™Ã›±º³©"
    Dim i               As Integer
    Dim nCadena    As String
    On Local Error Resume Next
    'Asignamos valor a la cadena de trabajo para
    'no modificar la que envía el cliente.
    nCadena = cadena
    For i = 1 To Len(chars)
        nCadena = Replace(nCadena, Mid(chars, i, 1), "")
    Next i
    
    'nCadena = LCase(nCadena)
    nCadena = Replace(nCadena, "á", "a")
    nCadena = Replace(nCadena, "é", "e")
    nCadena = Replace(nCadena, "í", "i")
    nCadena = Replace(nCadena, "ó", "o")
    nCadena = Replace(nCadena, "ú", "u")
    
    nCadena = Replace(nCadena, "ã", "a")
    nCadena = Replace(nCadena, "ç", "c")
     
    
    nCadena = Replace(nCadena, "Á", "A")
    nCadena = Replace(nCadena, "É", "E")
    nCadena = Replace(nCadena, "Í", "I")
    nCadena = Replace(nCadena, "Ó", "O")
    nCadena = Replace(nCadena, "Ú", "U")
    
    nCadena = Replace(nCadena, "(", " ")
    nCadena = Replace(nCadena, ")", " ")
    nCadena = Replace(nCadena, ".", " ")
    nCadena = Replace(nCadena, ",", " ")
    nCadena = Replace(nCadena, ":", " ")
    nCadena = Replace(nCadena, "   ", " ") '3 ESPACIOS POR 1
    nCadena = Replace(nCadena, "  ", " ") '2 ESPACIOS POR 1
    
    
    'Devolvemos la cadena tratada
    QuitarCaracteres = Trim(nCadena)
End Function

Sub Pato_CleanCadena()
'PROCEDIMIENTO QUE BARRE TODAS LAS CELDAS SELECCIONADAS Y LIMPIA SU CONTENIDO
  For Each aCell In Selection.Cells
    Dim chars As String
    chars = "<>{}[]^+;_/*?¿!$%&/¨='¡Ã¢£ª?€ƒ­¬®§š™Ã›±º³©"
    Dim i               As Integer
    Dim nCadena    As String
    On Local Error Resume Next
    'Asignamos valor a la cadena de trabajo para
    'no modificar la que envía el cliente.
    nCadena = aCell.Value
    For i = 1 To Len(chars)
        nCadena = Replace(nCadena, Mid(chars, i, 1), "")
    Next i
    
    'nCadena = LCase(nCadena)
    nCadena = Replace(nCadena, "á", "a")
    nCadena = Replace(nCadena, "é", "e")
    nCadena = Replace(nCadena, "í", "i")
    nCadena = Replace(nCadena, "ó", "o")
    nCadena = Replace(nCadena, "ú", "u")
    
    nCadena = Replace(nCadena, "ã", "a")
    nCadena = Replace(nCadena, "ç", "c")
    
    nCadena = Replace(nCadena, "Á", "A")
    nCadena = Replace(nCadena, "É", "E")
    nCadena = Replace(nCadena, "Í", "I")
    nCadena = Replace(nCadena, "Ó", "O")
    nCadena = Replace(nCadena, "Ú", "U")
    
    
    nCadena = Replace(nCadena, "(", " ")
    nCadena = Replace(nCadena, ")", " ")
    
    nCadena = Replace(nCadena, ".", " ")
    nCadena = Replace(nCadena, ",", " ")
    nCadena = Replace(nCadena, ":", " ")
    nCadena = Replace(nCadena, "   ", " ") '3 ESPACIOS POR 1
    nCadena = Replace(nCadena, "  ", " ") '2 ESPACIOS POR 1
    
    aCell.Value = Trim(nCadena)
    
  Next
       MsgBox ("Fin de Pato_CleanCadena")
End Sub
'Public Function Pato_junto(rango As Range) As String
    ' variable de tipo Range para hacer referencia a las celdas
'    Dim obj_Cell As Range
    
    'variable donde guardo los datos concatenados
'    Dim LISTA As String
    
    'Recorrer todas las celdas seleccionadas en el rango actual
'    For Each obj_Cell In rango.Cells
        ' muestra el valor
            'MsgBox obj_Cell.Text, vbInformation, "Col " & obj_Cell.Column & " " & "Fila: " & obj_Cell.Row
'            LISTA = LISTA & obj_Cell.Text & ","
'    Next
    'regreso el resultado
'    Pato_junto = LISTA
'End Function
 
 
'Public Function Pato_suma(rango As Range) As Double
    ' variable de tipo Range para hacer referencia a las celdas
'    Dim obj_Cell As Range
    
    'variable donde guardo los datos concatenados
'    Dim misuma As Double
    
    'Recorrer todas las celdas seleccionadas en el rango actual
'    For Each obj_Cell In rango.Cells
        ' muestra el valor
'        If IsNumeric(obj_Cell.Text) Then
'            misuma = misuma + obj_Cell.Text
'        End If
'    Next
    'regreso el resultado
'    Pato_suma = misuma
'End Function
 
  
 
Public Sub Pato_validaciones()
 For Each aCell In Selection.Cells
 
       If aCell.Value = "A" Then
             aCell.Font.Bold = True
             aCell.Interior.ColorIndex = 1
        
        ElseIf aCell.Value = "B" Then
             aCell.Font.Bold = True
             aCell.Interior.ColorIndex = 2
        
        
        ElseIf aCell.Value = "C" Then
             aCell.Font.Bold = True
             aCell.Interior.ColorIndex = 3
            
       End If
  Next
    MsgBox ("Fin de Pato_validaciones")
    
End Sub
 
  
Sub Pato_seleccion()
  For Each aCell In Selection.Cells
  MsgBox (aCell.Value)
    'If UCase(aCell.Value) = "BLA" Then
    'End If
  Next
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OTROS METODOS Y FUNCIONES PARA MI PATO

Publicado por Pato (1 intervención) el 25/09/2012 23:08:16


Grax!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OTROS METODOS Y FUNCIONES PARA MI PATO

Publicado por EduardoToscano (1 intervención) el 30/07/2013 16:13:58
Espero todo ande bien.
He estado trabajando en una base de datos y necesito seleccionar una columna entera de datos
el problema está en que dicha columna es variable y en algunos casos los datos presentan gran cantidad de vacíos por lo que a veces el codigo funciona y a veces no.
El código es el siguiente

Cells(7, y + 3).Select
Range(Selection,Selection.End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown)).Select

Selection.Copy

El asunto es que no termino de seleccionar la columna de datos que necesito y ya no tengo espacio para otro
End(xlDown),

Sé que debe existir la manera de seleccionarlos todos

Si me podrian colaborar con esto estaré muy agradecido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

OTROS METODOS Y FUNCIONES PARA MI PATO

Publicado por J. Humberto (6 intervenciones) el 14/08/2013 04:37:08
Como identificas la columna donde necesitas seleccionar los espacios vacíos ??? bueno en resumen puedes ocupar la instrucción specialcells(xlCellTypeBlanks).

Por ejemplo: range("a1:G2").SpecialCells(xlCellTypeBlanks).Select

si conoces el rango lo mencionas o usa la posición de la columna y listo !!! espero te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AGRADECIMIENTOS

Publicado por Rodrigo Fernandez (1 intervención) el 02/04/2014 01:57:53
range("a1:G2").SpecialCells(xlCellTypeBlanks).Select

Superfuncion...me ahorraste un monton de instrucciones...genial...mil gracias
Como apunte se pueden borrar todas las filas que contienen datos vacios...para tener una base de datos limpia sin vacios:

range("a1:a800").SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete

Listo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar