Top > 財務管理> シートを使った仕訳伝票入力

VBA通信教材申込み

VBA課題解決型実践塾セミナー内容

申込 ヤフーショッピング

フォームを使った仕訳伝票入力

(3)シートを使った仕訳伝票入力

シートを使った仕訳伝票入力

エクセルで振替伝票を作成した場合は関数がシートに記入されているため間違って消してしまうことがあります。
VBAで作ったシートを使った仕訳伝票は計算式が記入されていませんので安心して使うことができます。

(a)科目コードを直接入力した場合の検索

1行目の借方コードで100を入力してエンターキーを押すと借方科目に現金が表示されます。
VLOOKUP関数を使えばこのようになりますが、科目が追加された時は範囲を変更しないといけません。
=VLOOKUP(B5,科目表!$A$1:$B$45,2)
VBAを使う場合2つの操作が必要になります。
1つはコード入力の範囲が変更になったとき(科目コードを入力した時)
5行2列から9行2列・5行5列から9行5列までが変化したとき
Target.Column = 2 And Target.Row >= 5 And Target.Row <= 9
Target.Column = 5 And Target.Row >= 5 And Target.Row <= 9
の条件があったときに検索処理に入ります。
Targetの使い方と仕訳伝票シートにVBAが書かれていることがポイントです。
金額の合計式もありますので理解してください。
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim x As Long
  Dim i As Long
  Dim goukei As Long
  If Target.Column = 2 And Target.Row >= 5 And Target.Row <= 9 Then
    x = Target.Row
    Cells(x, 3) = kamokukensakuf(Cells(x, 2))
  End If
  If Target.Column = 5 And Target.Row >= 5 And Target.Row <= 9 Then
    x = Target.Row
    Cells(x, 6) = kamokukensakuf(Cells(x, 5))
  End If
  If Target.Column = 4 And Target.Row >= 5 And Target.Row <= 9 Then
    x = Target.Row
    For i = 1 To 5
      goukei = goukei + Cells(i + 4, 4)
    Next
    Cells(10, 4) = goukei
  End If
End Sub
2つめは科目コードを引数にして科目名を戻り値とする関数kamokukensakufの使い方です。
これは標準モジュールに書きます。
検索ボタンでも使うモジュールです。
Function kamokukensakuf(kcode As Long) As String
  Dim lastrow As Long
  Dim i As Long
  lastrow = Worksheets("科目表").Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To lastrow
    If kcode = Worksheets("科目表").Cells(i, 1) Then
      kamokukensakuf = Worksheets("科目表").Cells(i, 2)
      Exit Function
    End If
  Next
  kamokukensakuf = ""
  MsgBox "科目コードがみつかりません"
End Function

(b)科目一覧表からの検索

シートを使った仕訳伝票入力

HelpWindowに科目表を持ってくるところは
  With kamokulist
    .AddItem
    .List(i - 2, 0) = Worksheets("科目表").Cells(i, 1)
    .List(i - 2, 1) = Worksheets("科目表").Cells(i, 2)
  End With
ポイントは科目コードを入力するセルがアクティブであることが必要です。
科目コード・科目名をアクティブとアクティブの右隣
Cells(ActiveCell.Row, ActiveCell.Column + 1) =
kamokulist.List(kamokulist.ListIndex, 1)
に代入しています。科目名はListIndexを使っています。
実行ボタンをクリックするより科目名でダブルクリックで取り込む方が自然です。
その後Unload Meでフォームを閉じています。
Private Sub cmdCancel_Click()
  Unload Me
End Sub
Private Sub cmdJikkou_Click()
  ActiveCell = kamokulist.Text
  Cells(ActiveCell.Row, ActiveCell.Column + 1) =
kamokulist.List(kamokulist.ListIndex, 1)
End Sub
Private Sub UserForm_Initialize()
  Dim i As Long
  Dim lastrow As Long
  lastrow = Worksheets("科目表").Cells(Rows.Count, 1).End(xlUp).Row
  kamokulist.ColumnCount = 2
  For i = 2 To lastrow
    With kamokulist
      .AddItem
      .List(i - 2, 0) = Worksheets("科目表").Cells(i, 1)
      .List(i - 2, 1) = Worksheets("科目表").Cells(i, 2)
    End With
  Next
End Sub
Private Sub kamokulist_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ActiveCell = kamokulist.Text
  Unload Me
End Sub

(c)伝票登録

コンピュータの効果は大量のデータを加工することです。
仕訳伝票シートで入力したデータを仕訳帳のシートにためていかないと意味がないです。
仕訳帳に追加するポイントは仕訳帳の最後の行を調べてそれに1を+した行数に代入することです。
5行の仕訳伝票のなかでいつも5行使うとは限りませんので空白行の上の行まで追加する処理を入れます。
If Worksheets("仕訳伝票").Cells(i, 2) <> "" Then
Sub 仕訳登録()
  Dim lastrow As Long
  Dim i As Long
  Dim j As Long
  Dim aaa As String
'仕訳帳コードの最終行の取り出し
  j = Worksheets("仕訳帳").Cells(Rows.Count, 1).End(xlUp).Row
'仕訳入力の最終行までの繰り返し
  For i = 5 To 9
'現金出納帳コードの入金金額があるか空白でない(入金データの処理)
    If Worksheets("仕訳伝票").Cells(i, 2) <> "" Then
'仕訳入力から仕訳帳コードへ日付の移行
      Worksheets("仕訳帳").Cells(j + 1, 1) = Worksheets("仕訳伝票").Cells(3, 6)
'借方の科目コード
      Worksheets("仕訳帳").Cells(j + 1, 2) = Worksheets("仕訳伝票").Cells(i, 2)
'借方の科目名
      Worksheets("仕訳帳").Cells(j + 1, 3) = Worksheets("仕訳伝票").Cells(i, 3)
'借方金額
      Worksheets("仕訳帳").Cells(j + 1, 4) = Worksheets("仕訳伝票").Cells(i, 4)
'貸方の科目コード
      Worksheets("仕訳帳").Cells(j + 1, 5) = Worksheets("仕訳伝票").Cells(i, 5)
'貸方の科目名
      Worksheets("仕訳帳").Cells(j + 1, 6) = Worksheets("仕訳伝票").Cells(i, 6)
'貸方金額
      Worksheets("仕訳帳").Cells(j + 1, 7) = Worksheets("仕訳伝票").Cells(i, 4)
'仕訳入力から仕訳帳コードへ摘要の移行
      Worksheets("仕訳帳").Cells(j + 1, 8) = Worksheets("仕訳伝票").Cells(i, 7)
    End If
'仕訳帳コードの行Noの1加算
    j = j + 1
  Next
'入力データのクリア(コードのクリアに注意)
  For i = 5 To 9
    For j = 2 To 7
      Worksheets("仕訳伝票").Cells(i, j) = ""
    Next
  Next
End Sub

塾長あいさつ
基本方針(考え方)
通信教育内容
課題解決セミナー内容
初心者基礎コース内容
カリキュラム・料金
案内地図・各種リンク
問合せ・申込み
アベノ塾
システムの内製化
アサイコンピュータACS
応用部品集(有料)
販売管理(事例)
財務管理(事例)
顧客管理(事例)
見積もり(事例)
給与(事例)
介護(事例)
ゴースト暗算(事例)
部品集(部品の基礎)
部品集(シート関連)
部品集(データベース)
部品集(セル関連)
部品集(関数)
部品集(フォーム関連)
部品集(ブック関連)
部品集(その他)
変数の勉強
繰り返しと条件文
マスター登録.訂正.削除
フォルダー内のファイル
項目をシート名で作成
ブックの操作
CSVファイルの取り込み
呼び出し元・先
商品マスター検索
エクセル関数をVBAで
エクセル関数を使う
よくつかうプログラム
販売管理(ソース)
財務管理(ソース)
給与管理(概要・画面)
見積もり(概要・画面)
工程管理(概要・画面)
原価管理(概要・画面)