Ich versuche Informationen zu organisieren, die ich in ein Excel-Blatt kopiert habe, so dass ich es besser sortieren kann. Es beginnt in einer Spalte wie ein Umriss, aber ohne Kugeln, und ich möchte die Unterinformationen in Spalten neben den Hauptinformationen einfügen.VBA-Aktionen basierend auf Zelleninhalt
Makro Zweck:
Von:
Funktion SUMME
Beschreibung von SUM
IF Funktion
Beschreibung der IF-Funktion
Funktion DATUM
Beschreibung der Funktion DATUM
Zweite Beschreibung der Funktion DATUM
DAYS-Funktion
Beschreibung der DAYS-Funktion
FIND, FINDB Funktionen
Beschreibung von FI ND, FINDB
INDEX Funktion
Beschreibung der Funktion INDEX
An:
SUM-Funktion. . . . . . . . Beschreibung der SUM
IF-Funktion. . . . . . . . . . . Beschreibung der IF-Funktion
Funktion DATE. . . . . . . . Beschreibung der DATE-Funktion
. . . . . . . . . . . . . . . . . . . . Zweite Beschreibung der Funktion DATE
Funktion DAYS. . . . . . . . Beschreibung der Funktion DAYS
Funktionen FIND, FINDB. Beschreibung von FIND, FINDB
INDEX-Funktion. . . . . . . Beschreibung der Funktion INDEX
Ich denke, was ich habe, sollte funktionieren, aber ich erhalte immer entweder einen Fehler 91 oder 1004 beim Versuch, die Unterinfo rechts zu verschieben.
Problem Code:
' Shift sub-info right
Dim r As Integer
Dim find As String
find = "* function"
Range("A1").Select
For r = 1 To row1
If Range(ActiveCell).find(What:=find, Lookat:=xlWhole).Select Then
ActiveCell.Offset(1).Select
Else
ActiveCell.Insert (xlShiftToRight)
ActiveCell.Offset(1).Select
End If
Next r
Ich beginne gerade VBA zu lernen, so kann mein Code elementar sein, aber ich denke, dass meine Probleme ist, dass „.find“ kein boolean Ausdruck ist und ich kenne keine äquivalente Funktion, die boolesch ist, oder wie man sie in eine umwandeln kann.
Vielleicht gibt es eine Möglichkeit, alles auf einmal zu tun, anstatt "für, zu, nächste" -Funktion zu verwenden, aber ich hätte keine Ahnung, wie ich anfangen soll.
Voll Code:
Sub Shift_Over()
Dim row As Integer
row = 1
Dim n As Integer
'Locate last used cell
Range("A1:A8").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(8).Select
Range(ActiveCell, ActiveCell.Offset(7)).Select
row = row + 8
Loop
Rows(row).Select
Do While IsEmpty(ActiveCell)
Rows(row - 1).Select
row = row - 1
Loop
' Remove unneded rows
Dim row1 As Integer
row1 = 1
For n = 1 To row - 1
If Not IsEmpty(ActiveCell) Then
Rows(row - 1).Select
row = row - 1
row1 = row1 + 1
Else
Rows(row).Delete
Rows(row - 1).Select
row = row - 1
End If
Next n
' Check value of row1
Rows(row1).Select
' Shift sub-info right
Dim r As Integer
Dim find As String
find = "* function"
Range("A1").Select
For r = 1 To row1
If Range(ActiveCell).find(What:=find, Lookat:=xlWhole).Select Then
ActiveCell.Offset(1).Select
Else
ActiveCell.Insert (xlShiftToRight)
ActiveCell.Offset(1).Select
End If
Next r
'move sub-info in line with main-info
Range("B1").Delete (xlShiftUp)
Dim row2 As Integer
row2 = row1 + 5
Rows(row2).Select
Do While IsEmpty(ActiveCell)
Rows(row2 - 1).Select
row2 = row2 - 1
Loop
'remove unneeded rows
Dim d As Integer
Dim lines As Integer
lines = 1
For r = 1 To row2 - 1
If Not IsEmpty(ActiveCell) Then
Rows(row2 - 1).Select
row2 = row2 - 1
lines = lines + 1
Else
Rows(row2).Delete
Rows(row2 - 1).Select
row2 = row2 - 1
End If
Next r
End Sub
Auch, wie ich lerne, wenn Sie Ideen, wie mein Code effizienter (verbessern sie) zu machen, oder wenn es irgendwelche Nuancen über die Programmierung, die Sie Ich weiß es nicht, ich würde mich freuen, es zu hören.
Ich habe gerade festgestellt, dass nicht alle meine Code tut, was ich dachte, es würde. Anstatt die gesamte Auswahl zu betrachten, wird nur die aktive Zelle betrachtet. Ich habe versucht, "IsEmpty (ActiveCell)" durch "IsEmpty (Selection)" zu ersetzen, aber es würde so tun, als ob alles Text darin hätte. Wie auch immer, wenn zwei Unterinformationen vorhanden sind, wird die zweite gelöscht. (Die vierte Zeile des Beispiels würde gelöscht.)
'remove unneeded rows
Dim d As Integer
Dim lines As Integer
lines = 1
For r = 1 To row2 - 1
If Not IsEmpty(ActiveCell) Then
Rows(row2 - 1).Select
row2 = row2 - 1
lines = lines + 1
Else
Rows(row2).Delete
Rows(row2 - 1).Select
row2 = row2 - 1
End If
Next r
Was unterscheidet die Funktionsnamen von den Funktionsbeschreibungen? Zum Beispiel, haben nur die Funktionsnamen die Wortfunktion in ihnen? –
Die tatsächliche Beschreibung war zu lang, um alle einzufügen, aber ein Beispiel ist "SUM Funktion" - "Verwenden Sie diese Funktion, um die Werte in Zellen hinzuzufügen." Sie haben alle das erste Wort in Großbuchstaben gefolgt von dem einzelnen Wort "Funktion". Ich habe versucht, die Suchfunktion zu beschränken, indem ich "xlWhole" anstelle von "xlParts" verwendete. –
Ok, also beginnen die Funktionsnamen immer mit mindestens drei Großbuchstaben? Sind in den Daten leere Zeilen vorhanden? –