2017-02-20 5 views
1

Я просто хотел получить 2 столбца (предположим, что они будут принимать значения, такие как числа для координат x и y) и делить ВСЕ значения (aka строки) из столбца (скажем) A (для x) на определенное значение в столбце C. И я хотел бы сделать то же самое для столбца B (для Y) в столбце D.Excel 2011 vba: Как закодировать строки столбца и умножить все строки на одно значение?

Вот как далеко я добрался.

(почти забыл рассказать вам, что пропорции_худож и пропорциональная ширина получаются путем деления H3 и I3 (например, 1024 x 769) на H4 и I4 (800 x 600). Имея эти числа H3/I3 (который равен хранится в proportion_width) и H4/I4 (который хранится в proportion_height) Мне просто нужно знать, как умножить эти два значения формы столбца A в C и из колонки B до D. Вот так!

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 

Я добавил код моего коллеги здесь, и я ПОЛНОСТЬЮ попал туда! Всякий раз, когда я запускал макрос, он говорил «# DIV/0!».

ответ

1

вы можете использовать метод PasteSpecial() из Range объекта

это пример для деления значения столбца A с помощью proportion_width и размещение результата в колонке C

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 

вы можете действовать аналогично для столбца B в D

+0

Хммммм. Интересно! И как мне это проверить? Должен ли я поместить весь ваш код в новый модуль? А затем назначьте его кнопке? – user402429

+1

вы могли бы это сделать. или вы можете подставить свой 'For i = 2 To current_row ... Следующий i' блок с моим кодом. BTW, как только вы нашли, что мой ответ решил ваш вопрос, вы могли бы также отметить его как принятый! Спасибо! – user3598756

+0

Я впечатлен! Это действительно близко к решению! Спасибо за вашу помощь! Однако я получаю столбец C, полный «# DIV/0!». Но я считаю, что мы действительно близки. – user402429

Смежные вопросы