• ベストアンサー

質問:VBAでデータを転記したい

ExcelのVBAで給与支払管理表と源泉徴収表作成用のとりまとめシートを作っております。で、この2表の間でデータをやりとりしたいのです。 表の関係は以下の通りです。それぞれの項目を、仮に(A-a)(A表のaという項目)というように表記します。 【支払内訳表】(仮にA表) A4に氏名(A-a) B4に日額(A-b) C4に勤務日数(A-c) D4に税引き前支給額(A-d) E4に税額(A-e) F4に交通費(A-f) G4に税引き後支給額(A-g) A2に支払件名(cf.例えば営業課など)(A-h-a) e2に何月分かの情報(A-h-e) を入れています。 【支払額個人管理表】(仮にB表) A列に税引き前支給額(B-d) B列に税額(B-e) C列に税引き後支給額(B-g) D列に交通費(B-f) E列に支払内容(B-h) を入れています。 この二つにおいて、A表を開いたときに、 1)(A-a)の文字列で、B表の該当のシートを検索(シートに支払対象者の名前をつけています) 2)(A-d)を(B-d)に転記 3)(A-e)を(B-e)に転記 4)(A-f)を(B-f)に転記 5)(A-g)を(B-g)に転記 6)(A-h-a)と(A-h-e)の文字列を統合して、(B-h)に入れる。 (ただし、(A-h-a)と(A-h-e)の間には、半角スペースを設ける) という作業をさせたいのです。また、A表はいくつもあるのですが、B表は一つだけですので、データが入っている行の下にA表のデータが自動的に入るように設定したいのです。(End(xlUp).でも使うのでしょうか) 複雑で申しわけございません。 ご教授頂けましたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.7

こんばんは。 エクセルから開くからするとそのままで上手くいくのですが、それでは片手落ちですので。 修正してください。 管理表のSheet1のモジュールの中ほどの  Set WBK = Workbooks.Open(myBook) の( )に 次のように myPathを追加してください  Set WBK = Workbooks.Open(myPath & myBook) これで、管理表をダブルクリックで開いても動作します。 なお、動作することは確認済みですので安心して試してください。 以上です。

ogrlism
質問者

お礼

ありがとうございました。 頂いたファイルを元に、自分の使っているファイルの様式 にあわせ、コードに手を加え、最終報告を致したいと思います。

その他の回答 (6)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.6

こんにちは。 大体は分りましたが、追加質問有り。 転記のタイミングをAブックのボタンでとありますが、Aブック(表)は16もあるのですよね であれば、一つしかないBブック(表)にボタンを配置した方がいいのではないですか? Bブックに、シートを一枚追加し、ボタンを配置します。 そして、そこのあるセルに転記したい月を入力してボタンを押し、全事業所の該当月の転記スタート。 この方が実用的ではありませんか? それから、A表のシート名及び順序ですが、一般的に源泉の期間は、1-12月ですよね。 左から、1月、2月・・・・12月では拙いのですか? 別に、4月、5月・・・12月、1月、2月、3月でもいいのですが。 少なくとも、4月ー15月は拙いですよ。13-15月では一目見たとき分らないので。 再度の確認、B表には全社員のデータが、1人1枚のシートになってるんですよね。 ●転記のタイミング、ボタンの配置とう重要ですので、「例えば」ではなくて、実際の仕様にあった補足を願います。 この補足みてからサンプルコードを書き始めます。 以上です。

ogrlism
質問者

お礼

>この方が実用的ではありませんか? なるほど。そうかもしれませんね。 >左から、1月、2月・・・・12月では拙いのですか? 源泉の期間は1月~12月ですので、B表の各シートは、1月 ~12月の情報を入れていくのです ※つまり、Bの各シートの A8には税引き前支給額 17年1月分 B8には税額 17年1月分 C8には税引き後支給額 17年1月分 D8には交通費 17年1月分 E8には支払内容 17年1月分 が入るようになります。これが、19行目まで12月分までが入るようになります。 (但し、ひと月やふた月分、支払がなかったりする人もいます) ただ、A表の各ブックは年度ごとの管理のため、17年4月~翌3月までなのです。説明が足りず、申しわけありません(ただ、使い勝手を考慮して、17年の1月~3月までのシートを各ブックにコピーして、シート名を「17_01」「17_02」「17_03」とつけようかと思います) >再度の確認、B表には全社員のデータが、1人1枚のシートになってるんですよね。 おっしゃるとおりです。 わがままなお願い誠に恐縮ですが、お願いいたします。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.5

こんばんは。 エクセル一般機能でもそうですが、特にVBAの質問の場合は仕様がはっきりしないと無駄な質疑応答を繰り返すことになります。 で、質問を読んで疑問に思ったところを書いてみます。そこが分かるとあっさり解決するでしょう。 (1)表Aは、事業所毎に16シートあるということだが、それは月毎に16シートずつあるのか E2に何月分かの情報(A-h-e)とあるのでたぶんそうだと思うが (2)表Aが月毎に16シートあるとすれば、自ずと表Aと表Bは別々のブックになっていると思うがどうか (3)表Aから表Bへ転記するタイミングはいつか 年末に一気に転記するのか、それとも月の給料計算が終わる毎に転記するのか (3)表Aの見出し行は3行目までで、データは4行目からその事業所の人数分(行)あるということでいいか (4)表Bの見出し行は何行目までで、データは何行目から始まるのか (5)給与だから当然ボーナス月もあり、1-12月までの計、及び、ボーナス月の入る行、ボーナスの計、総計となるはずだが、その辺りは仕様はどうなっているか ま、こんなところが分かれば6dou_rinneさんを始め、他の方からも的確な回答をが寄せられることでしょう。 尚、技術者の方にも同じ質問をされてますが、そちらは削除してください。こちらで解決しましょう。 以上です。

ogrlism
質問者

お礼

ご丁寧なご回答ありがとうございます。 ご質問の部分を回答させて頂きます。 (1)に関しまして :表記方法が悪く、誤解を与えてしまい、申し訳ありません。16シートではありません。16事業あるため、16個のファイルです。一つのファイルに4月から翌3月(シート名は、04月~15月とでもするつもりですが)のシートが入っております。 (2)に関しまして もちろん、表AとBとは、別のファイルです。 (3)に関しまして できましたら、Aの中にコマンドボタンを備えて、そこをクリックすると、Bに転記するようにしたいのです。 (3)に関しまして いえ。Bはシートごとに個人個人の入れてますので、データは、4行目から「月ごとの支払い額」などの情報が入ります。 (4)に関しまして データは、4行目からです。4月分の支払い情報が入ります。 (5)に関しまして ボーナスは、考慮に入れません。 あと、私も技術者の所に投稿したものは削除したいのですが、教えてgooの規約で、一度投稿したのは削除できないみたいです。残念

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.4

>>For i = 1 To A表の数 >>  B表の転記先シート.Cell(6+月).value =B表の転記>先シート.Cell(6+月).value + A表(i)の転記元セル >>Next i >申しわけありません。この意味する所が、ちょっと分からないのですが。 各A表からのデータを集計するのかと思ったのですが。 >例えば、横浜太郎という方の支払が4月分から発生した場合、 >1)B表から、横浜太郎のシートを出し、 >2)そのシートのA8セルに、税引き前支給額を転記 ・・・ >というようにしたいのですが。 Workbook(B表).Sheets("横浜太郎").Cells(1,8).value=税引き前支給額 で転記はできると思いますが。

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.3

>転記もさることながら、氏名で該当シートを検索する方法も分からなかったので。 検索しなくても氏名がシート名ならば workbook(B表).sheets(氏名).cells で操作できるのではないでしょうか。ただし、氏名とシート名が完全に一致しておく必要はありますが。 >A表は、事業ごとにいくつもあるのです(例えば、A事業内訳、B事業内訳など)。 そして、4月分の支払についての情報が、10行目に入ったら、5月分の支払いについては、11行目に入るようにしたいのです。 For i = 1 To A表の数   B表の転記先シート.Cell(6+月).value =B表の転記先シート.Cell(6+月).value + A表(i)の転記元セル Next i こういうイメージでしょうか?

ogrlism
質問者

お礼

早速のご回答ありがとうございます。 A表は、全部で16個あります。今後増えるかもしれません。 >For i = 1 To A表の数 >  B表の転記先シート.Cell(6+月).value =B表の転記>先シート.Cell(6+月).value + A表(i)の転記元セル >Next i 申しわけありません。この意味する所が、ちょっと分からないのですが。例えば、横浜太郎という方の支払が4月分から発生した場合、 1)B表から、横浜太郎のシートを出し、 2)そのシートのA8セルに、税引き前支給額を転記 ・・・ というようにしたいのですが。 可能でしょうか?

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.2

>転記もさることながら、氏名で該当シートを検索する方法も分からなかったので。 検索しなくても氏名がシート名ならば workbook(B表).sheets(氏名).cells で操作できるのではないでしょうか。ただし、氏名とシート名が完全に一致しておく必要はありますが。 >A表は、事業ごとにいくつもあるのです(例えば、A事業内訳、B事業内訳など)。 そして、4月分の支払についての情報が、10行目に入ったら、5月分の支払いについては、11行目に入るようにしたいのです。 For i = 1 To A表の数   B表の転記先シート.Cell(6+月).value =B表の転記先シート.Cell(6+月).value + A表(i)の転記元セル Next i こういうイメージでしょうか? If jobcode = fromSheet.Cells(2 + i, 2) Then

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.1

質問を整理してもらえませんか。 >また、A表はいくつもあるのですが、B表は一つだけですので、データが入っている行の下にA表のデータが自動的に入るように設定したいのです。(End(xlUp).でも使うのでしょうか) 質問はこの点だけですか。("データが入っている行の下"のイメージが今ひとつわかりにくいのですが。) それとも >という作業をさせたいのです。 このプロセス全体のやり方でしょうか。 転記は 転記先セル=転記元セル でできますが。

ogrlism
質問者

補足

>質問はこの点だけですか。("データが入っている行の >下"のイメージが今ひとつわかりにくいのですが。) A表は、事業ごとにいくつもあるのです(例えば、A事業内訳、B事業内訳など)。 そして、4月分の支払についての情報が、10行目に入ったら、5月分の支払いについては、11行目に入るようにしたいのです。 転記もさることながら、氏名で該当シートを検索する方法も分からなかったので。 お願いいたします。

関連するQ&A

専門家に質問してみよう