みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

(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)でコピー(自動入力)された所の下に追加されるようにコピー(自動入力)される

ちょっと複雑ですが、どのようにしたら出来るようになりますか?
よろしくお願いします。

投稿日時 - 2018-05-08 13:13:00

QNo.9496362

困ってます

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

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

投稿日時 - 2018-05-08 14:33:05

お礼

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

でももう少し私なりに勉強してみます。回答ありがとうございました。

投稿日時 - 2018-05-19 20:49:37

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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つシートに設けてクリックしたつど都度上記を行わせる方法もあると思うが略。

投稿日時 - 2018-05-08 22:34:16

ANo.2

#1です。
質問者のために、参考に例示問題を上げておく。
参照範囲を、エクセル関数で、可変にする仕組みの1つです。
名前機能とOFFSET関数の理王例です。
結構ややこしいと思うが、これでも、本質問の解決の、ごく一部でしかない。
関数の回答でこれを応用した回答が出るかもしれない。
3つのセル範囲のカタマリに名前(エクセルの機能としての名前です)を付ける
名前1G3:I4
名前2G8:I10
名前3G13::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:I4123233433
351354433
123233433

G8:I10456333134
312231451
311221335

G13::I15556551223
678256224
896732115
ーーー
操作と結果
A1の値を1,2,3(半角で入力)のどれかに入れると
B1:D3の各セルの値はそれに応じて変わる。
ーー
本件で役立たなくても、他の場合でこういうことをしたいことがあるだろう。
ーー
質問ではA1に当たるセルが3セルのどれかになっていて、難しさが増えるはず。

.

投稿日時 - 2018-05-08 18:29:59

あなたにオススメの質問