2017-02-20 5 views
1

Ich wollte nur 2 Spalten (stellen Sie sich vor, dass sie Werte wie Zahlen für X- und Y-Koordinaten hosten) und ALLE Werte (aka Zeilen) von Spalte (sagen wir) A (für x) durch einen bestimmten Wert in der Spalte C. Und ich möchte das Gleiche für Spalte B (für Y) in Spalte D tun.Excel 2011 vba: Wie Schleifen Zeilen einer Spalte und multiplizieren alle Zeilen mit einem einzelnen Wert?

So weit habe ich gekommen.

(fast vergessen zu sagen, dass die proportion_höhe und proportion_breite erhalten durch die einteilung von H3 und I3 (zb 1024 x 769) durch H4 und I4 (800 x 600). Haben diese zahlen H3/I3 (was ist gespeichert in proportion_width) und H4/I4 (die in proportion_height gespeichert ist) ich muss nur wissen, wie diese zwei Werte Form Spalte A bis C vermehren und von Spalte B bis D. das ist es!

Sub landmarks_resizer() 

' Creating variables to store the proportion of the new map. Whatever (size) it is. 
Dim proportion_width As Long 
Dim proportion_height As Long 
Dim size_of_column As Long 
Dim current_row As Long 


' Just checking for NON zero values to avoid errors... 
If H3 > 0 And H4 > 0 And I3 > 0 And I4 > 0 Then 
    proportion_width = H3/H4 
    proportion_height = I3/I4 
End If 

' Changing headers of these columns to better identify them with new values 
Range("C1") = "Resized X" 
Range("D1") = "Resized Y" 

' Go to the very last row of column A. And from there goes Up. Which will go to the last row of column A. :-) 
Range("A" & Rows.Count).End(xlUp).Select 
current_row = ActiveCell.Row 

With Range("H1") '<--| reference a "helper" free cell (change "H1" to your needs) 
.Value = proportion_width '<--| store the dividing factor in the "helper" cell 
.Copy '<--| store the dividing factor in clipboard 
End With 
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 
.Offset(, 2).Value = .Value '<--| copy column A values to columns C 
.Offset(, 2).PasteSpecial Operation:=xlPasteSpecialOperationDivide '<--| divide column C values by the value in clipboard 
End With 
Range("H1").ClearContents '<--| clear the content of the "helper" cell 
Application.CutCopyMode = False '<--| release the clipboard 

End Sub 

I hinzugefügt der Code von meinem Kollegen hier und ich bin fast da! Immer wenn ich das Makro lief, heißt es "# DIV/0!".

Antwort

1

können Sie die PasteSpecial() Methode ausnutzen von Range Objekt

Dies ist das Beispiel zum Aufteilen Spalte A Werte von proportion_width und das Ergebnis in der Spalte C Plazieren

With Range("H1") '<--| reference a "helper" free cell (change "H1" to your needs) 
    .Value = proportion_width '<--| store the dividing factor in the "helper" cell 
    .Copy '<--| store the dividing factor in clipboard 
End With 
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 
    .Offset(, 2).Value = .Value '<--| copy column A values to columns C 
    .Offset(, 2).PasteSpecial Operation:=xlPasteSpecialOperationDivide '<--| divide column C values by the value in clipboard 
End With 
Range("H1").ClearContents '<--| clear the content of the "helper" cell 
Application.CutCopyMode = False '<--| release the clipboard 

man in ähnlicher Weise für die Spalte B bis D Hmmmm

+0

wirken kann. Interessant! Und wie soll ich das testen? Soll ich deinen gesamten Code in ein neues Modul einfügen? Und dann einer Taste zuweisen? – user402429

+1

könnten Sie das tun. Oder Sie können Ihre 'For i = 2 To current_row ... Next i' Block mit meinem Code ersetzen. BTW, sobald Sie meine Antwort gefunden haben, lösten Sie Ihre Frage, die Sie auch als angenommen markieren könnten! Danke! – user3598756

+0

Ich bin beeindruckt! Es ist wirklich nah an einer Lösung! Danke für deine Hilfe bis jetzt! Ich bekomme Spalte C, jedoch voll von "# DIV/0!". Aber ich glaube, wir sind sehr nah dran. – user402429

Verwandte Themen