プロが教えるわが家の防犯対策術!

すみません、日を改めての再投稿です。

会計処理する上で下記のような方法が出来るかどうか教えて下さい。

「普通預金」シートと「現金」シートがあり明細を記入していきます。

項目には「日付」「摘要」「収入」「支出」「残高」があります。

そこで項目に「番号」を追加し、下記の通りに置き換えます。

会議費=1

「会議費」シートを作成し、「普通預金」と「現金」シートに記入した分は会議費シートに
追加されていくという方法は可能でしょうか?

わかりづらい説明で大変申し訳ありません。
現在の方法だと、例えば「現金」で「会議費」を支払ったとすると、

「普通預金」と「会議費」

2枚に記入しなくてはならないため間違いも起こりやすくなっています。

「普通預金」か「現金」シートに記入すれば自動的に「会議費」に反映されるようにしたいということです。

一応画像も作成してみたのでご参考になれば幸いです。

よろしくお願いいたします。

「二枚のシートから各シートへの抽出」の質問画像

A 回答 (3件)

No.2です!


続けてお邪魔します。

前回の続きです。

「現金」Sheet見出し上で右クリック → コードの表示 → VBE画面に↓のコードをコピー&ペースト

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'この行から
Dim k As Long
k = Cells(Rows.Count, 2).End(xlUp).Row
If Cells(k, 7) = 1 Then
Call ThisWorkbook.会議費マクロ
End If
End Sub 'この行まで

同様に「普通預金」Sheetにも全く同じコードで良いですのでコピー&ペーストしてみてください。

尚、会議費SheetのH列に作業用の列が見えていますが、目障りであればH列を非表示にしておいてください。

尚、すべてのSheetにまだデータがない場合は「会議費マクロ」は実行する必要ありません。
「現金」「普通預金」Sheetに入力すれば自動的に「会議費」Sheetに反映されると思います。

お役に立てば良いのですが、他に良い方法があればごめんなさいね。m(__)m
    • good
    • 0

こんばんは!


なかなかご希望の動きができないようですが・・・
VBAでの方法を持ってきました。
一例です。
↓の画像(小さくて見づらいかもしれません)のような配置でやってみました。
Sheet名は 「現金」・「普通預金」・「会議費」としています。

画面左下のSheet見出し(とりあえず「会議費」Sheet)上で右クリック → コードの表示 → VBE画面が出ますので、
表示された左側のほうに「Thisworkbook」があると思いますので、そこをダブルクリック
新たに画面が表示されますので、↓のコードをコピー&ペーストしてマクロを実行してみてください
(Alt+F8キー → マクロ → マクロ実行です)

Sub 会議費マクロ() 'この行から
Dim ws1, ws2, ws3 As Worksheet
Dim i, j, k As Long
Set ws1 = Worksheets("現金")
Set ws2 = Worksheets("普通預金")
Set ws3 = Worksheets("会議費")
For i = 7 To ws1.Cells(Rows.Count, 2).End(xlUp).Row + 1
On Error Resume Next
If ws1.Cells(i, 7) = 1 And WorksheetFunction.CountIf(ws3.Columns(8), _
ws1.Name & ws1.Cells(i, 2) & ws1.Cells(i, 3)) = 0 Then
With ws3.Cells(Rows.Count, 2).End(xlUp).Offset(1)
.Value = ws1.Cells(i, 2)
.NumberFormatLocal = "yy/mm/dd"
.Offset(, 1).Value = ws1.Cells(i, 3)
.Offset(, 2) = ws1.Cells(i, 4)
.Offset(, 3) = ws1.Cells(i, 5)
.Offset(, 6) = ws1.Name & ws1.Cells(i, 2) & ws1.Cells(i, 3)
End With
End If
Next i
For j = 7 To ws2.Cells(Rows.Count, 2).End(xlUp).Row + 1
If ws2.Cells(j, 7) = 1 And WorksheetFunction.CountIf(ws3.Columns(8), _
ws2.Name & ws2.Cells(j, 2) & ws2.Cells(j, 3)) = 0 Then
With ws3.Cells(Rows.Count, 2).End(xlUp).Offset(1)
.Value = ws2.Cells(j, 2)
.NumberFormatLocal = "yy/mm/dd"
.Offset(, 1).Value = ws2.Cells(j, 3)
.Offset(, 2) = ws2.Cells(j, 4)
.Offset(, 3) = ws2.Cells(j, 5)
.Offset(, 6) = ws2.Name & ws2.Cells(j, 2) & ws2.Cells(j, 3)
End With
End If
Next j
k = ws3.Cells(Rows.Count, 2).End(xlUp).Row
Range(ws3.Cells(4, 2), ws3.Cells(k, 8)).Sort key1:=ws3.Cells(4, 2), order1:=xlAscending
End Sub 'この行まで

あっ!2000文字を超えそうなので
別Sheetのコードはもう一度投稿します。m(__)m
「二枚のシートから各シートへの抽出」の回答画像2
    • good
    • 0

質問する上で下記を知って置いてください


再質問なら、前の質問番号を参考までに記す。前との関連がわかって質問が理解しやすい場合もある。
本コーナーの画像貼り付けなんだが、くっきりしたものもあるが、ぼやけて見難いとか、文字が小さすぎて見えない、とかが多い。本件も一度読者の立場で質問を見てください。見えないのではないですか。
現実問題を簡略化して、エクセルシートに例をつくり、それを質問文章の中にデータを貼り付けてほしい。
私は回答で、ほぼ全問で逆のことをしてます(エクセルのシート上で回答内容をテストし、シートをコピーして回答文に貼り付ける)。列の左右位置が乱れることもあるが。
ーー
本件の質問文ですが判りにくい。
シートは2つらしいが
>普通預金」シートと「現金」シート
>普通預金」と「会議費
とバラバラの表現になっている。
>項目には「日付」「摘要」「収入」「支出」「残高」があります。
は2シートともこの項目なのか
>そこで項目に「番号」を追加し、下記の通りに置き換えます。会議費=1
はどちらのシートか?
番号というよりも費目「コード」(列を作る)が適当だろう。
>「会議費」シートを作成し
第3のシートを作るのか?
読み直して、他に解釈されないか推敲のこと。回答者も下記など1時間ぐらいかかるのだ。
ーーーー
質問者の技量が書いてないので判らないが、VBAは出来ず、関数ばかりを頼るなら、難しいと思う。
と言うのは関数では、条件(=本件では会議費)で該当行を別シートに抜き出すのは難しい。
Googleでimogasi方式で照会すれば、このコーナーに出た抜き出し問題で、数百は出てくると思う。しかし
INDEX、MATCH、SMALL関数を組み合わせた数式
配列数式
imogasi 方式
その他の方式
VBAなどの方式
による回答があると思うが、1番目の方式の式の理解が難しいと思う。
良ければ勉強して使えば良い。
素直なのはフィルタオプションの設定で、会議費の項目の在る行を別シートに抜き出すことだ。
ただこの方式は、データ入力が1月分などまとめて入力が終わってからの方法で、入力の都度反映の方式ではない。
ーー
参考までに
imogasi方式は
例データ
Sheet1
日付費目金額作業列
2011/3/1交際費会費費1
2011/3/2定例会議費21
2011/3/3文具費3
2011/3/4交際費4
2011/3/5消耗品費5
2011/3/6交通費6
2011/3/7接待会議費72
2011/3/8会議費補助83
だ行列はD列で
D2には =IF(COUNTIF(B2,"*会議費*")=0,"",MAX($D$1:D1)+1) 会議費だけの表現しかないなら、式はもっとわかりやすく*は要らない。
会議費という語句が含まれていたら、上からの会議費の行の最大番号に+1して、連番を作る、と言う意味。
ーー
次にSheet2で ($C$30の部分は適当数に設定のこと)
A2に =INDEX(Sheet1!$A$2:$C$30,MATCH(ROW()-1,Sheet1!$D$2:$D$30,0),COLUMN())
これをC列まで式複写
A2:C2の式を下方向に式複写
Sheet2の行番号ROW()を頼りに、SheetのD列に1,2,3・・も行を見つけて、その各列のデータを引っ張ってきている。
#N/AはD列のMAXを超えたら戸要ったIF関数をかぶせて、見えなくする(略)。
結果
2011/3/2定例会議費2
2011/3/7接待会議費7
2011/3/8会議費補助8
#N/A#N/A#N/A
ーー
このやり方はSheet2の式を適当に多数の行に用意しておけば、Sheet1で会議費行が増える都度、Sheet2に反映する。
これとてもSheet2はデータのセルすべて関数式で埋まるので、データが1000行とかを越えると(増えたとき)動作はどうなるか判らない。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!