-1

私はプログラミング全般に不慣れです。VBA を使用して、range("b6:b18") をループしようとしています。各パスを通じてb3、値から減算し、日付をセルに入れ、値が 未満になるまで 1 列ずつオフセットしますb3。基本的に、自動支払いを設定しようとしています。例: 私は 5 つのアカウントを持っています。250.36、17.23、96.12、600.00、5.46。私の支払いは月額 36.12 です。したがって、最初のアカウントが 36.12 未満になるまで、1/1/13 = 36.12 です。ただし、毎月の支払いは同じでなければなりません。1か月で各口座からお金が引き落とされる場合があります。

私が理解できないコードは次のとおりです。

pmt = b3
for each cell in range("b6:b18")
    if cell.value > pmt then
        activecell.value= cell.value -pmt
        activecell =activecell.offset(0,1)

しかし、そのコードは次の endif で閉じられたときに何もしません。また、日付を順番に表示する方法がわかりません。

4

2 に答える 2

1

上記のコードを「機能する」ように修正する方法を説明できますが、全体的な説明がわかりにくいです。

そうは言っても、うまくいけば、それはあなたを正しい軌道に乗せるでしょう

dim pmt as double
dim i as long

pmt = Range("B3").value

for i = 6 to 16
    if Range("B" & i).value > pmt then
        range("B" & i).value = range("B" & i).value - pmt
    end if
next i
于 2012-10-15T05:19:36.823 に答える
1

あなたが何をしようとしているのか、データがどのように配置されているのか正確にはわかりません。そのため、問題を解決するために必要なコードを提供することはできませんが、正しい道に進むためのヒントをいくつか紹介します.

  1. の最初の行として使用Option ExplicitしますModule。これにより、すべての変数をデカルする必要があります。
  2. ActiveCellorは絶対に必要でSelectない限り使用しないでください。これらを回避する方法のヒントについては、この回答を参照してください。
  3. Range変数の設定など、オブジェクトを割り当てる場合は、 を使用しますSet

    Dim rng as Range
    Set rng = Range("B3")
    

    これを行わないことは、デフォルトのプロパティを使用することを意味します。

    Dim rng as Range
    rng = Range("B3")
    

    rng.Value = Range("B3").Value  
    

    同等です

  4. Rangeaを指定せずに参照を使用するWorksheetと、アクティブなシートが暗示されます。

    Set rng = Range("B3")
    

    Set rng = ActiveSheet.Range("B3")
    

    同等です

  5. コードの診断: Step Into( F8) を使用して一度に 1 行ずつコードを実行します。
  6. ウォッチ ウィンドウを使用して、変数の値 (および型) を確認します。

データ レイアウトと期待される結果についてさらに情報を提供すると、より多くのヘルプを提供できます

于 2012-10-15T05:24:57.163 に答える