online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon 123harald123 vom 29.06.2022, 09:24 Options

VBA Spalte invertieren

hallo zusammen!!

mit euerer hilfe habe ich schon öfters makros zusammenflicken können. ich hoffe ihr könnt mir dieses mal auch weiterhelfen...
mit meinem makro lese ich intensitäten von spektren ein, spalte für spalte.
die eingelesenen files werden mit aufsteigenden zahlen (zb: "024", "183", etc) abgespeichert und somit auch nacheinander eingelesen. das passt soweit auch.
nun möchte ich aber das sobald ein file den namen "beliebige Zahl_n" (n: für negativ) hat, diese invertiert wird (also alle werte mit -1 multipliziert). von zeile 2-900
hier mein makro:...

Sub restFiles()
Dim varFileNames As Variant
Dim lngCount As Long
Dim wksZiel As Worksheet
Dim wbkQuelle As Workbook
Dim lngZielSpalte As Long

varFileNames = Application _
.GetOpenFilename("PICS-Regeldateien (*.prf), *.prf", 1, "Datei wählen", , True) 'Filenamen holen
If VarType(varFileNames) = vbBoolean Then 'bei Abbruch
MsgBox "Keine Datei gewählt!" 'kleine Meldung
Exit Sub 'Makro Ende
End If

Application.ScreenUpdating = False
'Bildschirmaktualisierung aus

Set wksZiel = ThisWorkbook.Worksheets("Tabelle1")
'ZielTabelle !anpassen! und "merken"
'ggf. hier gesamten Zielbereich löschen
'With wksZiel
'.Range(.Range("A5"), .Range("A5").SpecialCells(xlCellTypeLastCell)).clearContents
'End With
For lngCount = LBound(varFileNames) To UBound(varFileNames) Step 1
'vom ersten bis zum letzten File
'MsgBox ("File " & varFileNames(lngCount) & " wird verarbeitet")
'===========
'PSEUDOCODE
'===========
'EinfügeZielRange ermitteln (1.=A5, 2.=D5, 3.=G5, ...?)
lngZielSpalte = (lngCount - 1) + 3
'File öffnen (Workbooks.OpenText Filename:=varfilenames(lngCount), Origin:= ...)
Workbooks.OpenText FileName:=varFileNames(lngCount), StartRow:=6, Tab:=True, Comma:=True



Set wbkQuelle = ActiveWorkbook
'Range kopieren
wbkQuelle.ActiveSheet.Range("B1:B900").Copy
'in ZielRange einfügen
wksZiel.Cells(3, lngZielSpalte).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'geöffnetes File Schliessen
wbkQuelle.Close
Next lngCount
'nächstes File der Auswahl

Application.ScreenUpdating = True
'Bildschirmaktualisierung ein
ThisWorkbook.Activate
wksZiel.Select
wksZiel.Range("C3").Select

Set wksZiel = Nothing
Set wbkQuelle = Nothing
End Sub

ich freue mich schon auf vorschläge!
vielen dank und freundliche grüße
harald


Antwort schreiben

Antwort 1 von nighty vom 30.06.2022, 09:36 Options

hi harald

aus - soll + werden wenn ich dich richtug verstanden habe ?

prüfe das erste zeichen mit isnumeric auf true/false

gruss nighty

Antwort 2 von 123harald123 vom 30.06.2022, 10:10 Options

hallo nighty,

danke schonmal für hilfe. aus - soll + werden, richtig.
allerdings ist mein problem wie der code aussehen muss damit die file mit der endung "_n" gefunden wird und dann im bereich B2 - B900 die umrechung *(-1) stattfindet..

ich hoffe du hast ne idee!

gruß harald

Antwort 3 von Beverly vom 30.06.2022, 11:46 Options

Hi Harald,

mittels
If InStr(varFileNames, "_n") > 0 Then

kannst du die negativen Files feststellen.

Um die negativen Daten umzuwandeln würde ich den eingefügten Bereich mit -1 multiplizieren, indem du -1 in eine Zelle schreibst, diese kopierst, den umzuwandelnden Bereich markierst und dann auf Bearbeiten -> Inhalte Einfügen -> Multiplizieren gehst (das kannst du mit dem Makrorekorder aufzeichnen).

Bis später,
Karin

Antwort 4 von 123harald123 vom 01.07.2022, 10:46 Options

hallo karin und alle anderen die mir helfen wollen,

danke schonmal für diesen tipp! jedoch tu ich mich etwas schwer das ganze zu realisieren.
nachdem die spalte mit dem filenamen "_n" eingefügt wurde sollten alle werte mit (-1) multipliziert werden. den faktor kann ich aber nicht in mein tabellenblatt reinschreiben da ich sonst probleme habe dieses tabellenwert in ein program zu laden.. die spalten und zeilen struktur kann ich nicht um eine zelle erweitern.
aber es gibt doch bestimmt einen code mit dem ich die kopierte spalte gleich mit einem fest vorgegeben wert mutliplizieren kann und dann erst einfüge, oder?
ich bin sehr unerfahren in vba ;)
in laiensprache:

If InStr(varFileNames, "_n") > 0
Then "multipliziere alle werte dieser spalte mit (-1) und füge sie dann in ZielRange ein."
End
:)

danke und schöne grüße
harald

Antwort 5 von Beverly vom 01.07.2022, 11:28 Options

Hi Harald,

verstehe leider nicht ganz, wo dabei das Problem ist - die eingetragene -1 kannst du doch anschließend wieder löschen.

- andere Möglichkeit: führe die Multiplikation - wie beschrieben - in der Arbeitsmappe aus, aus der du kopierst und beim Schließen dann einfach nicht speichern.

- weitere Möglichkeit (wegen der Dauer nicht unbedingt zu empfehlen): du überträgst in einer Schleife jede Zelle einzeln und multiplizierst sie dabei mit -1.

- noch eine Möglichkeit: lies die Daten auf einen Ritt in ein Array, multipliziere in einer Schleife jedes Arrayfeld mit -1 und trage dann das geänderte Array in einem Ritt in die Zellen ein (ist etwas schneller als die vorhergehende Methode)

Bis später,
Karin

Antwort 6 von nighty vom 01.07.2022, 14:59 Options

hi all :-)

ein beispiel

gruss nighty

zwei variablen waeren anzupassen

DeinSpaltenIndex = 1
DeinMultiplikator = -1

Option Explicit
Sub MeinMakro()
    Dim DeinSpaltenIndex As Long
    Dim ZeilenIndex As Long
    Dim LetzteZeileSpA As Long
    Dim DeinMultiplikator As Long
    DeinSpaltenIndex = 1
    DeinMultiplikator = -1
    LetzteZeileSpA = ActiveSheet.Cells(Rows.Count, DeinSpaltenIndex).End(xlUp).Row
    ReDim ArrInn(1 To LetzteZeileSpA, 1 To 1) As Variant
    ArrInn() = Range(Cells(2, DeinSpaltenIndex), Cells(LetzteZeileSpA, DeinSpaltenIndex))
    For ZeilenIndex = 1 To UBound(ArrInn)
        ArrInn(ZeilenIndex, 1) = ArrInn(ZeilenIndex, 1) * DeinMultiplikator
    Next
    Range(Cells(2, DeinSpaltenIndex), Cells(LetzteZeileSpA, DeinSpaltenIndex)).Resize(UBound(ArrInn())) = ArrInn()
End Sub  

Ähnliche Themen

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026