0
votes

Comment analyser une ligne?

Je dois écrire le code VBA qui:

  1. lit en rangées dans une feuille

  2. vérifie si la colonne E a le caractère "; #" et analyse la chaîne sur ce caractère

  3. 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)

  4. renomme la colonne d'origine au mot qui vient avant; # "et renomme la colonne copiée sur le mot qui suit" # "

    Exemple avec trois colonnes:

    rangée d'origine: string a; #string b; #stringc (cellule 1) complète (cellule 2) 5/20/2019 (Cell 3)

    Ce dont j'ai besoin :
    mise à jour_original Row: string un complet 5/20/2019
    Nouvelle ligne 1: String B Terminer 5/20/2019
    nouvelle ligne 2: string c remplaçable 5/20/2019 xxx

     Entrez la description de l'image ici


6 commentaires

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) et appendez-le à chaque ligne créée de la scission. De plus, si cela peut varier, vous pouvez INSTR (VAL, "Terminer") , 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 tout dans une seule cellule, tandis que complet et 5/20/2019 sont dans leur propre distinct cellules (dans la même rangée)?


De plus, votre code fourni divisez sur VLLF , mais votre question et vos commentaires indiquent de scinder sur , ou ; # . Lequel devrait-il être? Si ce dernier, une cellule peut-elle avoir à la fois , et ; # (E.g. string a, string b; # stringc )?


@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 est dans la même cellule et complète et 5/20/19 est dans deux cellules différentes sur le même ligne. Dans cet exemple, je veux avoir 3 lignes: première ligne - stringa (cellule 1) complète (cellule 2), 5/20/19 (cellule 3); Deuxième rangée - stringb (Cell 1) Terminer (Cell 2), 5/20/19 (Cell 3); troisième rangée - stringc (cellule 1) complète (Cell 2), 5/20/19 (Cell 3)


3 Réponses :


0
votes

J'ai choisi d'utiliser un combo de len () et INSTR () 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): xxx


Voici les données que j'ai utilisées:

 Entrez la description de l'image ici


1 commentaires

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



0
votes

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


3 commentaires

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 est dans la même cellule et complet et 5/20/19 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 (cellule 1) complète (Cell 2), 5/20/19 (cellule 3); Deuxième rangée - stringb complète 5/20/19 ; troisième rangée - stringc complète (cellule 2) 5/20/19 (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 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.



0
votes

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 requête d'alimentation code> (AKA Obtenir et transformer code> dans Excel 2016 +).

simplement p>


1 commentaires

@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.