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

Excle2007を使用しています。

シート1のデータをシート2に自動で転記したいと思っています。

シート1
作業件名ごとにその内容、作業者名が書いてある表。
1行ににつき作業1件
A列:日付
B列:作業件名
C列:内容
D列:作業者名

シート2
作業者ごとに従事した作業をまとめた一覧表で、ひとりにつき1ページ。
表の形式(見た目)はシート1とはまったく別のもの。
作業者ごとに空欄の表が既に作られており、
1ページ目:Aさん
2ページ目:Bさん
という風に、1シートに改ページしながら全ての作業者について1ページずつ一覧表になっている。
1ページは25行を使用しており、
Aさん(1ページ目)は1~25行(Bさん(2ページ目)は26~50行)となる。

1ページ目の表のうち、シート1のデータを入れられる行は11~21行。
3件あれば3行使って残り8行は空欄ということになります
日付欄はシート2のA11~A21
件名欄はシート2のB11~B21
内容欄はシート2のD11~D21

シート2には、作業者の住所や生年月日など、シート1にない項目があらかじめ入力されている。


いつもはシート1を入力後に作業者基準で並べ替えをして印刷し、
シート2の該当する作業者のページに手打ちでデータ入力しています。

シート1のデータをシート2の該当箇所に転記するだけなので、シート1が完成した段階で
シート2を自動で作れたら作業時間の短縮になると思い、考え始めました。

が、VBAに詳しくないため、どこからどう手をつけたらいいものかわかりません。

お詳しい方、お知恵をいただけましたらと思います。
不足情報等ございましたらご指摘いただけましたら補足をさせていただきますので
どうぞよろしくお願いいたします。

A 回答 (2件)

マクロを使わない方法です。


シート1ではA1セルに日付、B1セルに作業件名、C1セルに内容、D1セルに作業者名とそれぞれの項目名が入力されており、それぞれのデータは下行に入力されているとします。
作業列をE列に設けることにしますが、その前にシート2では作業者ごとにページを変えていくわけですがその作業者について順序を付けてシート2を作成するとしたら例えばシート1のG1セルから下行に1,2,3・・と番号を入力してH1セルから下行には対応する作業者の名前を入力します。
その上でE2セルには次の式を入力して下行にオートフィルドラッグします。

=IF(D2="","",INDEX(G:H,MATCH(D2,H:H,0),1)+0.0001*COUNTIF(D$2:D2,D2))

次にシート2ですが25行ごとに作業者が変わるようにとのことですので、A11セルには次の式を入力してD11セルまでオートフィルドラッグしたのちに21行目まで下方にオートフィルドラッグします。

=IF(OR(COLUMN(A1)=3,COLUMN(A1)>4),"",IF(COUNTIF(Sheet1!$E:$E,ROUNDUP(ROW()/25,0)+0.0001*(MOD(ROW(),25)-10))=0,"",IF(AND(MOD(ROW(),25)>10,MOD(ROW(),25)<=21),INDEX(Sheet1!$A:$C,MATCH(ROUNDUP(ROW()/25,0)+0.0001*(MOD(ROW(),25)-10),Sheet1!$E:$E,0),IF(COLUMN(A1)=1,1,IF(COLUMN(A1)=2,2,IF(COLUMN(A1)=4,3,0)))),"")))

これで作業者1番のデータが表示されます。
次に上の式をコピーしてA36セルに貼り付けし、D36セルまでオートフィルドラッグしたのちに46行目まで下行にオートフィルドラッグします。
次にA61に貼り付けし、同様の操作を行います。
このように入力する位置が変わっても式そのものは変わりませんので、何人の作業者でも同様に対応することができます。最初はセル位置を決めて式を入力しオートフィルドラッグを繰り返しますので面倒ですが、一度作成してしまえば後は変更することもないわけですから有効に使うことができるでしょう。
    • good
    • 0
この回答へのお礼

KURUMITOさま

アドバイスをありがとうございます。

ご教授いただいた式を参考に式を入れてみたのですが、どうもうまくいかなくて・・・
入力ミスや参照先に間違いがあると思うので、よく考えてみます。

シート2に入れる式はすごいですね。
こんなに難しい長い式は使ったことがないです!
ひとつひとつ確かめながら勉強させていただきます。

いただきましたアドバイスを参考にやってみてからお礼申し上げたいと思い
昨日おとといとがんばっておりましたら書き込みが遅くなってしまいました。
お詫び申し上げます。

ありがとうございました!

お礼日時:2011/05/27 11:12

質問が長い文章で表現しているが、エクセルの経験が少ないのだろう。

実は週に何度も質問が出る、よくあるパターンで
>作業者名で抜き出し別シートに出したい、で判る。
エクセル関数は抜き出し問題は、既に回答があるように、式が長く複雑になり、エクセルの関数のよほどの勉強をして無いと、わかりにくいだろう。
フィルタで抜き出し、可視セルで捉えて、コピーして別シートに貼り付ける作業をすれば良いが、関数でやりたいのかな。
ーー
「imogasi方式」というのでやってみる.
作業列を1行余分に使ってしまうが。(下記例ではSheet1のE列)
例データ
Sheet1
A-D列 元データ E列は関数の結果
略    略説明山田山田1
運搬鈴木鈴木1
据付田中田中1
準備田中田中2
運搬山田山田2
保守山田山田3
E2の式は =D2&COUNTIF($D$2:D2,D2)
下方向に式複写
ーーー
Sheet2に行ってB1は山田と入れておく
C列C2は =INDEX(Sheet1!$A$1:$D$100,MATCH($B$1&ROW()-1,Sheet1!$E$1:$E$100,0),COLUMN())
D列に式を複写
C2:D2を下方向に式複写。
結果
A-D列
山田
略  略説明山田
運搬山田
保守山田
#N/A#N/A
Sheet3でB1に氏名を田中にして同じ位置にSheet2の式を複写すると
Sheet3
A-D列
田中
略  略据付田中
準備田中
#N/A#N/A
#N/A#N/A
#N/Aを見えなくする方法は、IF文で関数式を入れる行-1がSheet1の山田の件数を越えるときは空白にする式にする。
他の例はGoogleで江も「imogasi方式」で照会すること。
    • good
    • 0
この回答へのお礼

imogasiさま

アドバイスをありがとうございます。
おっしゃるとおり、あまりエクセルには詳しくありません・・・
少しでもできるようになりたいと思い、試行錯誤しながらやっております。
質問文が分かりづらかったようで申し訳ありません。

コピーして貼り付けることをはじめに考えたのですが、
結合しているセルがあちこちにあって貼り付けがうまくいかなかったため、
こちらでご助言をいただきに参りました・・・


アドバイスいただきました式を参考に式を入れてみましたら、
ちゃんと表示させることができました。

imogasi方式というのは、imogasiさまが考えられたものなんですね。
思いのほか簡単な式で解決できて驚いております。

検索をかけて、いろいろと参考にさせていただこうと思います。

アドバイスを参考にまずは自分でやってみてからお礼申し上げたいと思い、
ファイルと格闘しておりましたら書き込みが遅くなってしまいました。
お詫び申し上げます。

どうもありがとうございました!

お礼日時:2011/05/27 11:19

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