2017-08-17 24 views
3

したがって、毎週、請求書のためにスプレッドシートを送付するベンダーがいます。名前の列では、 "BCRプラザ"と同じ場合は、私は自動的にその下に別の行を追加するには、前の行からいくつかのデータをコピーし、元の行の合計を2で割るに優れていると思います。私はすでにこれの。私が把握できないのは、上記のすべてのアクションが実行された後で元の合計に戻ってそれをさらに分割して結果に置き換えることを教える方法です。請求書用のExcelマクロ

これは私が現在、今持っているマクロです。これを試してみてください

Sub BlankLine() 

Dim Rng As Range 
Dim WorkRng As Range 
Dim Name As String 
Dim Memo As String 
Dim dn As Variant 
Dim dt As Variant 
Dim Total As Variant 

On Error Resume Next 
xTitleId = "Add New Row" 
Set WorkRng = Application.Selection 
Set WorkRng = Cells.Select 
Set WorkRng = WorkRng.Columns(1) 
xLastRow = WorkRng.Rows.Count 
Application.ScreenUpdating = False 
For xRowIndex = xLastRow To 1 Step -1 
    Set Rng = WorkRng.Range("A" & xRowIndex) 
    If Rng.Value = "BCR Plaza" Then 
      dt = Range("B" & xRowIndex).Value 
      dn = Range("D" & xRowIndex).Value + 0.5 
      Memo = Range("C" & xRowIndex).Value 
      Total = (Range("I" & xRowIndex).Value)/2 
     Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown 
      Range("A" & xRowIndex + 1) = "Billing" 
      Range("D" & xRowIndex + 1) = dn 
      Range("B" & xRowIndex + 1) = dt 
      Range("C" & xRowIndex + 1) = Memo 
      Range("I" & xRowIndex + 1) = Total 

    End If 
Next 
Application.ScreenUpdating = True 
End Sub 

オリジナルファイル enter image description here

マクロ enter image description here

+1

'On Error Resume Next'?どうして?これにより、コードをデバッグするのがほとんど不可能になります(もしあなたがそれを使っているのであれば、 'Err.Number'と' On Error GoTo 0'との照合なしで)。そういった使い方は、ほとんどの場合、悪い考えです。 –

+0

私は次の時間に私がcoda vbaを念頭に置いておくつもりです。それを指摘してくれてありがとう。私はちょうど2週間前にvbaを始めましたので、私は長い道のりがあります。再度、感謝します。 – OneaboveAll

+0

ちょうど2週間のすてきなコード。もう1つのやや似たような発言は、 'Option Explicit'を使う習慣になっています(実際には、VBAエディタのオプションで'変数宣言を必要とする 'を有効にして自動化してください)。これらの提案は、長期的にはデバッグ時間を大幅に節約します。 –

答えて

1

後...

Sub BlankLine() 
Dim Memo As String 
Dim dn As Variant 
Dim dt As Variant 
Dim Total As Variant 
Dim xRowIndex As Long, xLastRow As Long 

Application.ScreenUpdating = False 
xLastRow = Cells(Rows.Count, 1).End(xlUp).Row 
For xRowIndex = xLastRow To 2 Step -1 
    If Cells(xRowIndex, 1) = "BCR Plaza" Then 
     dt = Range("B" & xRowIndex).Value 
     dn = Range("D" & xRowIndex).Value + 0.5 
     Memo = Range("C" & xRowIndex).Value 
     Total = (Range("I" & xRowIndex).Value)/2 
     Rows(xRowIndex + 1).Insert 
     Range("A" & xRowIndex + 1) = "Billing" 
     Range("D" & xRowIndex + 1) = dn 
     Range("B" & xRowIndex + 1) = dt 
     Range("C" & xRowIndex + 1) = Memo 
     Range("I" & xRowIndex + 1) = Total 
     Range("I" & xRowIndex) = Total 
    End If 
Next 
Application.ScreenUpdating = True 
End Sub 
+0

これは機能します。それは私のマクロと同じことでした。問題は、新しい行が元の行/ 2の合計を持つが、元の行はまだ変更されていない合計を持つことです。それは変更する必要があり、残っている残りの半分である新しい番号に置き換えられます。私がここでやろうとしているのは、オリジナルの合計を半分に分割し、半分を新しい行にシフトし、元の合計を残りの半分に置き換えます。私はこれを行う方法がわかりません..... – OneaboveAll

+0

Range( "I"&xRowIndex)= Totalを追加するだけです。編集されたソリューションを参照してください。 – sktneer

+0

ありがとうございます。これは素晴らしいです! – OneaboveAll