lit en rangées dans une feuille p>
li>
vérifie si la colonne E a le caractère "; #" et analyse la chaîne sur ce caractère p>
li>
crée une nouvelle ligne et copie et colle le contenu de la ligne de la ligne analysée à la nouvelle ligne (les deux rangées auront le même contenu) p>
li>
renomme la colonne d'origine au mot qui vient avant; # "et renomme la colonne copiée sur le mot qui suit" # " p>
li>
ol> Exemple avec trois colonnes: strong> Ce dont j'ai besoin : strong>
rangée d'origine: em> string a; #string b; #stringc (cellule 1) complète (cellule 2) 5/20/2019 (Cell 3) P>
mise à jour_original Row: em> string un complet 5/20/2019
Nouvelle ligne 1: em> String B Terminer 5/20/2019
nouvelle ligne 2: em> string c remplaçable 5/20/2019 p>
3 Réponses :
J'ai choisi d'utiliser un combo de Voici les données que j'ai utilisées: p> len () code> et INSTR () code> pour figurer où "complet" était dans votre chaîne pour comprendre le contenu à ajouter à chaque partie de la scission. J'ai fait quelques hypothèses liées à vos colonnes / lignes (voir image ci-dessous):
PostScript, j'ai tapé du haut de ma tête, alors mes variables ne sont pas identiques à la vôtre et j'ai nettoyé un peu
Faire beaucoup d'hypothèses sur la base de ce qui semble être des informations incomplètes ici, mais selon les informations et les exemples fournis, quelque chose comme cela devrait fonctionner pour vous:
Sub tgr()
Dim ws As Worksheet
Dim rData As Range
Dim aResults() As Variant
Dim aData As Variant
Dim vTemp As Variant
Dim sTemp As String
Dim ixResult As Long
Dim i As Long, j As Long
Set ws = ActiveWorkbook.ActiveSheet
Set rData = ws.Range("A1").CurrentRegion
If rData.Cells.Count = 1 Then
ReDim aData(1 To 1, 1 To 1)
aData(1, 1) = rData.Value
Else
aData = rData.Value
End If
ReDim aResults(1 To 65000, 1 To UBound(aData, 2))
ixResult = 0
For i = 1 To UBound(aData, 1)
For Each vTemp In Split(Replace(aData(i, 1), ";#", ","), ",")
If Len(Trim(vTemp)) > 0 Then
ixResult = ixResult + 1
aResults(ixResult, 1) = Trim(vTemp)
For j = 2 To UBound(aData, 2)
aResults(ixResult, j) = aData(i, j)
Next j
End If
Next vTemp
Next i
rData.Resize(ixResult).Value = aResults
End Sub
Merci @Tigeravatar. J'ai ajouté un commentaire ci-dessus, mais voici d'autres éclaircissements: j'ai besoin d'analyser uniquement dans les cellules où des caractères spéciaux "; #" apparaissent, qui sont toujours dans la colonne E dans la feuille de calcul (mais pas dans toutes les cellules de la colonne E). De plus, stringa; #stringb; #stringc code> est dans la même cellule et complet code> et 5/20/19 code> est dans deux cellules différentes sur la même rangée. Le résultat que je veux avoir est les 3 lignes suivantes: première ligne - stringa code> (cellule 1) complète code> (Cell 2), 5/20/19 code> (cellule 3); Deuxième rangée - stringb code> complète code> 5/20/19 code>; troisième rangée - stringc code> complète code> (cellule 2) 5/20/19 code> (cellule 3)
Notez que j'ai 22 colonnes et plus de 1000 rangées
@gyny avec ce que j'ai fourni, vous devriez pouvoir la modifier pour répondre à vos besoins. Si vous ne comprenez pas le code suffisamment pour le modifier, je recommande de progresser dans le code avec F8 code> pour voir ce que cela fait et googling tout ce que vous avez des questions sur la première question. Ce n'est pas vraiment un site "code pour moi", nous vous aidons à surmonter les obstacles de votre code. Ce qui est fourni ici est une base qui peut être configurée à vos exigences relativement facilement si vous comprenez le code.
Tant que vous n'avez pas besoin de la colonne code> code> de votre capture d'écran dans l'ordre particulier de votre affichage, il s'agit d'une tâche simple pour simplement p> et vous avez terminé: p> requête d'alimentation code> (AKA Obtenir et transformer code> dans Excel 2016 +).
Get & Transform Data Code> à partir de Table / Plage Code> Li>
; # code> et pas seulement # code> li>
@gyny content d'aider. Si ma réponse satisfait votre problème, j'apprécierais que si vous pouviez le marquer comme accepté. Vous pouvez lire Que dois-je faire quand quelqu'un répond à ma question pour plus d'informations.
Vous dites que cela "crée une nouvelle ligne", mais dans la prochaine étape, vous dites "renomme la colonne d'origine". Pouvez-vous vérifier que vous voulez dire «rangée» ou «colonne» ici. Ajout de lignes pendant que vous êtes itération de ces mêmes lignes est un peu délicat.
Les derniers personnages de 19 ans vont-ils toujours être "complet" avec une date? Si tel est le cas, enregistrez les derniers caractères de la chaîne d'origine, y compris de compléter,
Droite (VAL, 19) CODE> et appendez-le à chaque ligne créée de la scission. De plus, si cela peut varier, vous pouvezINSTR (VAL, "Terminer") CODE>, puis déterminez le nombre de caractères à inclure.@Jnevill J'aimerais ajouter de nouvelles lignes tout en itérant ces lignes - c'est-à-dire que j'ajoute des lignes si une cellule a "ou"; # "dedans, et copier et coller les mêmes valeurs de la même ligne aux nouveaux créateurs
Votre question spécifie la colonne B mais votre code fourni est à la recherche de la colonne A. Pouvez-vous s'il vous plaît clarifier? Aussi, est
chaîne A, string b, stringc code> tout dans une seule cellule, tandis quecomplet code> et5/20/2019 code> sont dans leur propre distinct cellules (dans la même rangée)?De plus, votre code fourni divisez sur
VLLF code>, mais votre question et vos commentaires indiquent de scinder sur, code> ou; # code>. Lequel devrait-il être? Si ce dernier, une cellule peut-elle avoir à la fois, code> et; # code> (E.g.string a, string b; # stringc code>)?@Tigeravatar Désolé pour la confusion - s'il vous plaît voir mis à jour "Ce dont j'ai besoin est" de la section ci-dessus. J'ai besoin d'analyser les caractères spéciaux "; #", qui apparaissent dans une seule colonne dans la feuille de calcul.
stringa; #stringb; #stringc code> est dans la même cellule etcomplète code> et5/20/19 code> est dans deux cellules différentes sur le même ligne. Dans cet exemple, je veux avoir 3 lignes: première ligne -stringa code> (cellule 1)complète code> (cellule 2),5/20/19 code > (cellule 3); Deuxième rangée -stringb code> (Cell 1)Terminer code> (Cell 2),5/20/19 code> (Cell 3); troisième rangée -stringc code> (cellule 1)complète code> (Cell 2),5/20/19 code> (Cell 3)