2017-12-22 9 views
0

Ich habe ein Makro, wo ich Text in Spalten umwandeln, so dass ich die Daten aus meiner PDF-Datei verwenden kann.Excel VBA merging Zelle Werte

Obwohl es wirklich gut funktioniert, würde ich gerne wissen, ob es entwickelt werden könnte.
Meine Daten sollen wie folgt aussehen:

Invoice 10-12-2017 USD  400,00 
Creditmemo 18-12-2017 USD  205,60 
Invoice 27-12-2017 USD  906,75 
Invoice 29-12,2017 USD  855,00 
Interest I12391  31-12-2017 USD 105 

Wie Sie aus dem obigen bemerken könnten, hat die „Interesse“ Linie eine zusätzliche Zahl, die die Daten korrekt aus ausgerichtet ist verhindert.

Ich möchte es eher wie dieses aussehen:

[Invoice]    10-12-2017 USD 400,00 
[Creditmemo]   18-12-2017 USD 205,60 
[Invoice]    27-12-2017 USD 906,75 
[Invoice]    29-12,2017 USD 855,00 
[Interest I12391]  31-12-2017 USD  105 

Was ich habe, so weit:

Mein Code dieses atm:

rng1 = Range("A3:A750") 

Range(rng1).TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ 
     Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ 
     :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ 
     Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True 

Ziel:

Ich will t er Code, um meine Daten zu durchlaufen, wenn es "Interesse" findet, sollte es die Nummer kopieren und nach "Interesse" einfügen. Anstatt zwei verschiedene Zellen zu sein, sollten sie verschmelzen und eins werden als "Interesse I12391". Dann werden die Daten korrekt zugeordnet, da die Zeile "Interest" eine zusätzliche Zeile hat, als die anderen.

Sollte ich eine .Find.Address auf "Interest" machen, und die Formel mit einem .Offset (0, 1) und füge diese beiden zusammen? Oder gibt es einen einfacheren und effizienteren Weg?

Anders als die Hauptfrage ... Ist es mir möglich, Range.TextToColums zu verwenden, so dass es nur das Arbeitsblatt betrifft, das ich brauche, und nicht die gesamte Arbeitsmappe?

+0

Was brauchen Sie ist Werte von Spalten verketten ' "A"' und ' "B"', legen Sie sie in coulmn '" A "', lösche ** Zinsnummer ** Zellen, habe ich recht? Was ist das Format der Spalte "B"? – AntiDrondert

+0

Die Sache ist, dass ich nur die Zelle der Spalte "A" und "B" zusammenführen muss, wenn das Wort "Interesse" erscheint, und nicht die gesamte Spalte. Es tut mir leid, dass ich oben schlecht erklärt habe :) Spalte B ist das "Datum" -Format, aber wann immer es zu einer Zeile mit "Interesse" kommt, ändert sich das Format in Allgemein, da es kein Datum gibt. Da die Daten aus einer PDF-Datei stammen, wird der Text durch Leerzeichen getrennt. Aber es sollte "Interesse" und "I12391" nicht trennen. –

+0

Haben Sie zufällig Spaltenüberschriften? – AntiDrondert

Antwort

0

Können Sie bitte versuchen, die folgende Methode zu verwenden und zu prüfen, ob Sie Erfolg haben? Um es zu nutzen, können Sie die Zellen wählen Sie die Daten, die Sie versuchen, enthält, zu beheben und führen Sie das Unterprogramm:

Public Sub dataFixer() 
    Dim selectedDataRange() As Variant 
    Dim selectedRow() As Variant 
    Dim numberOfRowsInSelection As Integer 
    Dim numberOfColsInSelection As Integer 

    selectedDataRange = Selection 'Makes a 2D array from the user's selected range. 
    numberOfRowsInSelection = UBound(selectedDataRange, 1) 
    numberOfColsInSelection = UBound(selectedDataRange, 2) 

    For i = 1 To numberOfRowsInSelection 
     selectedRow = Application.Index(selectedDataRange, i, 0)  'Selects row i of the selectedDataRange 
     If selectedRow(1) = "Interest" Then       'If the first item in the row is "Interest" then... 
      selectedRow(1) = selectedRow(1) & " " & selectedRow(2) '...combine the first and second item 
      For j = 2 To numberOfColsInSelection - 1 
       selectedRow(j) = selectedRow(j + 1)     '...and proceed to shift other items in the row to the left 
      Next 
     End If 
     Selection.Rows(i) = selectedRow        'Finally, "paste" the selected row to the corresponding row in the user's selected range 
    Next                'Proceed to the next row in the 2D array 
End Sub 
0

Vielen Dank für Ihre Antworten. Ich habe es geschafft, eine Zeichenfolge zu machen, die afterall das Problem löst ...

Dim sht As Worksheet 
Dim rng9, rng10, c, Rw As Range 
Set sht = Sheets("Kvik Kontoudtog") 
Set rng9 = sht.Range(FindDescripOffset, DescripSub2) 

    For Each c In rng9.Cells 
     If c = "Rente" Then 
     CValue = c.Address(False, False, xlA1) 
     CValueOffset = Range(CValue).Offset(0, 1).Address(False, False, xlA1) 
     Range(CValue).Value = Range(CValue).Value & " " & Range(CValueOffset).Value 
     Range(CValueOffset).Delete Shift:=xlToLeft 
     End If 
    Next c