Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro Formel einfügen, kopieren und CSV

Makro Formel einfügen, kopieren und CSV
Tim
Hallo Experten,
ich benötige eure Unterstützung. Ich brauche ein Makro, welches in einem Registerblatt ab Zeile 50 in Spalte E immer eine Formel schreibt bis zur Zeile, in der in Spalte E bereits etwas steht (Text oder Zahlen).
Wenn die Formel in die Zeilen kopiert wurde, muss eine Berechnung erfolgen, damit die richtigen Werte ausgelesen wurden und dann ist die Spalte E ab Zeile 50 bis zur letzten Zeile mit der Formel (ist ja variabel) zu kopieren . Am besten in ein neues Registerblatt einfügen und nur die Werte einfügen und gleichzeitig alle Leerzeilen löschen.
Zum Abschluss sollte dann aus dieser gefilterten Datei eine CSV-Datei erstellt werden.
Könnt ihr mit dabei helfen? Ich habe leider keine Beispieldatei.
Danke im Voraus!
Tim
AW: Makro Formel einfügen, kopieren und CSV
16.08.2011 19:52:12
Tino
Hallo,
und welche Formel darf es sein?
Hier mal ein Beispiel.
Tabelle im Code anpassen,
Speicherpfad für die *.csv anpassen und natürlich die Formel die ich nicht kenne.
Option Explicit

Sub Beispiel()
Dim rngBereich As Range, iCalc As Integer
Dim lngLetzte As Long

With Tabelle1 'Tabelle anpassen 
    lngLetzte = .Cells(.Rows.Count, 5).End(xlUp).Row
    If lngLetzte < 50 Then Exit Sub 'Abbruch keine Daten ab E50 
    Set rngBereich = .Range("E50", .Cells(lngLetzte, 5))
    rngBereich.FormulaR1C1 = "=RC[1]" 'Formel ? 
    .Calculate
End With

With Application
 iCalc = .Calculation
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
 .DisplayAlerts = False
        
    With Workbooks.Add
        With .Sheets(1)
          .Range("A1").Resize(rngBereich.Rows.Count).Value = rngBereich.Value
        End With
        Loeschen_Mit_Formel .Sheets(1)
        'Pfad für die CSV anpassen ************************************************ 
        .SaveAs Filename:="D:\ExportCSV.csv", FileFormat:=xlCSV, CreateBackup:=False
        .Close 'Datei schließen 
    End With

 .DisplayAlerts = True
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub


Sub Loeschen_Mit_Formel(oWS As Worksheet)
With oWS.UsedRange
   With .Columns(.Columns.Count).Offset(0, 1)
       
       .Formula = "=IF(RC1<>"""",ROW(),TRUE)"
       
       oWS.UsedRange.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
       
       On Error Resume Next
           .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
           .EntireColumn.Delete
       On Error GoTo 0
       
       
   End With
End With
End Sub
Gruß Tino
Anzeige
AW: Makro Formel einfügen, kopieren und CSV
17.08.2011 08:21:57
Tim
Hallo Tino,
das sieht ja super aus. Leider klappt es bei mir noch nicht. Ich habe folgende Formel vorgesehen:
WENN(LINKS(D50;6)="Sender";TEIL(D50;13;8);"")
Kann man es so einstellen, dass am Ende dann eine Art Pop-Up kommt, wo man Speicherort und Speichername festlegt?
Vielleicht soll das ja sogar. Bei mir passiert nur leider nichts. Ich kann es dann doch in ein Modul einfügen und ausführen, oder nicht? Danke nochmals.
AW: Makro Formel einfügen, kopieren und CSV
17.08.2011 15:54:40
Tino
Hallo,
hier die gewünschte Anpassung.
Option Explicit

Sub Beispiel()
Dim rngBereich As Range, iCalc As Integer
Dim lngLetzte As Long
Dim varFullPath

'Speicherort für die csv auswählen 
varFullPath = Application.GetSaveAsFilename(Format(Now, "dd_mm_yy_hh_mm_ss") & ".csv" _
                , "CSV-Dateie (*.csv), *.csv") 'Speichern 

If LCase(TypeName(varFullPath)) = "boolean" Then Exit Sub 'Abbrechen gedrückt 

With Tabelle1 'Tabelle anpassen 
    lngLetzte = .Cells(.Rows.Count, 5).End(xlUp).Row
    If lngLetzte < 50 Then Exit Sub 'Abbruch keine Daten ab E50 
    Set rngBereich = .Range("E50", .Cells(lngLetzte, 5))
    rngBereich.FormulaR1C1 = "=IF(LEFT(RC[-1],6)=""Sender"",MID(RC[-1],13,8),"""")" 'Formel ? 
    .Calculate
End With

With Application
 iCalc = .Calculation
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
 .DisplayAlerts = False
        
    With Workbooks.Add
        With .Sheets(1)
          .Range("A1").Resize(rngBereich.Rows.Count).Value = rngBereich.Value
        End With
        Loeschen_Mit_Formel .Sheets(1)
        'Pfad für die CSV anpassen ************************************************ 
        .SaveAs Filename:=varFullPath, FileFormat:=xlCSV, CreateBackup:=False
        .Close 'Datei schließen 
    End With

 .DisplayAlerts = True
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub


Sub Loeschen_Mit_Formel(oWS As Worksheet)
With oWS.UsedRange
   With .Columns(.Columns.Count).Offset(0, 1)
       
       .Formula = "=IF(RC1<>"""",ROW(),TRUE)"
       
       oWS.UsedRange.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
       
       On Error Resume Next
           .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
           .EntireColumn.Delete
       On Error GoTo 0
       
       
   End With
End With
End Sub
Gruß Tino
Anzeige
AW: Makro Formel einfügen, kopieren und CSV
18.08.2011 07:50:18
Tim
Hallo Tino,
vielen Dank für deine Mühe.
Ich komme damit aber irgendwie nicht klar. Es kommt die Abfrage nach Speicherort etc. Aber danach passiert nichts und ich finde auch keine CSV-Datei an dem ausgewählten Ort.
Ich habe eine Excelmappe mit dem Register "Tabelle1" und führe dann dort das Makro aus. Es soll dann in E50 die Formel kopiert werden und so lange bis in Spalte E in einer Zeile bereits etwas steht (Text oder Zahl). Müsste ich da nicht was sehen dann?
AW: Makro Formel einfügen, kopieren und CSV
18.08.2011 14:22:45
Tino
Hallo,
hier ist meine Testmappe.
https://www.herber.de/bbs/user/76233.xls
Gruß Tino
Anzeige
AW: Makro Formel einfügen, kopieren und CSV
18.08.2011 16:48:48
Tim
Merkwürdig. Ich habe dann dennoch eine leere CSV-Datei.
AW: Makro Formel einfügen, kopieren und CSV
18.08.2011 20:07:04
Tino
Hallo,
kann nicht sein, beispiel getestet unter xl2003 u. 2007.
Lade run Beispiel von dir hoch.
Gruss Tino
code falsche Darstellung
20.08.2011 19:37:11
Tino
Hallo,
habe es erst jetzt gesehen, der Code wird nicht richtig angezeigt.
<script language="JavaScript" type="text/javascript"><!--
function Runden(x, n) {
if (n < 1 || n > 14) return false;
var e = Math.pow(10, n);
var k = (Math.round(x * e) / e).toString();
if (k.indexOf('.') == -1) k += '.';
k += e.toString().substring(1);
return k.substring(0, k.indexOf('.') + n+1);
}
</script>
<script type="text/javaScript"> function calc(){;
Eingabe = document.CalcFelder.Eingabe.value;
var nvalue = document.CalcFelder.Eingabe.value;
nvalue = nvalue.replace(",", "."); //Komma durch Punkt ersetzen
var nvalue = nvalue * 1; //in eine Zahl wndeln
var n = nvalue * 10; //Faktor = 10
document.ValueFelder.Feld1.value = Runden(n,2);
var n = nvalue + 20; //Faktor = 20
document.ValueFelder.Feld2.value = Runden(n,2);
var n = nvalue - 30; //Faktor = 30
document.ValueFelder.Feld3.value = Runden(n,2);
var n = nvalue / 40; //Faktor = 40
document.ValueFelder.Feld4.value = Runden(n,2);}
</script>
<tbody>
<form name="CalcFelder">
<table cellspacing="0" cellpadding="3" border="0" id="Rechner">
<!--Feld eingabe Wert **********-->
<tr>
  <td>Eingabe</td>
  <td><input maxlength="8" size="7" onkeyup="calc()" name="Eingabe" value="0" /></td>
</tr></table></form>
<!--Optische Trennlinie *********** -->
<hr noshade width="100%" size="5" align="left">
<table cellspacing="0" cellpadding="3" border="0" id="ValueFelder">
<form name="ValueFelder">
<!--Ausgabetabelle ************ -->
<tr>
  <td><strong>Feld 1</strong></td>
  <td><input size="7" name="Feld1" id="Feld1" value="0"/> </td> <!--Feld1 ***** -->
<tr>   <!--neue Zeile ******-->
  <td><strong>Feld 2</strong></td>
  <td><input size="7" name="Feld2" id="Feld2" value="0"/> </td> <!--Feld2 ****** -->
<tr>   <!--neue Zeile ******-->
  <td><strong>Feld 3</strong></td>
  <td><input size="7" name="Feld3" id="Feld3" value="0"/> </td> <!--Feld3 ****** -->
<tr>   <!--neue Zeile ******-->
  <td><strong>Feld 4</strong></td>
  <td><input size="7" name="Feld4" id="Feld4" value="0"/></td> <!--Feld4 ******-->
</tr></tr></tr> </tr></table></form>
</tbody>

Gruß Tino
Anzeige

324 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige