variable una sirve seleccionar referencia rango que para otra macro hoja hacer desde cumplan condicion celdas celda asignar activesheet activa excel vba

una - Crear rangos de Excel utilizando los números de columna en vba?



macro seleccionar rango desde celda activa (8)

¿Cómo es posible crear un rango en vba usando el número de columna, en lugar de letra?


Range.EntireColumn

¡Sí! Puede usar Range.EntireColumn MSDN

dim column : column = 4 dim column_range : set column_range = Sheets(1).Cells(column).EntireColumn

Range ("ColumnName: ColumnName")

Si busca una columna específica, puede crear un rango de columna codificado con la sintaxis, por ejemplo, Range("D:D") .

Sin embargo, utilizaría toda la columna, ya que proporciona más flexibilidad para cambiar esa columna en otro momento.

Hoja de trabajo.Columnas

Worksheet.Columns proporciona acceso de rango a una columna dentro de una hoja de trabajo. MSDN

Si desea acceder a la primera columna de la primera hoja. Columns función Columns en la hoja de trabajo.

dim column_range: set column_range = Sheets(1).Columns(1)

La propiedad Columns también está disponible en cualquier MSDN Range

EntireRow también puede ser útil si tiene un rango para una sola celda pero le gustaría llegar a otras celdas de la fila, similar a una LOOKUP

dim id : id = 12345 dim found : set found = Range("A:A").Find(id) if not found is Nothing then ''Get the fourth cell from the match MsgBox found.EntireRow.Cells(4) end if


A continuación hay dos soluciones para seleccionar el rango A1.

Cells(1,1).Select ''(row 1, column 1) Range("A1").Select

También mira este enlace;

Recomendamos encarecidamente que use Range en lugar de Cells para trabajar con celdas y grupos de celdas. Hace tus oraciones mucho más claras y no estás obligado a recordar que la columna AE es la columna 31.

La única vez que usará Celdas es cuando desee seleccionar todas las celdas de una hoja de trabajo. Por ejemplo: Cells.Seleccione Para seleccionar todas las celdas y luego vacíe todas las celdas de valores o fórmulas que usará: Cells.ClearContents

-

"Células" es particularmente útil cuando se configuran los rangos dinámicamente y se recorren los intervalos mediante el uso de contadores. La definición de rangos utilizando letras como números de columna puede ser más transparente en el corto plazo, pero también hará que su aplicación sea más rígida ya que son representaciones "codificadas", no dinámicas.

Gracias a Kim Gysen


Aquí hay un reemplazo condensado para la función ConvertToLetter que en teoría debería funcionar para todos los enteros positivos posibles. Por ejemplo, 1412 produce "BBH" como resultado.

Public Function ColumnNumToStr(ColNum As Integer) As String Dim Value As Integer Dim Rtn As String Rtn = "" Value = ColNum - 1 While Value > 25 Rtn = Chr(65 + (Value Mod 26)) & Rtn Value = Fix(Value / 26) - 1 Wend Rtn = Chr(65 + Value) & Rtn ColumnNumToStr = Rtn End Function


En caso de que buscara transformar su número de columna en una carta:

Function ConvertToLetter(iCol As Integer) As String Dim iAlpha As Integer Dim iRemainder As Integer iAlpha = Int(iCol / 27) iRemainder = iCol - (iAlpha * 26) If iAlpha > 0 Then ConvertToLetter = Chr(iAlpha + 64) End If If iRemainder > 0 Then ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) End If End Function

De esta forma podrías hacer algo como esto:

Function selectColumnRange(colNum As Integer, targetWorksheet As Worksheet) Dim colLetter As String Dim testRange As Range colLetter = ConvertToLetter(colNum) testRange = targetWorksheet.Range(colLetter & ":" & colLetter).Select End Function

Esa función de ejemplo seleccionaría la columna completa (es decir, Rango ("A: A"). Seleccione)

Fuente: http://support.microsoft.com/kb/833402


Estas respuestas parecen extrañamente intrincadas. A menos que me falta algo ... si quieres convertir números en letras, puedes almacenarlos todos en una matriz usando un bucle for y luego llamar al número asociado con esa letra de columna. Al igual que

For intloop = 1 To 26 colcheck(intloop) = Chr$(64 + intloop) For lenloop = 1 To 26 colcheck((intloop * 26) + lenloop) = Chr$(64 + intloop) & Chr$(64 + lenloop) For terloop = 1 To 26 colcheck((intloop * 676) + (lenloop * 26) + terloop) = Chr$(64 + intloop) & Chr$(64 + lenloop) & Chr$(64 + terloop) For qualoop = 1 To 26 colcheck((intloop * 17576) + (lenloop * 676) + (terloop * 26) + qualoop) = Chr$(64 + intloop) & Chr$(64 + lenloop) & Chr$(64 + terloop) & Chr$(64 + qualoop) Next qualoop Next terloop Next lenloop Next intloop

A continuación, utilice colcheck (sucolumnnumberhere) y obtendrá el encabezado de columna asociado con esa letra (es decir, colcheck (703) = AAA


Haha, Lovely, déjame también incluir mi versión del código de stackPusher :). Estamos usando esta funcionalidad en C #. Funciona bien para todos los rangos de Excel .:

public static String ConvertToLiteral(int number) { int firstLetter = (((number - 27) / (26 * 26))) % 26; int middleLetter = ((((number - 1) / 26)) % 26); int lastLetter = (number % 26); firstLetter = firstLetter == 0 ? 26 : firstLetter; middleLetter = middleLetter == 0 ? 26 : middleLetter; lastLetter = lastLetter == 0 ? 26 : lastLetter; String returnedString = ""; returnedString = number > 27 * 26 ? (Convert.ToChar(firstLetter + 64).ToString()) : returnedString; returnedString += number > 26 ? (Convert.ToChar(middleLetter + 64).ToString()) : returnedString; returnedString += lastLetter >= 0 ? (Convert.ToChar(lastLetter + 64).ToString()) : returnedString; return returnedString; }


Para hacer referencia al rango de celdas, puede usar Rango (Celda 1, Celda 2), muestra:

Sub RangeTest() Dim testRange As Range Dim targetWorksheet As Worksheet Set targetWorksheet = Worksheets("MySheetName") With targetWorksheet .Cells(5, 10).Select ''selects cell J5 on targetWorksheet Set testRange = .Range(.Cells(5, 5), .Cells(10, 10)) End With testRange.Select ''selects range of cells E5:J10 on targetWorksheet End Sub


Realmente me gusta la función ConvertToLetter de stackPusher como solución. Sin embargo, al trabajar con él noté varios errores que ocurren en entradas muy específicas debido a algunos defectos en las matemáticas. Por ejemplo, ingresar 392 devuelve ''N /', 418 devuelve ''O /', 444 devuelve ''P /', etc.

Rehice la función y el resultado produce la salida correcta para todas las entradas hasta 703 (que es el primer índice de columna de tres letras, AAA).

Function ConvertToLetter2(iCol As Integer) As String Dim First As Integer Dim Second As Integer Dim FirstChar As String Dim SecondChar As String First = Int(iCol / 26) If First = iCol / 26 Then First = First - 1 End If If First = 0 Then FirstChar = "" Else FirstChar = Chr(First + 64) End If Second = iCol Mod 26 If Second = 0 Then SecondChar = Chr(26 + 64) Else SecondChar = Chr(Second + 64) End If ConvertToLetter2 = FirstChar & SecondChar End Function