2016-07-18 8 views
1

Hallo ich bin ein bisschen neu zu vba, also werde ich versuchen, mein Problem so weit wie möglich zu erklären. Ich habe einen Datensatz in Excel in Spalte A, habe ich eine Menge von Dateinamen wie folgt aus:Nehmen Sie Zeichen aus und fügen Sie eine neue Spalte in Excel ein

1. AB000**1234**45.tif 
2. AB000**1235**45.tif 
3. AB000**1236**45.tif 
4. AB000**1237**45.tif 

etc ..

Daraus möchte ich die starke Charaktere alle und in Spalte setzen, nehmen C so wird es wie folgt aussehen:

1. 1234 
2. 1235 
3. 1236 
4. 1237 

etc ..

im Moment habe ich einen Code haben, der wie folgt aussieht:

Sub TakeOut 
    Dim str1 As String 
    Dim LR As Long 
    Dim cell As Range, RNG As Range 

    LR = Range("A" & Rows.Count).End(xlUp).Row 
    Set RNG = Range("A1:A" & LR) 

    For Each cell In RNG 
     L = Len(RNG) 
     If L > 0 Then 
      RNG = ... 
     End If 
    Next cell 

    Range("C:C").Columns.AutoFit 

End Sub 

ich versucht habe zu zählen links (5) und rechts (6), aber nicht wissen, wie die 4 Zeichen zu nehmen, die ich will. Hoffe du kannst mir dabei helfen.

+4

wie 'MID (cell.Value, 6, 4)' ??? –

+0

RNG = Mitte (Zelle, InStrRev (Zelle, "1"), 4), dies schneidet den Wert in der Zelle bei der ersten Instanz von 1 für vier Zeichen. – Lowpar

+0

@JessieQuick, hast du meine Antwort unten überprüft. Hoffe du suchst nach dieser Methode? –

Antwort

2

Wenn Sie die starken Zeichen aus der Zeichenfolge zu übernehmen wollen. Versuchen Sie es unten. Es nimmt alle Fettbuchstaben in einer Zelle und legt es in die C-Spalte.

Hope Sie suchen das?

Sub get_bold_content() 
    Dim lastrow, i, j, totlength As Long 
    lastrow = Range("A" & Rows.Count).End(xlUp).Row 
    For i = 1 To lastrow 
     totlength = Len(Range("A" & i).Value) 
     For j = 1 To totlength 
      If Range("A" & i).Characters(j, 1).Font.Bold = True Then 
       outtext = outtext & Range("A" & i).Characters(j, 1).Text 
      End If 
     Next j 
     Range("C" & i).Value = outtext 
     outtext = "" 
    Next i 
End Sub 

enter image description here

+0

Aww thx viel das war was ich war auf der Suche nach !!: D – JessieQuick

+0

Vielen Dank für Ihre Antwort.Freundlich, immer zu helfen! –

2

Werfen Sie einen Blick auf die Mid() Funktion link.

Nutzung in Ihrem Fall:

Mid(cell.Value, 6, 4) 'First parameter is the string, 6 is the start character, 4 is length 
+0

Vielen Dank für die Wiederholung und Hilfe! Ich habe viel davon gelernt :) – JessieQuick

2

Der einfachste Weg, ohne Looping wäre so etwas wie diese:

Sub TakeOut() 
    Dim rng As Range 
    Set rng = Range("A1", Range("A" & Rows.Count).End(xlUp)) 
    rng.Offset(, 1) = Evaluate("IF(" & rng.Address & "="""","""",MID(" & rng.Address & ",6,4))") 
End Sub 
+0

Das war auch ein netter! aber ich weiß nicht wirklich, was passiert in ** Evaluate ("IF (" & rng.Address & "=" "", "" "", ** dieser Teil – JessieQuick

+0

) Gibt nur eine leere Zelle zurück, wenn die Zelle in Spalte A ist leer ... im allgemeinen gibt dies ein Array zurück, wie es die Array-Funktion im Blatt tun würde.Auf diese Weise brauchen Sie keine Schleife.;) –

+0

ahh ich sehe danke :) – JessieQuick

Verwandte Themen