• ベストアンサー

エクセルで入力作業の省力化

(1)シート1のA5に数値1が入力されるとB5~Q9の範囲がシート2にコピー(自動入力)される (2)シート1のA10に数値2が入力されるとB10~Q14の範囲がシート3にコピー(自動入力)される (3)シート1のA15に数値3が入力されるとB15~Q19の範囲がシート4にコピー(自動入力)される (4)さらにシート1のA20に数値1が入力されるとB20~Q24の範囲がシート2の(1)でコピー(自動入力)された所の下に追加されるようにコピー(自動入力)される ちょっと複雑ですが、どのようにしたら出来るようになりますか? よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

こういう課題の解決は、こういう質問コーナーに質問して、回答してもらって、できるようになるのでなく、プログラムを組む必要があり、質問者が最低VBAのイベントという仕組みを設計できるように勉強しないとならない。 >A5に、数値1が入力されると、という部分がそれに係わっている。 A5、A10、A15・・に決まった値が入力されたら、というのはイベントという仕組を捉えて処理する。 手作業なら人間は判断してできる。 関数では複数セルのコピーはないから、式の複写でそういう、変化するセル範囲の、式設定を作らないといけないが、式が複雑になるから普通は関数では処理しない。 === ちょっとエクセルの処理で、楽したいと、欲が出たら最低エクセルのVBAの知識が要ると思うので、長期的には、日常から関心を持って、勉強のこと。

hotbubu
質問者

お礼

「数回のことならVBAなど勉強する時間に比べたら、手作業でやる方が効率的。」 確かにそうなんです。フィルター機能を利用してコピー&貼り付けを18人分×年2回なんですよね。 でももう少し私なりに勉強してみます。回答ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1です。VBAのイベントでやってみた。 それらしくなると思うが、質問者の真意が掴めてないかもしれないし、 微修正してほしい点もあるかもしれない。 数回のことならVBAなど勉強する時間に比べたら、手作業でやる方が効率的。 VBAになれたら、下記など改良して多少便利になるかも。 ーー 準備 テストデータとして、Sheet1のB5:Q19にテストデータを作っておく。 Sheet2、Sheet3.Sheet4の名前の白紙シートを作っておく(質問とシート名が違うが) ーー リボンで、 開発ーVisualBasicを選択 「プロジェクトエクスプローラー」を表示(わからなければWEBで調べる) その中の、Sheet1を選ぶ 画面の左半分の上部General部のWorksheet、右のDeclaration部(イベント)のChangeを選ぶ。 以下がVBAコード Private Sub Worksheet_Change(ByVal Target As Range) Set sh1 = Worksheets("Sheet1") 'MsgBox Target.Address & " " & Target.Value If Target.Address = "$A$5" And Target.Value = 1 Then sh1.Range("B5:Q9").Copy Worksheets("Sheet2").Range("A1") End If If Target.Address = "$A$10" And Target.Value = 2 Then sh1.Range("B10:Q14").Copy Worksheets("Sheet3").Range("A1") End If If Target.Address = "$A$15" And Target.Value = 3 Then sh1.Range("B15:Q19").Copy Worksheets("Sheet4").Range("A1") End If End Sub をコピして、貼り付け。 == 利用操作。 Sheet1のA5に1(半角)を手入力。-->Sheet2のA1:O5を見よ。 Sheet1のA10に2を入力。-->Sheet3のA1:O5を見よ。 Sheet1のA15に3を入力。-->Sheet4のA1:O5を見よ。 ボタンを1つシートに設けてクリックしたつど都度上記を行わせる方法もあると思うが略。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。 質問者のために、参考に例示問題を上げておく。 参照範囲を、エクセル関数で、可変にする仕組みの1つです。 名前機能とOFFSET関数の理王例です。 結構ややこしいと思うが、これでも、本質問の解決の、ごく一部でしかない。 関数の回答でこれを応用した回答が出るかもしれない。 3つのセル範囲のカタマリに名前(エクセルの機能としての名前です)を付ける 名前1 G3:I4 名前2 G8:I10 名前3 G13::I15 1,2,3は、全角(全角半角に注意)にした。もし半角にしたら下記の一部を合わせる必要がある。 みな同じ行数x列数にしている。別にすることも可能だが、後後使うときの式が複雑になる。 A1に名前の1,2,3の部分の数字(半角で)を入れるようにする。 半角で入力 --- 関数を下記のように入れる。 A2セル =CHOOSE(A1,"名前1","名前2","名前3") 名前を決めることになる B1セル =OFFSET(INDIRECT($A$2),ROW()-1,COLUMN()-2,1,1) 縦方向はB3まで、横方向はD列まで式を複写する。 対応するセル範囲を捉える ーー データ例 セル範囲はわざと、とびとびにしている 後後の式が複雑になるので3行x3列に統一している。 G3:I4 123 233 433 351 354 433 123 233 433 G8:I10 456 333 134 312 231 451 311 221 335 G13::I15 556 551 223 678 256 224 896 732 115 ーーー 操作と結果 A1の値を1,2,3(半角で入力)のどれかに入れると B1:D3の各セルの値はそれに応じて変わる。 ーー 本件で役立たなくても、他の場合でこういうことをしたいことがあるだろう。 ーー 質問では A1に当たるセルが3セルのどれかになっていて、難しさが増えるはず。 .

関連するQ&A