J'essaie de split une cellule par Carriage Return (3 cellules à gauche de ma cellule actuelle) et concaténer 'AND' pour tous les Retours de chariot, sauf le dernier, et pour le dernier je veux concatérer 'OUI'
Voici mon script VBA.
CellSelect = ActiveCell.Value CellAddress = ActiveCell.Address Dim splitVals As Variant arrLines = Split(Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, -3).Value, Chr(10)) For Each strLine In arrLines Debug.Print strLine Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, 0).Value = strLine & Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, -2).Value Next End If
Voici une capture d'écran de mon installation. Essentiellement, j'essaie de concatiner ce qui se trouve dans la 1ère, 2ème et 3ème cellules, dans la 4ème cellule.
Je pense que je suis proche. Je ne peux pas sembler le faire fonctionner correctement.
Merci!!
Il suffit de Replace
par StrReverse
qui fonctionnera. Aucun For
ou Array
requirejs.
Sub test() Dim strOrig As Ssortingng Dim strNew As Ssortingng 'strOrig = Sheet1.Cells(1) strOrig = "a " & Chr(10) & " b " & Chr(10) & " c " & Chr(10) Debug.Print strOrig ' a ' b ' c strNew = StrReverse(Replace(StrReverse(strOrig), Chr(10), StrReverse("YES"), , 1)) strNew = Replace(strNew, Chr(10), "AND") Debug.Print strNew 'a AND b AND c YES End Sub
Je l'ai travaillé avec ça.
CellSelect = ActiveCell.Value CellAddress = ActiveCell.Address Dim splitVals As Variant arrLines = Split(Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, -3).Value, Chr(10)) arrLinesLast = UBound(arrLines) For Each strLine In arrLines If arrLinesLast <> 1 Then If arrLinesLast = 0 Then Exit Sub Debug.Print strLine Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, 0).Value = Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, 0).Value & " " & strLine & " " & Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, -2).Value & Chr(10) arrLinesLast = arrLinesLast - 1 Else Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, 0).Value = Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, 0).Value & " " & strLine & " " & Sheets("CP (POS) Tasklist").Range(CellAddress).Offset(0, -1).Value arrLinesLast = arrLinesLast - 1 End If Next
Vous pouvez essayer cela: divisez la valeur de la cellule vers un tableau, puis ajoutez AND ou YES si c'est le dernier élément du tableau:
Option Explicit Sub Test() Dim rng As Range Set rng = Sheet1.Range("A1") AppendAndYes rng End Sub Sub AppendAndYes(rngCell As Range) Dim varItems As Variant Dim lngIndex As Long 'get lines by splitting on line feed varItems = Split(rngCell.Value, vbLf, -1, vbBinaryCompare) 'loop through and add AND or YES For lngIndex = LBound(varItems) To UBound(varItems) If lngIndex < UBound(varItems) Then varItems(lngIndex) = varItems(lngIndex) & " AND" Else varItems(lngIndex) = varItems(lngIndex) & " YES" End If Next lngIndex 'update cell value rngCell.Value = Join(varItems, vbLf) End Sub