Quelqu'un a créé un document texte dans Excel comme s'il était sur une machine à écrire, alors ils ont écrit jusqu'au bout de leur écran, puis ont appuyé sur Entrée. J'ai maintenant besoin de ce document lisible sur d'autres écrans. Je voudrais mettre chaque paragraphe dans sa propre cellule, puis copier et coller dans le mot. S'il y a une meilleure façon de faire cela, je suis toute oreille.
J'ai essayé d'enregistrer une macro, mais elle reste coincée entre les paragraphes (l'auteur a sauté une ligne entre les paragraphes). Ma recherche montre la concaténation des cellules une à la fois, ce qui ne m'aidera pas avec environ 1000 lignes de texte.
Je suis ouvert à l'utilisation d'une macro, mais je pense que VBA serait mieux. Quelque chose comme:
' If cell below isn't empty
' then
' activecell=activecell&activecell(0,1)
' delete activecell(0,1)
' else activecell(0,2).select
'endif
'loop 1000 times
Si le document actuel dit:
A boy walked down
the street.
Next he tried
to run.
Finally this task
was over.
Cela ressemblerait à:
A boy walked down the street.
Next he tried to run.
Finally this task was over.
Ensuite, je vais le copier en mot. Je vous remercie!
3 réponses
En supposant que mes hypothèses sont correctes, essayez ce qui suit:
Copiez tout dans Word.
Faites une recherche / remplacement pour deux retours chariot (
^p^p
) et remplacez-les par une chaîne d'espace réservé (ex.:%%%%%
, tout fonctionnera tant qu'il ne se trouve pas dans votre document)Effectuez une recherche / remplacement pour les retours chariot simples (
^p
) et remplacez-les par un seul espace (Faites une recherche / remplacement pour votre chaîne d'espace réservé (
%%%%%
dans mon exemple ci-dessus) et remplacez-la par deux retours chariot (^p^p
)Vous devrez peut-être effectuer une recherche / remplacement sur les espaces doubles et les remplacer par des espaces simples.
Après vérification et peut-être quelques ajustements, vous devriez être fait.
Une autre option
Sub compileDoc()
Dim textArr(), r As Long, n As Long, curPar As String
textArr = Sheet1.Range("A2:A" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row).Value
n = LBound(textArr)
For r = LBound(textArr) To UBound(textArr)
If Len(textArr(r, 1)) Then
curPar = curPar & " " & textArr(r, 1)
textArr(r, 1) = ""
Else
textArr(n, 1) = WorksheetFunction.Trim(curPar)
n = n + 1
curPar = ""
End If
Next r
textArr(n, 1) = curPar
Sheet1.Range("B2:B" & n + 1) = textArr
End Sub
Option supplémentaire, le texte peut être copié à partir de la fenêtre immédiate après l'exécution de la macro. Vous pouvez y accéder via Afficher ou Ctrl + G dans la fenêtre du développeur VBA.
Sub Concatenate_Text()
Dim i As Long
Dim lastrow As Long
Dim paragraph As String
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 1 To lastrow
If IsEmpty(ws.Cells(i, "A")) = False Then
paragraph = paragraph & " " & ws.Cells(i, "A").Value & " " & ws.Cells(i + 1, "A").Value
i = i + 1
Else: paragraph = paragraph & vbCrLf
End If
Next i
Debug.Print paragraph
End Sub
Questions connexes
De nouvelles questions
excel
Uniquement pour les questions sur la programmation contre des objets ou des fichiers Excel, ou le développement de formules complexes. Vous pouvez combiner la balise Excel avec VBA, VSTO, C #, VB.NET, PowerShell, l'automatisation OLE et d'autres balises et questions liées à la programmation, le cas échéant. Une aide générale concernant MS Excel pour les fonctions de feuille de calcul unique est disponible sur Super User.