2015-06-22 6 views
5

miei valori delle celle sono stringhe di numeri (sempre maggiore di 5 numeri in una cella, cioè 67391853214, etc.)valore della cella inizia con uno specifico set di numeri, sostituire i dati

Se una cella inizia con tre specifiche numeri (cioè 673 in un valore di cella 67391853214) Voglio che i dati nella cella vengano sostituiti con un valore diverso (se 673 sono i primi numeri, sostituisci l'intero valore cella con "790")

So che c'è un modo utilizzare un asterisco per utilizzare solo una parte del valore della cella ma non sono al 100% sulla sintassi. Questo è il codice corrente che ho, ma cerca specificamente "### *", non i valori che iniziano con "###". Qualsiasi aiuto è molto apprezzato!

lastRow = Range("A" & Rows.Count).End(xlUp).Row 
colNum = WorksheetFunction.Match("Number", Range("A1:CC1"), 0) 
For Each c In Range(Cells(2, colNum), Cells(lastRow, colNum)) 
If c.Value = "614*" _ 
     Or c.Value = "626*" _ 
     Or c.Value = "618*" _ 
     Or c.Value = "609*" _ 
     Or c.Value = "605*" Then 
      c.Value = "737" 

`

+0

Qualcosa come "If Left (c.Value, 3) =" 614 "' ............... –

+0

Una buona domanda per il primo! – FreeMan

risposta

6

Utilizzare la funzione LEFT(), come illustrato di seguito:

lastRow = Range("A" & Rows.Count).End(xlUp).Row 
colNum = WorksheetFunction.Match("Number", Range("A1:CC1"), 0) 
For Each c In Range(Cells(2, colNum), Cells(lastRow, colNum)) 
    If LEFT(c.Value,3) = "614" _ 
    Or LEFT(c.Value,3) = "626" _ 
    Or LEFT(c.Value,3) = "618" _ 
    Or LEFT(c.Value,3) = "609" _ 
    Or LEFT(c.Value,3) = "605" Then 
    c.Value = "737" 
+1

Perfetto questo è esattamente quello che stavo cercando. Grazie mille per il vostro aiuto! – Erin

+1

@Erin se questo ha risolto il tuo problema, puoi contrassegnare la sua risposta come accettata facendo clic sul segno di spunta (✔) sotto le frecce, entrambi guadagnerai reputazione (sì, anche tu) e la comunità SO apprezza;) – Armfoot

3

meglio fare una gamma sostituire anziché ciclo attraverso ciascuna cella di velocità:

Dim rng1 As Range 
Dim LastRow As Long 
Dim ColNum As Long 

LastRow = Range("A" & Rows.Count).End(xlUp).Row 

On Error Resume Next 
ColNum = Application.Match("Number", Range("A1:CC1"), 0) 
On Error GoTo 0 

If Column Is Nothing Then Exit Sub 

Set rng1 = Range(Cells(2, ColNum), Cells(LastRow, ColNum)) 
With rng1 
    .Replace "626*", "727", xlWhole 
    .Replace "618*", "727", xlWhole 
    .Replace "609*", "727", xlWhole 
    .Replace "737*", "727", xlWhole 
End With 
0

Ecco la mia versione del problema:

Sub SO() 
    Dim MyString As String 
    MyString = "614,626,618,609,605" 
    For X = 1 To Range("C" & Rows.Count).End(xlUp).Row 
     If Replace(MyString, Left(Range("C" & X).Value, 3), "") <> MyString Then Range("C" & X).Value = "737" 
    Next 
End Sub