• ベストアンサー

エクセル

エクセルで、ある申請用紙のフォーマットを作り、申請者・申請日・申請理由などを記入・印刷します。申請書は毎回1~5行程度の内容ですが、都度の申請内容をすべて履歴として別シートに累積しておきたい(過去から「誰が、いつ、申請を出しているか」が一目瞭然のリスト)場合、どういったやり方が一番簡単且つシンプルでしょうか? 簡単なマクロボタンで、誰でも操作が簡単な風にしたいのですが、マクロはほとんど初心者でやり方が分からず・・・どなたか良いアドバイスをお願いします。

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

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

空行が気になるなら、挿入してから空行を消すのではなく、挿入する前に、データがある行だけの行全体をコピーして挿入すれば良いです。 あるセルを選択して、そのあとはショートカットキーを組み合わせるだけで、データのある行だけの行全体を選択できるので、それをマクロ記録すれば良いです。

kei-lanika
質問者

お礼

教えて頂いた通りにやってみました! 申請用紙の記入されたセルだけをCTRL+Shift+↓→ で範囲指定し、リストの方に挿入していく形のマクロを作ってみたら出来たので、これで理想のものが出来ました! 本当に有難うございました。 返信遅れて申し訳ありませんでした。。。

その他の回答 (5)

  • shakunin
  • ベストアンサー率44% (53/118)
回答No.6

No.1です。 No.5さんご提案のCOUNTA()を使ったマクロを作ってみました。 申請用紙のシート  A2セルに申請日  B3セルに申請者  C4セルに申請理由  ボタンにMacro1()を割り当て 履歴のシート  A列に申請日  B列に申請者  C列に申請理由  D1セル =COUNTA(A:A) Macro1()の内容 Dim Shinseibi As Long Dim Shinseisha As String Dim Riyuu As String Dim Ichi As Integer Sub Macro1() Shinseibi = Cells(2, 1) Shinseisha = Cells(3, 2) Riyuu = Cells(4, 3) Sheets("履歴").Select Ichi = Cells(1, 4) + 1 Cells(Ichi, 1) = Shinseibi Cells(Ichi, 2) = Shinseisha Cells(Ichi, 3) = Riyuu End Sub 基本はこんな感じでいけると思いますが、どうでしょうか。

kei-lanika
質問者

お礼

私にはまだ難しいみたいです。。。申請用紙の記入されたセルだけをCTRL+Shift+↓→ で範囲指定し、リストの方に挿入していく形のマクロを作ってみたら出来たので、それでやってみます。 本当にレベル低すぎですみません・・・有難うございます!!

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.5

>入力フォーム(一覧表)にある最終行を、vlookupやindex関数で印刷用シートに参照させるテクが分かりません 必ずデータが入っている列をのデータ数を数える 例: =COUNTA(A:A) たとえば表題や項目名が有ったとしても最終行の行番号が求められます 後は申請書の入力欄に =OFFSET(データシート!A1,COUNTA(データシート!A:A)-1,目的列) とすればいいです。 オフセット関数は基点が0なので目的列はCOLUMN-1になるので注意。 --------------- 申請用紙に入力したものを一覧の最終行に追加する行為はマクロでないと難しいのですが。 Range("A65536").End(xlUp) でデータの最終行を求めて Offset で位置を指定してデータを挿入する、初歩的なマクロですから挑戦してみてください。

kei-lanika
質問者

お礼

=COUNTA(A:A), OFFSET ともに初めて使いました。便利な式ですね。今後活用します! このやり方でも出来ましたが、最後のマクロ部分がうまく繋がらず・・・私にはまだ難しいみたいです。。。申請用紙の記入されたセルだけをCTRL+Shift+↓→ で範囲指定し、リストの方に挿入していく形のマクロを作ってみたら出来たので、それでやってみます。 本当にご指導有難うございました!

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

1)申請用紙の、申請内容5行(内容が1行しかなくても、とりあえず5行)を、行選択してコピー。 2)履歴用別シートの先頭行(1行目は項目名になると思うので、2行目)に、コピー内容を挿入。 この一連の作業を、「ツール - マクロ - 新しいマクロの記録」で記録してみましょう。 そして、その記録したマクロをボタンに割り当ててみましょう。 内容が5行に満たない場合は、空白行も挿入されますが、それなりの履歴リストができあます。 オートフィルタで、目的のデータを抽出することもできます。 このやり方だと、65536行までという行数制限ができてしまいますが、13107回までは大丈夫で、単純に365日で割ると、1日あたり35.9回まで大丈夫という計算になります。 なので、頻度によって、履歴用シートを、1年ごとにしたり、2年ごとにしたり、半年ごとにして、そのつどマクロを書き換えればやっていけます。 徐々にマクロを勉強していけば、その都度マクロを書き換えなくても、シートが一杯になったら自動的に次のシートを作るというようなマクロも作れるようになります。

kei-lanika
質問者

補足

やってみたら出来ました!が、やはりなんとなく空白行が気になります。一連のマクロの最後に、リストの空白行を削除する、といったコマンドを追加する事はかなり難しいでしょうか・・・?込み入ってくる場合は、やはり参照式などでのやり方を考えて見ます。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

入力用のシートを一覧表で作成(もしくは入力フォームを作成)。 入力フォームの最終行を印刷用シートの必要な項目にVLOOKUPやINDEX関数で参照。 印刷のマクロボタン作成(もしくは入力フォームの完了で印刷マクロ動作実施)。 こんなもんですかね。

kei-lanika
質問者

補足

入力フォーム(一覧表)にある最終行を、vlookupやindex関数で印刷用シートに参照させるテクが分かりません・・・そこを聞いてもいいでしょうか?ヘルプを見てもどうもよく分からず。。。

  • shakunin
  • ベストアンサー率44% (53/118)
回答No.1

ご希望の回答から外れますが、ご質問のような用途ならAccessの方が適しているものと考えます。 実際、以前勤めていた会社で同様の処理をAccessやLotus Notesで組みましたが、そんなに手間がかかるものでもなく、Excelでやるよりは将来的な拡張や応用に優れていると思います。 一例として参考URLを挙げておきますので、ご検討されては如何でしょうか。 (Accessは導入されていない、導入出来ないとのことであればスルーして下さい)

参考URL:
http://www.accessclub.jp/beginer/index.html
kei-lanika
質問者

お礼

アドバイス有難うございます。ACCESSで作る程は件数が出ないと思うのと、Accessを全く使い慣れていないユーザーがほとんどなので、エクセルの方が何かと導入しやすいかと思ってます。でも、本当に有難うございました!!

関連するQ&A