2016-08-17 9 views
0

gelernt VBA und es ist bereits 10-fach mit den Projekten, an denen ich arbeite geholfen.Ersetzen Sie bestimmte Kriterien einmal

Ich habe jedoch einen Haken gefunden.

Momentan habe ich derzeit eine "Template-Tabelle", in die Formeln eingebaut sind.

Es sieht ungefähr so ​​aus:

Name 
Date Revenue Cost profit margin 
8/08 $10,000 $5000 $5000 100% 

Total xxx  xxx xxx 

Also, wenn ich einen neuen Namen, hinzufügen müssen kopiere ich diese ganze „Schablonentabelle“ und es unter den letzten Zellen einfügen verwendet (I geschleift die letzten zu finden Zelle, so ist dies endRow markiert). Innerhalb der 8/08 Datumszeile (für Umsatz/Kosten) habe ich eine indirekte Formel, also suche ich den 'Namen' innerhalb des Blattnamens 8/08 (ich beschrifte den Blattnamen das Datum).

Ich muss den 'Name' eine Konstante, so dass es $ A $ 20 für die ganze Box ist. Wenn ich neue Daten hinzufüge, bleibt es $ A $ 20, während die anderen Formeln sich ändern, wenn ich die Daten einfüge (IE verweist das Datum direkt auf die linke Seite).

Dies ist, was ich getan habe, um die Formel zu ersetzen. Das einzige Problem ist, wenn meine Vorlage in der Zelle $ A $ 9 ist, und ich gehe, um die 9 bis 25 zu ersetzen, wenn die Formel für die Datumsregisterkarte 19 ist, ändert sie die 19 bis 125. Es ändert also alle 9 zu 25. Ich möchte nur die Formel ändern, die $ A $ fn war, aber ich bekomme einen Fehler dabei.

Fn = meine for-Schleife zu erkennen, wo die Vorlage-Box ist. So ersetzt ich diese ursprüngliche Formel mit der neuen Zelle, die ich es

klebte
Range(Cells(endRow + 2, 2), Cells(endRow + 2, 7)).Replace What:=fn, Replacement:=endRow, SearchOrder:=xlByColumns, MatchCase:=True 

Die Frage ist also, wie $ A $ x ändern (x die Zelle # ist) auf $ A $ y (die neue Zelle #) und Ax nicht zu berühren.

For fn = 1 To 10000 
    Set networkCell = Cells(fn, 1) 
     If networkCell.Value = "New Station Template" Then 
      Range(Cells(fn, 1), Cells(fn + 5, 10)).Copy 
      Range(Cells(endRow, 1), Cells(endRow + 5, 10)).Select 
      ActiveSheet.Paste 
      Cells(endRow, 1).Value = "New Station" 
      Range(Cells(endRow + 2, 2), Cells(endRow + 2, 7)).Replace What:=fn, Replacement:=endRow, SearchOrder:=xlByColumns, MatchCase:=True 
      count = count + 1 
      Exit For 
     End If 
    Next 
+0

Ich habe versucht: //// .replace Was: = "$ A $" & fn ///// Aber das funktioniert nicht, bekomme ich einen Fehler der Art – Dan

+1

Ich frage mich, Wenn ich eine neueVariable = "$ A $" & fn, anstatt Fn zu ersetzen, verwende ich newVariable. Da es nicht so aussieht, kannst du $ A $ fn erstellen. – Dan

+0

ja, gute Idee: – cyboashu

Antwort

0

eine neue Variable die Einschränkungen $ A $ in der Zelle # zu kombinieren Hinzufügen, scheint zu versuchen, $ A $ und die Zelle # innerhalb des Code ersetzen im Vergleich zu Arbeit zu verbinden.

For fn = 1 To 10000 
    Set networkCell = Cells(fn, 1) 
     If networkCell.Value = "New Station Template" Then 
      Range(Cells(fn, 1), Cells(fn + 5, 10)).Copy 
      Range(Cells(endRow, 1), Cells(endRow + 5, 10)).Select 
      ActiveSheet.Paste 
      Cells(endRow, 1).Value = "New Station" 
      oldForm = “$A$” & fn 
      newForm = “$A$” & endRow 
      Range(Cells(endRow + 2, 2), Cells(endRow + 2, 7)).Replace What:= oldForm, Replacement:= newForm, SearchOrder:=xlByColumns, MatchCase:=True 

      count = count + 1 
      Exit For 
     End If 
    Next 
Verwandte Themen