0

ちょっとしたマクロをエクセルにしたいです。マクロは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を使用したことがありません。

4

4 に答える 4

3

それはあなたが求めることをしますが、関数を使用してワークシートの値を編集できないため、サブです

 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
于 2012-04-14T11:41:56.407 に答える
1

関数を使用する必要はありません。次のサブを使用するだけです。

以下では、すべての*列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
于 2012-04-14T11:59:41.710 に答える
1

これには実際にはマクロは必要ありませんが、VBA を使用したい場合は、時間のかかるループを完全に回避できます。

1 Manual Method using Paste Special - Multiply

ウォーケンバッハから

値の範囲を 5 倍にするには:

  1. 空白のセルに 5 を入力します。
  2. セルを選択し、[編集]、[コピー] の順に選択します。
  3. 値の範囲 (この例では列 A) を選択し、[編集]、[形式を選択して貼り付け] の順に選択します。
  4. [乗算] オプションを選択し、[OK] をクリックします。
  5. 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
于 2012-04-15T04:50:12.870 に答える
0

選択した数値を掛けるだけで、もう少し一般的なものにしないでください。

Sub MultiplyByFive()
    Dim cl As Range

    For Each cl In Selection
        cl = cl * 5
    Next cl
End Sub

65536これにより、ハードコーディングを回避できます。

于 2012-04-14T15:02:50.100 に答える