2017-09-21 2 views
0

Ich werde jeden Tag Daten in meine Arbeitsmappe hinzufügen, und ich werde normalerweise eine Reihe von Formeln verwenden, um Fehlerrate und Erfolg für mich zu berechnen. Ich habe bereits den Code zum Kompilieren der Daten, aber was mir jetzt fehlt, ist, wie man den Satz von Formeln für die nächste leere Zelle kopiert, damit er mir hilft, die Raten zu berechnen. Mein Formelsatz wird von "P22" zu "AB22" hinzugefügt, und ich muss diese Formeln in die nächste leere Zeile kopieren. Dies sind die Makros, die ich jetzt habe, wenn es gut genug ist, überprüfe, ob es Verbesserungsmöglichkeiten gibt, da ich noch neu bei VBA bin. Vielen Dank.Wie man Formel aus einem ausgewählten Bereich kopiert und in die nächste leere Zeile mit Makros kopiert

Sub trial() 

Dim wb As Workbook, wb2 As Workbook, wb3 As Workbook 
Dim ws As Worksheet 

Dim fn As String 

Set wb = ActiveWorkbook 
Set ws = Sheets.Add(After:=Sheets(Worksheets.Count)) 
Dim Ret 

    Ret = Application.GetOpenFilename("Lkl Files (*.lkl), *.lkl") 

    If Ret <> False Then 
     With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & Ret, Destination:=Range("$A$1")) 
     .Name = "SPC_PLTB_450B_12092107_25°C_CW" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 65001 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
     .TextFileDecimalSeparator = "," 
     .TextFileThousandsSeparator = "." 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 

     End With 
    End If 


    Sheets(2).Activate 

    'this is for the date (loop) 

    Dim FirstCell As String 
     Dim i As Integer 
      FirstCell = "C19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 
      ActiveCell = Format(Date, "mm/dd/yyyy") 

    ws.Activate 
    ws.AutoFilterMode = False 
    ws.Range("$A$9:$P$417").AutoFilter Field:=5, Criteria1:= _ 
     "1" 
    Range("F31:F401").Select 
    Selection.Copy 



    Sheets(2).Activate 


    'this is for the raw data 

      FirstCell = "D19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 


    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 

    Sheets(3).Activate 
    FirstCell = "C19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 
      ActiveCell = Format(Date, "mm/dd/yyyy") 

    ws.Activate 

    Range("D31:D401").Select 
    Application.CutCopyMode = False 
    Selection.Copy 


    Sheets(3).Activate 
      FirstCell = "D19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 


    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 

     Sheets(4).Activate 
    FirstCell = "C19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 
      ActiveCell = Format(Date, "mm/dd/yyyy") 

    ws.Activate 

    Range("G31:G401").Select 
    Application.CutCopyMode = False 
    Selection.Copy 



    Sheets(4).Activate 
    FirstCell = "D19" 
      Range(FirstCell).Select 
      Do Until ActiveCell.Value = "" 
      If ActiveCell.Value = "" Then 
      Exit Do 
      Else 
      ActiveCell.Offset(1, 0).Select 
      End If 
      Loop 


    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 


End Sub 

Beispiel meines Arbeitsblatt

enter image description here

Antwort

0

Es ist schwierig, eine ideale Lösung zu geben, ohne mehr über Ihre vorhandene Excel-Datei zu wissen, aber ich habe einige Annahmen gemacht, basierend auf was Sie gepostet und eine Excel-Datei mit ein paar möglichen Lösungen für Sie zusammengestellt.

Da wir hier keine Dateien an Beiträge anhängen können, habe ich es auf den kostenlosen Datei-Host hochgeladen FileTown; Sie können das [Makro deaktiviert] XLSX file here herunterladen.

Folgen Sie den Anweisungen auf dem Blatt beginnend ‚Example1‘ für ein Beispiel von dem, was ich meinte, über Formeln jetzt für die Daten Erstellen Sie später sowie wie zu Diagrammen Auto-Update machen, indem sie hinzufügen werden Ihre Daten in eine Excel-Tabelle und wie Sie eine Datenverbindung zu Ihrer Quelldatendatei erstellen, so dass Sie sie nicht jedes Mal neu importieren müssen, wenn sich die Daten ändern, alle ohne Makros.

Nicht um Sie davon abzuhalten, über VBA & Makros zu lernen, aber Excel hat einige sehr leistungsfähige integrierte Datenverwaltungsfunktionen, die in diesem Fall eine bessere Annäherung als eine Gewohnheit sein könnte.

Auf der anderen Seite, ich zuerst lernen, VBA (in den 90er Jahren mit Excel v.5) durch die Aufnahme von Makros beim Ausführen von einfachen sich wiederholenden Aufgaben, und experimentieren mit dem erzeugten VBA durch "Ändern dieser Zeile oder Löschen dieser" und zu sehen, was passiert ist; Ungefähr die Hälfte des Codes, den Excel automatisch in einem aufgezeichneten Makro generiert, ist wahrscheinlich irrelevant. (Erstellen Sie einfach eine Sicherungskopie Ihrer Dateien, bevor Sie sich mit ihnen anlegen, und überprüfen Sie MSDN/VBA oder Google auf alles, was Sie interessiert, und es gibt nichts zu verlieren ... Ich bin ein großer Excel-Fan, denn zwischen VBA und eingebaute Funktionen, seine Fähigkeiten sind endlos!)

+0

Vielen Dank @ashleedawg !! Ich habe nicht etwas so detailliertes erwartet aber vielen Dank haha ​​.. Obwohl ich dachte, es mit Makros zu tun, aber ich denke, es manuell ziehen für 100 Zeilen sollte in Ordnung sein, denke ich .. – Fong

+0

Gern geschehen. Mach dir keine Sorgen, du hast * viele * mehr Möglichkeiten, um mit MS Office super-kompliziert zu werden! – ashleedawg

0

Nicht Sie schwanken von VBA lernen, aber ich glaube, Sie ohne ihn weg in diesem Fall erhalten.

Sie könnten die Formeln in "P22" in "AB22" ändern, so dass sie leer bleiben, wenn in "D to N" keine Daten vorhanden sind.

Kopieren Sie in Ihrem Beispiel Zelle P22 und fügen Sie sie in Zelle P23 ein. Als nächstes setzen eine „if“ Anweisung um Ihre Formel, wie:

=IF (D23 = "" , "" , {your existing formula here}) 

... und „füllen“, dass die Formel rechts und unten ein paar Dutzend Zeilen. Die Zellen "P bis AB" bleiben leer, bis Sie Daten auf der linken Seite Ihres Arbeitsblatts eingeben. Es ist schwer zu erklären, aber wenn das keinen Sinn ergibt, kann ich dir ein Musterblatt schicken. I

+0

Will es schätzen, wenn ich ein Beispielarbeitsblatt haben kann, um mich durch es zu führen. Von Ihrem Beispiel, macht es mich hart, die Makros zu kodieren?Denn für meinen Fall ist eine harte Programmierung nicht wirklich vorzuziehen, da ich immer mehr Daten hineinspeichern werde. Also wäre es besser, nach der nächsten leeren Zeile zu suchen. Oder ich bin einfach zu neu, um zu verstehen, was Sie wirklich dort programmieren Entschuldigung, wenn ich dich verwechsele .. – Fong

Verwandte Themen