[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付きでのSheet振り分け』(シン)
初めて書き込みします。
下記のデータをこれから入力するにあたりいくつか質問があり、ご教授いただけますと幸いです。
なお、PCはほぼ初心者のため至らぬ点が多々ありますが、何卒ご容赦ください。
A B C D E F・・・・
1 検査結果 身長 体重 筋力 下肢長 部活の有無
2 陽性 100 45 20 45 あり
3 陰性 120 40 30 50 あり
4 陽性 130 50 10 50 なし
5 陽性 140 60 20 35 なし
6 陰性 125 30 30 40 あり
・
・
・
【質問1】
元データ(Sheet1)に入力していった際に、
同時に、検査結果毎に別シート(Sheet2陽性群、Sheet3陰性群)に振り分けを行うことは可能でしょうか。
行は随時追加されます。
列は必要に応じて削除・追加・修正(切り取り、貼り付け)が考えられます。
<Sheet2>
A B C D E F
1 検査結果 身長 体重 筋力 下肢長 部活の有無
2 陽性 100 45 20 45 あり
3 陽性 130 50 10 50 なし
4 陽性 145 60 20 35 なし
<Sheet3>
A B C D E F
1 検査結果 身長 体重 筋力 下肢長 部活の有無
2 陰性 120 40 30 50 あり
3 陰性 125 30 30 40 あり
【質問2】
また、Sheet4に身長・体重・下肢長、Sheet5に筋力と部活の有無の項目に絞って、
同一シート内に検査結果の陽性群、陰性群に分けて記載することは可能でしょうか。
こちらも、生データ(Sheet1)を入力した際に同時に振り分けられるようにできたらと思っております。
また、行・列ともに項目が追加・修正が考えられます。
<Sheet4>
A B C D F G H I J
1 検査結果 身長 体重 下肢長 検査結果 身長 体重 下肢長
2 陽性 100 45 45 陰性 120 40 50
3 陽性 130 50 50 陰性 125 30 40
4 陽性 145 60 35
<Sheet5>
A B C D F G H
I
1 検査結果 筋力 部活の有無 検査結果 筋力 部活の有無
2 陽性 20 あり 陰性 30 あり
3 陽性 10 なし 陰性 30 あり
4 陽性 20 なし
入力後にこれらを振り分ける方法はサイト等でいくつか試しております。
今回のように、生データ入力後に同時に複数Sheetに自動で入力可能かどうかもわからない状態です。
ご教授のほど何卒よろしくお願い致します。
長文になりましたが、最後まで目を通していただき有り難う御座います。
< 使用 Excel:Excel2016、使用 OS:Windows8 >
まず質問1について。 Sheet2のA2セルに =IFERROR(INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$2:$A$1000="陽性",ROW(A$2:A$1000),""),ROW(A1))),"") Sheet3のA2セルには上記式の"陽性"部分を"陰性"で入力してShiftキーとCtrlキーを押しながらEnterキーで式を確定 (確定後、式が{}で囲まれればOK)その後、右及び下へフィルコピーではどうか? (ねむねむ) 2019/01/07(月) 13:16
なお上記式はSheet1のデータが1000行まで対応。 もっと行数がある場合は式中の2か所の$1000を大きくしてくれ。 (ねむねむ) 2019/01/07(月) 13:18
すまない。 式を =IFERROR(INDEX(Sheet1!A:A,SMALL(IF(INDIRECT("Sheet1!$A$2:$A$1000")="陽性",ROW(A$2:A$1000),""),ROW(A1))),"") としてくれ。 前の式だとSheet1のデータの削除に対応できていなかった。 (ねむねむ) 2019/01/07(月) 13:25
質問2。 質問1の式のSheet1!A:Aの部分がSheet1で抜き出してきたい値の列となっているので Sheet4およびSheet5の2行目部分にSheet1!A:Aを抜き出したい列に変更して入力し、 下へフィルコピーしてみてくれ。 (Shift+Ctrl+Enterを忘れずに) (ねむねむ) 2019/01/07(月) 13:36
Sheet2!A2: =IFERROR(INDEX(Sheet1!A$2:A$9,SMALL(IF(Sheet1!$A$2:$A$10="陽性",ROW($A$1:$A$9),""),ROW(A1))),"")
Sheet3!:A2 =IFERROR(INDEX(Sheet1!A$2:A$9,SMALL(IF(Sheet1!$A$2:$A$10="陰性",ROW($A$1:$A$9),""),ROW(A1))),"")
両式とも「Ctrl + Shift + Enter」キーで式を入力します。(配列数式)
Sheet4!A2: =IFERROR(INDEX(Sheet2!$A$2:$F$10,ROW(A1),MATCH(A$1,Sheet2!$A$1:$F$1,0)),"")
Sheet4!G2: =IFERROR(INDEX(Sheet3!$A$2:$F$10,ROW(A1),MATCH(A$1,Sheet2!$A$1:$F$1,0)),"")
Sheet5!A2: =IFERROR(INDEX(Sheet2!$A$2:$F$10,ROW(A1),MATCH(A$1,Sheet2!$A$1:$F$1,0)),"")
Sheet5!F2: =IFERROR(INDEX(Sheet3!$A$2:$F$10,ROW(A1),MATCH(A$1,Sheet2!$A$1:$F$1,0)),"")
それぞれの式を、右と下にコピーします。
(メジロ) 2019/01/07(月) 13:54
'Sheet1のシートモジュール(Sheet1見出しタブ右クリック - コードの表示 これを一式貼り付ける) Dim c As Range, r1 As Range, r2 As Range Application.EnableEvents = False Set r1 = Range("A1:F1") Set r2 = Range("A1:F1") For Each c In Range("A2:A" & Rows.Count).SpecialCells(2) If c.Value = "陽性" Then Set r1 = Union(r1, c.Resize(, 6)) If c.Value = "陰性" Then Set r2 = Union(r2, c.Resize(, 6)) Next c Sheets("Sheet2").Cells.ClearContents Sheets("Sheet3").Cells.ClearContents Sheets("Sheet4").Cells.ClearContents Sheets("Sheet5").Cells.ClearContents r1.Copy Sheets("Sheet2").Range("A1") r2.Copy Sheets("Sheet3").Range("A1") r1.Copy Sheets("Sheet4").Range("A1") r2.Copy Sheets("Sheet4").Range("A" & Rows.Count).End(xlUp).Offset(1) Sheets("Sheet4").Cells.Copy Sheets("Sheet5").Range("A1") Sheets("Sheet4").Columns("D:D").Delete Shift:=xlToLeft Sheets("Sheet4").Columns("E:E").Delete Shift:=xlToLeft Sheets("Sheet5").Columns("B:C").Delete Shift:=xlToLeft Sheets("Sheet5").Columns("C:C").Delete Shift:=xlToLeft Application.EnableEvents = True End Sub (mm) 2019/01/07(月) 14:10
>入力後にこれらを振り分ける方法はサイト等でいくつか試しております。
とのことですが、その中にオートフィルタを使った方法は入ってるんでしょうか?
すでにオートフィルタは試してみたんだけど、時間がかかるから却下だったということであれば、マクロ作っちゃうとかですかね。
ただ、お持ちのスキルがわからないので、かえってマクロ作るための時間がかかってしまったら本末転倒ですけど・・・
以下、ろくにテストはしてないですけど一例で。
Sub さんぷる() Dim MySh As Worksheet
'Sheet2〜5をクリア For Each MySh In Worksheets(Array("Sheet2", "Sheet3", "Sheet4", "Sheet5")) MySh.UsedRange.ClearContents Next MySh
With Worksheets("Sheet1") 'オートフィルタ強制解除 .AutoFilterMode = False
' 'A1セルが含まれる表範囲にオートフィルタを設定してA列を陽性で抽出 .Range("A1").AutoFilter Field:=1, Criteria1:="陽性"
'陽性で抽出されたものをコピペ処理 .AutoFilter.Range.Copy Worksheets("Sheet2").Range("A1")
Intersect(.AutoFilter.Range, Union(.Range("A:C"), .Range("E:E"))).Copy _ Worksheets("Sheet4").Range("A1")
Intersect(.AutoFilter.Range, .Range("A1,D1,F1").EntireColumn).Copy _ Worksheets("Sheet5").Range("A1")
' 'A列を陰性で抽出しなおし .Range("A1").AutoFilter Field:=1, Criteria1:="陰性"
'陰性で抽出されたものをコピペ処理 .AutoFilter.Range.Copy Worksheets("Sheet3").Range("A1")
Intersect(.AutoFilter.Range, Union(.Range("A:C"), .Range("E:E"))).Copy _ Worksheets("Sheet4").Range("G1")
Intersect(.AutoFilter.Range, .Range("A1,D1,F1").EntireColumn).Copy _ Worksheets("Sheet5").Range("F1")
' 'オートフィルタの抽出状態を解除 .ShowAllData
End With
End Sub
(もこな2) 2019/01/08(火) 00:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.