Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8864 / 13644 ツリー ←次へ | 前へ→

【30483】SumIfの集計 琴葉 05/10/28(金) 16:09 質問[未読]
【30492】Re:SumIfの集計 ichinose 05/10/28(金) 17:16 発言[未読]
【30575】Re:SumIfの集計 琴葉 05/10/31(月) 10:12 質問[未読]
【30609】Re:SumIfの集計 ichinose 05/10/31(月) 22:48 発言[未読]
【30636】Re:SumIfの集計 Jaka 05/11/1(火) 17:49 発言[未読]
【30670】Re:SumIfの集計 琴葉 05/11/2(水) 10:35 お礼[未読]
【30669】Re:SumIfの集計 琴葉 05/11/2(水) 10:32 お礼[未読]

【30483】SumIfの集計
質問  琴葉  - 05/10/28(金) 16:09 -

引用なし
パスワード
   A3の
Sheets("4")がアクティブでA3の科目がない場合、G=G+1とすると途中までうまくいくのデバックが出てしまいます。
どこがいけないのでしょうか、よろしくお願いいたします。


Private Sub Button集計_Click()
Set wf = Application.WorksheetFunction
Set myR1 = Sheets("【仕訳帳】").Range("C2:C65536") '借方金額
Set myR2 = Sheets("【仕訳帳】").Range("D2:D65536") '借方科目
Set myR3 = Sheets("【仕訳帳】").Range("F2:F65536") '貸方科目
Set myR4 = Sheets("【仕訳帳】").Range("G2:G65536") '貸方金額

G = 3

For Each i In myR2
  If Cells(G, 1).Value = "" Then
  'G=G+1と入れるとエラーがでてしまいます。
  Else
    If Cells(G, 1).Value = i.Value Then
      tr1 = wf.SumIf(Sheets("【仕訳帳】").Range("D2:D65536"), Cells(G, 1).Value, Sheets("【仕訳帳】").Range("C2:C65536"))
      Cells(G, 3).Value = tr1
      MsgBox tr1
      G = G + 1
    Else
      G = G + 1
    End If
  End If
Next

【30492】Re:SumIfの集計
発言  ichinose  - 05/10/28(金) 17:16 -

引用なし
パスワード
   ▼琴葉 さん:
こんにちは。

>Sheets("4")がアクティブでA3の科目がない場合、G=G+1とすると途中までうまくいくのデバックが出てしまいます。

いきなり、コードだけ提示して

>どこがいけないのでしょうか、よろしくお願いいたします。

はやめませんか?
前の質問投稿があって、関連があるのなら、リンクを貼ってください。

それとエラーが発生したなら、
どの行でどんな種類のエラーが発生したか記述してください。


>Private Sub Button集計_Click()
>Set wf = Application.WorksheetFunction
>Set myR1 = Sheets("【仕訳帳】").Range("C2:C65536") '借方金額
>Set myR2 = Sheets("【仕訳帳】").Range("D2:D65536") '借方科目
>Set myR3 = Sheets("【仕訳帳】").Range("F2:F65536") '貸方科目
>Set myR4 = Sheets("【仕訳帳】").Range("G2:G65536") '貸方金額
>
>G = 3
>
>For Each i In myR2
'↑このForループで65535回ループしますよね?

>  If Cells(G, 1).Value = "" Then
>  'G=G+1と入れるとエラーがでてしまいます。
' でここに↑を入れてしまうと
'Gは、65538まで増加していきますよね?
'よって、
'>  If Cells(G, 1).Value = "" Then
'ここは、G=65537でエラーになりますね!!
>  Else
>    If Cells(G, 1).Value = i.Value Then
>      tr1 = wf.SumIf(Sheets("【仕訳帳】").Range("D2:D65536"), Cells(G, 1).Value, Sheets("【仕訳帳】").Range("C2:C65536"))
>      Cells(G, 3).Value = tr1
>      MsgBox tr1
>      G = G + 1
>    Else
>      G = G + 1
>    End If
>  End If
>Next

エラーを出さないためには、変数Gの値を管理することですが、
仕様としてどうすればよいかは、この情報では
わかりません。

【30575】Re:SumIfの集計
質問  琴葉  - 05/10/31(月) 10:12 -

引用なし
パスワード
   ichinose さん おはようございます。
最近よく質問させていただいていますが、仕訳帳作成→勘定元帳作成→貸借対照表作成
と何とか、ここの善意のかたがたのおかげで作成してきましたが現在、貸借対照表作成
で行き詰まってしまいました。

特に勘定元帳からのデーターの関連付けなどは無いので別に投稿してしまいました。
(勘定元帳まではお蔭様で希望通りの物ができました)
上記3つは同ブックでシート別に作成しています。

エラーの個所は実はあれからいろいろと変えてしまって分からなくなってしまいました
申し訳ありません。
もう一度質問させていただきます。

sheet仕訳帳
    A      B     C    D   E    F     G
1   日付    工番 借方金額 借方科目 摘要 貸方科目 貸方金額
2 2005/10/28   1    100   現金  @  普通預金  100
3 2005/10/28   1    200  普通預金 @   現金   200
4 2005/10/29   1    150   現金  @  普通預金  150
5 2005/10/29   2    300   現金  @  普通預金  300
5 2005/10/29   2    300  普通預金 @   現金   300

上記のようなデータベースをsheet貸借対照表にユーザーフォームを作り
コンボボックス月、コンボボックス工番から下記4タイプを選択し集計(SumIf)しようと考えています。
月別---工番別
    全工事
年間---工番別
    全工事 
たとえばコンボボックスにて ALL月、ALL工番を選択した場合
   
sheet貸借対照表
  A     B     C     D    E        
1 科目  前期繰越金 借方金額 貸方金額 残高
2 現金    *     550  500   前期繰越金+50
3普通預金   *     500  550   前期繰越金-50
4 *     *
5 *     *
6 *     *
  G     H     I     J    K
1 科目  前期繰越金 借方金額 貸方金額 残高
2 *     *
3 *     *
4 *     *
5 *     *
6 *     *
と集計表示したいです。(*はすでに手入力にて記入済み,科目が多いためG..使用)

sheet貸借対照表A2がsheet仕訳帳C列にあれば→sumif集計するという感じで
処理したいのです。最近やっと分岐やloopを使い始めたばかりでよくわかっておりませんが、自分でもいろいろがんばって見ますのでよろしくお願いいたします。

【30609】Re:SumIfの集計
発言  ichinose  - 05/10/31(月) 22:48 -

引用なし
パスワード
   ▼琴葉 さん:
こんばんは。

>
>sheet仕訳帳
>    A      B     C    D   E    F     G
>1   日付    工番 借方金額 借方科目 摘要 貸方科目 貸方金額
>2 2005/10/28   1    100   現金  @  普通預金  100
>3 2005/10/28   1    200  普通預金 @   現金   200
>4 2005/10/29   1    150   現金  @  普通預金  150
>5 2005/10/29   2    300   現金  @  普通預金  300
>5 2005/10/29   2    300  普通預金 @   現金   300
>
>上記のようなデータベースをsheet貸借対照表にユーザーフォームを作り
>コンボボックス月、コンボボックス工番から下記4タイプを選択し集計(SumIf)しようと考えています。
>月別---工番別
>    全工事
>年間---工番別
>    全工事 

>たとえばコンボボックスにて ALL月、ALL工番を選択した場合
では、例題として、      ↑この場合を取り上げます。


>   
>sheet貸借対照表
>  A     B     C     D    E        
>1 科目  前期繰越金 借方金額 貸方金額 残高
>2 現金    *     550  500   前期繰越金+50
>3普通預金   *     500  550   前期繰越金-50
>4 *     *
>5 *     *
>6 *     *
>  G     H     I     J    K
>1 科目  前期繰越金 借方金額 貸方金額 残高
>2 *     *
>3 *     *
>4 *     *
>5 *     *
>6 *     *
>と集計表示したいです。(*はすでに手入力にて記入済み,科目が多いためG..使用)
>
>sheet貸借対照表A2がsheet仕訳帳C列にあれば→sumif集計するという感じで
>処理したいのです。最近やっと分岐やloopを使い始めたばかりでよくわかっておりませんが、自分でもいろいろがんばって見ますのでよろしくお願いいたします。


シート名は、「sheet仕訳帳」と「sheet貸借対照表」とします。

標準モジュールに

'========================================================
Sub main()
  Dim rng1 As Range
  Dim rng2 As Range
  Dim rng3 As Range
  Dim 借方 As String
  Dim 借方金額 As String
  Dim 貸方 As String
  Dim 貸方金額 As String
  With Worksheets("sheet仕訳帳")
    Set rng1 = .Range("a2", .Cells(.Rows.Count, 1).End(xlUp))
    End With
  With Worksheets("sheet貸借対照表")
    Set rng2 = .Range("a2", .Cells(.Rows.Count, 1).End(xlUp))
    Set rng3 = .Range("g2", .Cells(.Rows.Count, 7).End(xlUp))
    End With
  If rng1.Row > 1 Then
    借方 = rng1.Offset(0, 3).Address(, , , True)
    借方金額 = rng1.Offset(0, 2).Address(, , , True)
    貸方 = rng1.Offset(0, 5).Address(, , , True)
    貸方金額 = rng1.Offset(0, 6).Address(, , , True)
    If rng2.Row > 1 Then
     With rng2.Offset(0, 2).Resize(, 3)
       .Formula = Array("=sumif(" & 借方 & ",a2," & 借方金額 & ")", _
               "=sumif(" & 貸方 & ",a2," & 貸方金額 & ")", _
               "=b2+c2-d2")
       '.Value = .Value 'これを入れると実数値が入ります
       End With
     End If
    If rng3.Row > 1 Then
     With rng3.Offset(0, 2).Resize(, 3)
       .Formula = Array("=sumif(" & 借方 & ",g2," & 借方金額 & ")", _
               "=sumif(" & 貸方 & ",g2," & 貸方金額 & ")", _
               "=h2+i2-j2")
       '.Value = .Value 'これを入れると実数値が入ります
       End With
     End If
    End If
End Sub

mainを実行してみて下さい。

sheet貸借対照表の

借方金額 貸方金額 残高を計算します。

確認してみて下さい。

【30636】Re:SumIfの集計
発言  Jaka  - 05/11/1(火) 17:49 -

引用なし
パスワード
   おじゃまします。
帰るのでちょびっとだけ。

>      tr1 = wf.SumIf(Sheets("【仕訳帳】").Range("D2:D65536"), Cells(G, 1).Value, Sheets("【仕訳帳】").Range("C2:C65536"))
>      Cells(G, 3).Value = tr1
えっと、こういう場合。
Cellsがどこのシートだか指定してないので、エラーになる場合が多いです。
Rengeだけでなく、Cellsも指定してやってください。

【30669】Re:SumIfの集計
お礼  琴葉  - 05/11/2(水) 10:32 -

引用なし
パスワード
   ichinoseさんおはようございます。

 うまく作動いたしました、ありがとうございます。
若干、貸借対照表のレイアウトがちがったため修正しています。

あとコンボボックスからの表示内容の変更ができるよう改良したいと思います。
どうもありがとうございました。

【30670】Re:SumIfの集計
お礼  琴葉  - 05/11/2(水) 10:35 -

引用なし
パスワード
   Jakaさんいつもお世話になります。

おかげさまで、何とか会計が楽にできそうです。
まだ完成ではありませんが、わからないことがありましたらまた教えてください。
では、ありがとうございました。

8864 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free