Je cherchais un moyen de faire ce que dit le titre et vient de trouver le fil de suivi : Excel: Listing Numbers In Between 2 NumbersExcel: Comment lister les numéros d'une séquence d'intervalles?
Mais mon cas est un peu différent: il y a une cellule où sera dactylographiées des nombres entiers séparés par des virgules et/ou des traits d'union, rendant intervalles multiples (à peu près comme ce champ 'page' trouvé dans beaucoup de boîtes de dialogue d'impression).
Par exemple: 1-3,9-11,17,19,21-22,25
Et je dois le résultat à retourner dans une autre cellule, mais avec chaque numéro séparés sur les lignes, comme ci-dessous :
Je peux le faire en utilisant Excel des fonctions natives, mais pour une seule intervalle (par exemple: 1-9). Pour quelque chose de plus que cela, la formule ne fonctionne pas.
Existe-t-il un moyen d'accomplir tout cela dans VBA?
Quelqu'un pourrait-il me diriger vers une direction?
Toute aide est très appréciée.
Cordialement
[Mise à jour]
J'utilisant le code pour quelques semaines, mais juste de réaliser que je dois éviter des zéros, des chiffres répétés et aussi des numéros dans l'ordre décroissant.
par exemple.
, 1,3- 10,8, 12,14, 16,16 , 22, 27,24 -30,36, 42,39
Ainsi , J'ai besoin d'un #VALUE! un message d'erreur sera renvoyé si les nombres tapés ne sont pas dans l'ordre croissant ou si zéro ou des nombres répétés ont été trouvés.
Je travaille sur le code et déjà résolu les problèmes mentionnés ci-dessus pour seulement les intervalles typés (x-y), mais je ne peux pas trouver une solution pour les nombres discrets délimités par des virgules.
Toute aide est très appréciée.
Le code jusqu'à présent:
Function RANGEX(strInput As String) As String
Dim intCurrent As Integer
Dim outputArray() As Variant
Dim intCount As Integer
intCount = 1
For Each i In Split(strInput, ",")
ReDim Preserve outputArray(1 To intCount)
If InStr(i, "-") > 0 Then
If CInt(Split(i, "-")(0)) > 0 And CInt(Split(i, "-")(0)) < CInt(Split(i, "-")(1)) Then
For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1))
intCurrent = x
ReDim Preserve outputArray(1 To intCount)
outputArray(intCount) = intCurrent
intCount = intCount + 1
Next x
Else
RANGEX = CVErr(xlErrValue)
End If
Else
ReDim Preserve outputArray(1 To intCount)
intCurrent = CInt(i)
outputArray(intCount) = intCurrent
intCount = intCount + 1
End If
Next i
RANGEX = Join(outputArray, ",")
End Function
Hey, il semble que vous lancez un exercice de codage entier plutôt qu'un problème spécifique: pouvez-vous donner quelques exemples de ce que vous avez essayé dans VBA? – neophlegm
@neophlegm Salut Désolé –
Salut @neophlegm. Je suis désolé. Je pense que je ne pourrais pas expliquer mon problème d'une manière que n'importe qui pourrait le comprendre. Quoi qu'il en soit, j'essayais de créer un fichier d'enregistrement où d'autres utilisateurs pouvaient demander des modifications à certains documents (déjà numérotés). Ainsi, si quelqu'un veut apporter les mêmes modifications à plusieurs documents, la cellule avec cet intervalle fonctionnerait avec un moteur que j'ai fait en utilisant les fonctions natives d'Excel. Et la seule chose qui manque est une fonction VBA capable de faire ce que le titre dit. –