1

コマンド ボタンを押すたびにパーツのカウントをインクリメントできるマクロを Excel で作成したいと考えています。

現在、私のコンセプトは、vlookup を使用して、以下を使用してその部分の既存のカウントを取得することです。ただし、セル内の実際のカウント値はインクリメントされません。これは私が望むものです。vlookup はセル内の値を返すためだけに使用されるのではないかと思いますが、セルは実際のインクリメントのプロセスでアクティブ化されません。誰かが私がそれを修正する方法を教えてもらえますか? 私はまだvbaに慣れていません。ありがとう!!!:)

たとえば、Vlookup は Sheets("Location") のセル A5 で C1value を見つけます。セル C5 の値を自動的に 1 増やします。

Sub FindAddTools()

Dim C1Qnty As Double

C1value = Sheets("Issue").Range("D11")

Sheets("Location").Activate

C1Qnty = WorksheetFunction.VLookup(C1value, Range("A:D"), 3, False)

C1Qnty = C1Qnty + 1

End Sub

アドオン: 元の質問へのアドオン。範囲全体で同じことができるかどうか疑問に思っていましたか?

たとえば、C1value は Sheets("Issue").Range("D11:D20") の範囲になりました。Sheets("Location") でこの範囲内のすべての値を検索し、列 C で対応するカウントを増やしたいと考えています。

範囲のすべてのセルに対して同じ手順を繰り返さずにこれを行う方法はありますか? ありがとう!:)

4

2 に答える 2

0

あなたのコメントに基づいて、これはそれを行うべきだと思います。

Activate注意:セル/範囲を参照する機能を実行するためにワークシートを使用する必要はありません。

Sub FindAddTools()
Dim shIssue as WOrksheet: Set shIssue = Sheets("Issue")
Dim shLoc as Worksheet: Set shLoc = Sheets("Location")
Dim allC1Values as Range
Dim C1Value as Variant 
Dim C1Qnty As Double
Dim foundRow as Long


Set allC1Values = shIssue.Range("D11:D100") '## Modify as needed.
For each C1Value in allC1Values.Cells

    C1Qnty = WorksheetFunction.VLookup(C1value, shLoc.Range("A:D"), 3, False)
    C1Qnty = C1Qnty + 1

    foundRow = WorksheetFunction.Match(c1Value,shLoc.Range("A:A"),False)
    shLoc.Range("C" & foundRow).Value = CqQnty
Next
End Sub

これには注意してください。関数で「見つけた」のと同じセルにすぐに書き込みます。そのVLOOKUPため、このマクロを再度実行すると、セルが再びインクリメントされることは明らかです。しかし、これは望ましい機能である可能性があり、そうであれば問題ありません。

注:または関数でC1Valueが見つからない場合、エラー トラップはありません。VLOOKUPMATCH

于 2013-06-28T03:30:05.863 に答える
0

これが私のショットです。値が一致しない場合、何も起こりません:

Sub FindAddTools()
Dim RangeToMatch As Excel.Range
Dim cell As Excel.Range
Dim C1Value As Variant
Dim C1Row As Variant

Set RangeToMatch = Sheets("Issue").Range("D2:D11")
For Each cell In RangeToMatch
    C1Value = cell.Value
    With Sheets("Location")
        C1Row = Application.Match(C1Value, .Range("A:A"), 0)
        If Not IsError(C1Row) Then
            .Range("C" & C1Row).Value = .Range("C" & C1Row).Value + 1
        End If
    End With
Next cell
End Sub

一致するセルの範囲を循環するように編集しました。その範囲はD2:D11上記に設定されています。

于 2013-06-28T03:39:23.910 に答える