Excel VBA: Gamme de Tableau de chaînes en 1 étape
Je sais que vous pouvez facilement prendre une plage de cellules et claque dans un Tableau de type Variant, mais je veux travailler avec un tableau de chaîne (parce que c'est unique-dimensions et prend moins de mémoire qu'un tableau de type Variant).
Est-il un moyen de convertir automatiquement une plage dans un tableau de chaînes?
Droit maintenant, je suis en utilisant une fonction qui va prendre de la gamme et de sauvegarder les valeurs dans un tableau de type variant, puis convertir le tableau de variant d'un tableau de chaînes. Il fonctionne bien , mais je suis à la recherche d'un moyen d'aller directement à partir de la gamme de tableau de chaînes. Toute aide serait grandement appréciée.
Function RangeToArray(ByVal my_range As Range) As String()
Dim vArray As Variant
Dim sArray() As String
Dim i As Long
vArray = my_range.Value
ReDim sArray(1 To UBound(vArray))
For i = 1 To UBound(vArray)
sArray(i) = vArray(i, 1)
Next
RangeToArray = sArray()
End Function
Mise à JOUR:
Il est à la recherche comme il n'existe aucun moyen de sauter l'étape de jeter les données dans un tableau de variables d'abord avant de le convertir en un seul dimensions tableau de chaînes. Une honte si c'est vrai (même si il ne prend pas beaucoup d'effort, j'aime ultra-optimiser donc, j'espérais qu'il y avait un moyen de sauter cette étape). Je vais fermer la question dans quelques jours, si aucune solution ne se présente. Merci pour les commentaires les gars!
UPDATE2:
Réponse va à Simon qui l'a mis dans un grand effort (donc tout le monde) et utlimately souligné, il est en effet impossible d'aller de l'aire de répartition de tableau de chaîne d'un seul coup. Merci à chacun de vous.
- Il y a direct à la mémoire routines de manipulation, vous pouvez accéder en VBA pour créer une forme très efficace de la fonction de convertir le tableau. Je n'ai pas le temps et les compétences d'un fouet, bien que j'ai quelques mappage de la mémoire de code dans mon application principale, de sorte qu'il est là-bas, et vous permettra de faire un extrêmement efficace de la matrice de la copie du programme.
- Le lien pour une réponse que j'ai donné avec certaines des fonctions de la mémoire c'est de here.
- Bien que je n'étais pas en mesure d'appliquer l'info dans vos liens pour ce problème particulier, il était un bon à lire et intéressant. Merci pour le lien.
Vous devez vous connecter pour publier un commentaire.
Comment sur...
variantValues
alors ne sera pas un tableau mais un seulVariant
valeur. Vous pouvez ajouter un simpletheRange.Cells.Count = 1
vérifier pour tenir compte de ce cas.Vous pouvez aller directement à partir d'une plage d'un tableau à l'aide des fonctions Split, Join et un délimiteur pas dans le texte.
WorksheetFunction.Transpose(SrcRange)
Invalid procedure call or argument
.Si vous ne me dérange pas de modifier le contenu du presse-papiers puis:
COPIE de la gamme dans le presse-papiers avec la méthode de Copie:
Copier le contenu du presse-papiers à une variable de type string (rechercher sur ce site ou ailleurs pour les fonctions de transfert de chaînes vers/à partir du presse-papiers).
DIVISER la chaîne en un tableau de type variant:
FACULTATIF: Le tableau aura un vide supplémentaire élément, car il y a toujours un Retour supplémentaire (vbCrLf) à la fin du texte que vous venez de copier dans le presse-papiers. Pour supprimer simplement redimensionner le tableau:
Très simple et rapide!!!
Inconvénients sont que le presse-papiers peuvent changer lorsque vous y attendez le moins, (lors d'un recalcul) et qu'il ne produit que des tableaux de chaînes de caractères (pas de Double numérique ou d'autres types de valeur).
Ce serait TRÈS UTILE si vous travaillez avec beaucoup de fonctions répétitives (en milliers) qui utilisent les mêmes données (milliers de points de données). La première fois que la fonction est appelée, de faire tous les calculs intermédiaires sur les plages de données que vous avez besoin d'enregistrer les résultats dans les variables statiques. Également enregistrer une chaîne copie de votre entrée de gammes via le presse-papiers. À chaque appel de votre fonction, convertir les gammes d'entrée de texte via le presse-papiers, et de les comparer avec la copie enregistrée. Si elles sont identiques, vous pouvez être en mesure de contourner beaucoup de vos calculs préliminaires.
Plages nommées utilisé en VBA sont déjà des tableaux. Donc d'abord faire la gamme dans une plage nommée, alors consultez-le et supprimez la plage nommée.
Par exemple: