2017-06-16 5 views
1

Ich habe ein Excel-Blatt mit einer Reihe von Headern, aber einige haben keine Bindestriche. Ich brauche sie alle mit Bindestrichen, außer total.Excel VBA Ersetzen Zelle mit Antwort aus Formel

Ex: Column Headers

ich die Formel geschrieben haben, die die Striche auf die Header hinzufügen werden:

=IF(A1="","",IF(A1="TOTAL","TOTAL",REPLACE(SUBSTITUTE(A1,"-",""), 1, 0, "-"))) 

Allerdings ist das Problem, dass ich das brauchen in einem VBA-Makro, und es muss die vorhandenen Header ersetzen und die gleiche Formatierung beibehalten.

Ich bin mir nicht sicher, wie dies zu schreiben, das ist, was ich so weit gekommen:

Sub AddDash() 
Dim MaxColumn As String 
MaxColumn = Range("AY1").End(xlToLeft) 
For i = 1 To TotalRows 
Formula = "=IF(A1="","",IF(A1="TOTAL","TOTAL",REPLACE(SUBSTITUTE(A1,"-",""), 1, 0, "-")))" 
Next i 
End Sub 

dies möglich ist, zu tun?

Ich habe etwas Ähnliches gesehen, aber ich verstehe es nicht genug, um es für meine Situation für die Hilfe

With Sheet1 
    With Range(.Cells(3,3), .Cells(.Rows.Count,3).End(xlup)) 
     With .Offset(0, Sheet1.UsedRange.Columns.Count +3) 
      .FormulaR1C1 = "=REPLACE(REPLACE(SUBSTITUTE(RC3,""-"",""""), 9, 0, ""-""), 7, 0, ""-"")" 
     End With 
     .Value = .Offset(0, Sheet1.UsedRange.Columns.Count +3).Value 
     .Offset(0, Sheet1.UsedRange.Columns.Count +3).EntireRow.Delete 
    End With 
End With 

Danke zu machen die Arbeit!

+0

nicht sicher, ob ich dir folgen. Wenn Sie eine Formel in die Zelle einfügen, wird der Inhalt der Zelle überschrieben. Wenn Sie Text in die Zelle eingeben, wird die Formel überschrieben. Ich bin mir nicht sicher, wie Ihre Formel zum Bearbeiten von Text funktioniert. – FreeMan

Antwort

1

Ist das, was Sie versuchen? Ich habe den Code kommentiert, aber wenn Sie noch eine Frage haben, dann zögern Sie nicht zu fragen.

Sub AddDash() 
    Dim ws As Worksheet 
    Dim lCol As Long, i As Long 

    '~~> Change this to the relevant sheet 
    Set ws = Sheet1 

    With ws 
     '~~> Find the last column in row 1 
     lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 

     '~~> Loop through the columns in row 1 
     For i = 1 To lCol 
      '~~> Check 1 : Cell is not empty 
      '~~> Check 2 : Cell doesn't have TOTAL 
      '~~> Check 3 : Cell Doesn't already have a Dash 
      If Len(Trim(.Cells(1, i).Value)) <> 0 And _ 
       UCase(Trim(.Cells(1, i).Value)) <> "TOTAL" And _ 
       Left(Trim(.Cells(1, i).Value), 1) <> "-" Then 
       '~~> Add Dash 
       .Cells(1, i).Value = "-" & .Cells(1, i).Value 
      End If 
     Next i 
    End With 
End Sub 

Screenshot

enter image description here

+0

Alter, wow! Das ist so gut geschrieben. Ich war völlig falsch, haha. Ich fühle mich dumm. Dein Code ist so sauber, ich muss lernen, wie du zu schreiben. Es ist wunderschön. Danke für die Hilfe. –

+0

Ich bin froh, dass ich helfen kann :) –