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

解決済みの質問

エクセル 他シートに特定項目のみ自動入力する方法

質問 エクセルで、次のように設定することが、関数またはマクロでできませんでしょうか。どうか知恵をお貸しください。

Sheet1(購入一覧)
 果物  単価(円)  個数  購入金額(円)
みかん    100     2  200
りんご    200 3 600

Sheet2(みかん)
 Sheet1の「果物」列で「みかん」と入力すると、「みかん」行全体(「果物」列~「購入金額(円)」列まで)が自動入力される。
 一方、Sheet1で「果物」列に他の果物(りんごなど)を入力しても、Sheet2に自動入力されない。

Sheet3(りんご)
 Sheet1の「果物」列に「りんご」と入力すると、「りんご」行全体(「果物」列~「購入金額(円)」列まで)が自動入力される。
 一方、Sheet1で「果物」列に他の果物(みかんなど)を入力しても、Sheet3に自動入力されない。

投稿日時 - 2019-04-25 07:15:16

QNo.9610294

困ってます

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

添付図参照
1.Sheet1、Sheet2、Sheet3 のシート名をそれぞれ
 ̄ ̄購入一覧、みかん、りんご
 ̄ ̄に変更
2.このブックに[名前を付けて保存]を実行しておく
3.シート「購入一覧」において、
 ̄ ̄範囲 A1:D1000 を選択 ⇒ Alt+MC ⇒ "上端行"だけにチェック入れ
 ̄ ̄⇒ [OK]
4.シート「みかん」のセル A2 に次式を入力 ⇒ セル A2 を右3列に
 ̄ ̄オートフィル ⇒範囲 A2:D2 を下方にズズーッとオートフィル
 ̄ ̄ =IFERROR(INDEX(INDIRECT(A$1),SMALL(IF(果物=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,99),ROW(果物)),ROW(A1))-1),"")
 ̄ ̄【お断り】上式は必ず配列数式として入力のこと
5.シート「りんご」において、ステップ4を実行

投稿日時 - 2019-04-25 19:13:26

お礼

ありがとうございます。試してみたのですが・・・・さらに試してみます。

投稿日時 - 2019-04-29 00:06:23

ANo.5

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

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

-広告-
-広告-

回答(5)

ANo.4

VBAなしで、おやりになりたいことが可能です。
テーブルとして書式設定は如何でしょう

添付のように
添付のように任意のセルをアクティブにして⇒ホーム
⇒テーブルとして書式設定⇒先頭行をテーブルの見出しとして使用するに?
⇒OK  と進みます。
テーブルとして書式設定すると
・各見出しの右に??が表示されフィルターと並び替えの機能になります
・空白行もフィルタ対象になり、印刷時に空白行を除去できます
・データ入力時にEnterでマウスカーソルが右に移動しますが
 テーブルの右端の次は次行の先頭になり入力効率が上がります
・数式は一つのセルに定義すると他の行も同じ式が適用されます

投稿日時 - 2019-04-25 13:18:07

お礼

返答が遅くなりましたが、ありがとうございます。

投稿日時 - 2019-04-29 00:07:07

ANo.3

恐らくこういう事がしたいのだろうと勝手に判断してマクロを作成しました
Sheet1にすべて入力した後で以下のマクロを動かすと、果物名別に新規シートを作成し、情報を出力します。
あくまでサンプルですので、変数宣言やエラー処理もしていません。悪しからず。

Sub sample()
  Set myDic = CreateObject("Scripting.Dictionary")
  With Worksheets(1)
    '果物名一覧作成
    On Error Resume Next
    For i = 2 To .Range("A1").End(xlDown).Row
      myDic.Add .Cells(i, 1).Value, ""
    Next i

    '果物名毎に新規シートに出力
    myKey = myDic.keys
    For i = 0 To (myDic.Count - 1)
      .Range("$A:$E").AutoFilter Field:=1, Criteria1:=myKey(i)
      Sheets.Add After:=ActiveSheet
      .Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy ActiveSheet.Range("A1")
    Next i
    .Range("$A:$E").AutoFilter
  End With
End Sub

投稿日時 - 2019-04-25 12:19:20

お礼

返答が遅くなりましたが、ありがとうございます。

投稿日時 - 2019-04-29 00:07:20

ANo.2

1番簡単な方法ですかSheet2、A列をワークエリアに使います。
A2 =(Sheet1!A2="みかん")+A1
B2 =IFERROR(INDEX(Sheet1!B:B,MATCH(ROW(A1),$A:$A,0)),"")
D2までコピペして下にコピペ
A列はみかんに決まっているからいらないだろうと考え、ワークエリアにしました。

配列関数を使えば、ワークエリア無しでできますが、力不足でできませんでした。式が複雑になるうえ、コンピューターに負担がかかるのでやめた方がいいです。

VBA の方がよければ、補足又はお礼に書いていただければ作ってみます。

投稿日時 - 2019-04-25 10:13:15

お礼

返答が遅くなりましたが、ありがとうございます。
折角作成も言っていただきましたが、御迷惑をおかけしますので、何かの機会にまたお願いするかもしれません。ありがとうございました。

投稿日時 - 2019-04-29 00:08:49

ANo.1

質問文の書き方から、質問者は、エクセルやVBAやシステムの経験は少ないように思う。
例えば、質問を、一言で表現すると、「Sheet1にデータを入力し、その果物列の品名で、各品物名のデータを、果物別の別シートに振りわけしたい」と言えば、よいことなのに、説明がくどい?
ーー
(1)関数ではむつかしいと思う。式が複雑になる。
(2)質問通りに「構想」すると、VBAの「イベント」という考え方を取り入れることになるが、VBAやイベントやコントロール・フォームなどの経験が少ないと無理だと思う。もっと勉強してからの課題だと思う。
「イベント」を使うと、既存データの一部変更などの対処が必要で複雑化する。
(3)Sheet1への、その回(その1日分やその回のまとめたデータ原書)の入力が終わったら、そのきっかけで、「バッチ処理」(まとめてSheet1全体を振り分けしなおし)をするのが、わかりやすく、安定していると思うが、Sheet1への1行入力のつど、各シートへ振り分けをしないとダメなのかな。
 本来は、最低でも、Access程度のデータべース的なソフトで、それを扱える
程度の人がやること。まずエクセルを発想するレベルでは、力不足だと思う。
特に本件が、仕事関係の課題ならば、特にそうだと思う。本当はプロに相談することを勧める。
ーー
こういう、システムに絡んだ、「構想」は、後のこのデータの利用法や、その後にそれを利用する他人の使い勝手などとも関連するので、システムの良き構想が要る。経験が少ないものが、自己の思い付きでやっては、失敗すると思う。

投稿日時 - 2019-04-25 10:07:09

お礼

返事が遅くなりまして申し訳ございません。
まさにご指摘のとおりで、自分には困難な作業と感じております。周囲に相談できる人が全くいませんでしたのでご相談させていただきましたが、力不足を痛感するところでございます。

投稿日時 - 2019-04-29 00:11:28

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-