• ベストアンサー

エクセル:シートをまたいで隔行のコピー

いつもお世話になっております。 Win:XP MSOffice:2003 を使用しています。 会社の作業実績表をエクセルで作成しました。 タイムカードとしての打刻機能や、個人の業務実績(時間)の入力・集計 残業時間の集計(自動)ができるものです。 こちらで教えていただいて優れものが完成しましたが 如何せん、横長の表になり、プリントアウトには適しません。 ついては別のシートに入力データを自動反映して 一か月分のタイムカード(A4サイズ)を作成したいと思っています。 (出勤・退勤・休憩・残業時間等の欄にて作成) が、シートをまたいでのコピー(コピー自体は上手くいくのですが、 ドラッグ&ペーストで)が規則良く映ってくれません。 お知恵を貸してください。 Sheet1:実績表 出社時間 → J5~BP5(セル一つ置き・・・J5/L5/N5/P5・・・) 退社時間 → J6~BP6(セル一つ置き・・・J6/L6/N6/P6・・・) これを Sheet2:タイムカード 出社時間 → B2~B32 退社時間 → C2~C32 に自動反映したい。  B2=Sheet1!J5 B3=Sheet1!L5 と手入力すれば上手くいくのですが、 このB2、B3のセルをドラッグさせてもB4以下には反映されません。 (そういうものですか・・・?) 全て手入力する・・・という手段ができなくはないのですが 何か賢いやり方をご存知でしたら教えてください。 ※説明ベタで申し訳ありません。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

Sheet2のB2セルに  =OFFSET(Sheet1!$J$5,0,ROW(B2)*2-4) Sheet2のC2セルに  =OFFSET(Sheet1!$J$6,0,ROW(C2)*2-4) と入力して下方向にコピーしてください 式を入れるのは二行目でなくても良いです(3行目でも、4行目でも…)

babuiori
質問者

お礼

できました!ありがとうございます。

babuiori
質問者

補足

できればこれを、各個人の表で作成したいと思うのですが 休憩時間・残業時間については、行の位置が人によって違います。 (その間に記入する項目が人によって異なるため) そこは、それぞれの表にて(たとえばC20 → C50 などと) 変更する必要があるでしょうか? それとも「休憩」という行を選択して自動反映してくれるような方法もございますでしょうか? なお、残業時間については、都合によりセルが3つ(Sheet1:C40/C41/C42といった具合)あり その合計をまとめたものをsheet2のつのセルに反映したいのですが・・・可能でしょうか。

その他の回答 (3)

回答No.4

babuioriさんのしたい操作が、行列を入れ替えるだけでいいのならばいくつか方法があります。 (1)行列を入れ替えてコピー&貼り付け Sheet1の表全体をコピーします ↓ Sheet2のB2をクリックします ↓ [編集]メニューより[形式を選択して貼り付け]をクリックします ↓ [行列を入れ替える(E)]にチェックを入れてOKをクリックする ※この方法が一番簡単かもしれません。 (2)数式で参照する =INDIRECT(ADDRESS(ROW(Sheet1!$B$5)-COLUMN(Sheet1!$B$5)+COLUMN(Sheet1!B5),COLUMN(Sheet1!$B$5)-ROW(Sheet1!$B$5)+ROW(Sheet1!B5),4,1,"Sheet1")) この数式をSheet2のB2に入力してC32までコピーしていくだけ (1)の方法をおすすめします。

babuiori
質問者

お礼

ありがとうございます。 行と列を入れ替えるだけ、ではないんです・・・。 (セルが一つずつ飛びますし。) 加えて、一人分だけの作業ではないので、毎回コピペをしていられないんです。 (という説明が抜けていましたね。失礼しました。)

  • redowl
  • ベストアンサー率43% (2140/4926)
回答No.3

Sheet2 B2に =INDIRECT(ADDRESS(5,6+2*ROW(),,,"Sheet1"))

babuiori
質問者

お礼

ありがとうございます。できました。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.2

そりゃまあ、マクロを使えばナンだって出来ますが、30件くらいなら 手入力しまくったほうが絶対に速いですって。 どうしてもマクロで、といわれるなら、Sheet1とSheet2の両方とも、 コピー開始のセルを選択しておいて、以下のマクロを実行すれば データのコピーは可能です。 Sub Macro1() Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste Do Sheets("Sheet1").Select Selection.Offset(0, 2).Select If Selection.Value = 0 Then Exit Do Selection.Copy Sheets("Sheet2").Select Selection.Offset(1).Select ActiveSheet.Paste Loop End Sub

babuiori
質問者

お礼

ありがとうございます。 1人分くらいなら、手入力でもいいかなと思うのですが。 他のスタッフの表に反映する場合、コピペをしても、 人によって行が異なっていたりすることもあり、 同様の手間が人数分×毎月かかってしまうんです・・・。

関連するQ&A