ちょっとしたマクロをエクセルにしたいです。マクロはA1から2倍の数値を取得し、この数値に5を掛けて、A1に戻す必要がありますが、常にエラーメッセージなどが表示されます。
これまでの私のコード:
Function multiply()
Dim a As Long
For a = 1 To 65563
cell(a,3) = cell(a,3).Value * 5
next a
End Function
私はこれまでVBAを使用したことがありません。
それはあなたが求めることをしますが、関数を使用してワークシートの値を編集できないため、サブです
Public Sub multiply()
On Error GoTo err
Dim val As Long
val = ActiveSheet.Cells(1, 1).Value
ActiveSheet.Cells(1, 1).Value = val * 5
Exit Sub
err:
End Sub
関数を使用する必要はありません。次のサブを使用するだけです。
以下では、すべての*列A*値をマルチプレイできます。
Sub example()
For a = 1 To 65563
Cells(a, 1).Value = Cells(a, 1).Value * 5
Next a
End Sub
65563 CELLSは良い考えではないことを考えると、以下のサブを使用して行をカウントし、メモリ使用量を減らすことをお勧めします。
Sub example2()
Dim countrows As Long
countrows = Range("A" & Rows.Count).End(xlUp).Row
For a = 1 To countrows
Cells(a, 1).Value = Cells(a, 1).Value * 5
Next a
End Sub
これには実際にはマクロは必要ありませんが、VBA を使用したい場合は、時間のかかるループを完全に回避できます。
1 Manual Method using Paste Special - Multiply
ウォーケンバッハから
値の範囲を 5 倍にするには:
2 Code using Paste Special - Multiply
vbaxからの Zack Barresse のコードの使用- 若干の修正を加えたもの
このコードは、選択した範囲をユーザーが入力した乗数で更新します
Sub psMultiply()
' http://www.vbaexpress.com/kb/getarticle.php?kb_id=47
Dim y As Long 'The multiplier value, user-defined
Dim x As Range 'Just a blank cell for variable
Dim z As Range 'Selection to work with
Set z = Selection
y = Application.InputBox("Enter selection multiplier:", _
Title:="Selection multiplier", Default:=10, Type:=1)
Set x = Cells(Rows.Count, "A").End(xlUp).Offset(1)
If y = 0 Then Exit Sub 'Cancel button will = 0, hence cancel
If x <> "" Then
Exit Sub
Else: x.Value = y
x.Copy
z.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
Application.CutCopyMode = False 'Kill copy mode
End If
x.ClearContents 'Back to normal
End Sub
選択した数値を掛けるだけで、もう少し一般的なものにしないでください。
Sub MultiplyByFive()
Dim cl As Range
For Each cl In Selection
cl = cl * 5
Next cl
End Sub
65536
これにより、ハードコーディングを回避できます。