• ベストアンサー

excelで1つの表から2つの表の作り方

excelの表について教えてください。 sheet1に1つの表が下のようにあります。   A  B  C  D  E  F  G 1 1 あ 亀 白 32 目 木 2 2 い 鶴 赤 25 耳 海 3 2 う 猿 青 44 鼻 川 4 1 え 牛 緑 76 口 湖 5 1 お 犬 黄 14 手 沼 6 2 か 猫 紫 83 足 丘 ここから2つの表を別のsheetに作りたいのです。 sheet2には、   A  B  C  D  E  F  G 1 1 あ 亀 白 32 目 木 2 1 え 牛 緑 76 口 湖 3 1 お 犬 黄 14 手 沼 と、A列の「1」の行だけを、また sheet3には、   A  B  C  D  E  F  G 1 2 い 鶴 赤 25 耳 海 2 2 う 猿 青 44 鼻 川 3 2 か 猫 紫 83 足 丘 と、A列の「2」の行だけを、それぞれ作りたいのです。 しかも、sheet1のA列に、1か2を入力することで、 自動的に、sheet2に1を記入した行を、sheet3に2を記入した行を割り振るようにしたいのです。  よろしくお願いいたします。

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

  • ベストアンサー
回答No.3

配列数式は重くなるので作業列案です。 (1行目がタイトル行ならもう少し簡素化できるんですが) I1セル : =IF($A1=1,2,1) J1セル : =IF($A1=2,2,1) I2セル : =IF($A2=1,SUM(I1,1),I1) J2セル : =IF($A2=2,SUM(J1,1),J1) K1セル : =IF(I1=2,1,MATCH(ROW(),I:I)+1) L1セル : =IF(J1=2,1,MATCH(ROW(),J:J)+1) K2セル : =IF(LOOKUP(10^10,I:I)>ROW(),MATCH(ROW(),I:I)+1) L2セル : =IF(LOOKUP(10^10,J:J)>ROW(),MATCH(ROW(),J:J)+1) I2:L2セルを選んでフィルハンドルをダブルクリック Sheet2!A1セル : =IF(Sheet1!$K1,INDEX(Sheet1!A:A,Sheet1!$K1),"") 右へ下へオートフィル 同様にSheet3も =IF(Sheet1!$L1,INDEX(Sheet1!A:A,Sheet1!$L1),"")

inchaku
質問者

お礼

ありがとうございました。 項目の点で、うまくいきませんでしたが…。 もう資料を作成しなければいけないので…。

inchaku
質問者

補足

ありがとうございます。うまくいきました。 しかし、 それぞれのシートの1行目に、項目を入れると、うまくいきません。   項目…番号、ひらがな、動物、色、数字、体、自然 すみません。これを入れるのを忘れてしまいました。 sheet2、sheet3の1行目は上の項目、2行目からデータを割り振りたいのです。 自分でやってみたところ、2行目にも項目が割り振られ、データもうまくいきません。 すみません。教えてください。無礼を承知…。

その他の回答 (4)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

マクロで Sheet1のタブを右クリック-コードの表示 出てきた画面に下のマクロをコピペ 画面を閉じる 新しく入力された部分だけのマクロなので、それまでに入力されたデータは 自力で振り分けてください A列の1か2は最後に入力してください Private Sub Worksheet_Change(ByVal Target As Range) Dim a Dim wks As Worksheet If Target.Column <> 1 Then Exit Sub a = Range(Target, Cells(Target.Row, 7)) If Target.Value = 1 Then Set wks = Worksheets("sheet2") ElseIf Target.Value = 2 Then Set wks = Worksheets("sheet3") Else Exit Sub End If wks.Range("a65536").End(xlUp).Offset(1, 0).Resize(1, 7) = a End Sub

inchaku
質問者

お礼

ありがとうございます。 やっぱり後で変更して割り振るのは、難しいのですね。

  • CMLT
  • ベストアンサー率40% (143/357)
回答No.4

処理が重くなってしまうので作業列を一つ使用するパターンの一例を。 (作業列は白塗りにするなり非表示にするなりで) Sheet2のH列を使うとして、 H1 =1 H2 =MATCH(H1,Sheet1!A:A,0) H3 =IFERROR(MATCH(H$1,OFFSET(Sheet1!$A$1,H2,,100),0)+H2,"") 以下コピー。(100のところは、Sheet1のA列に入る1が100行以上間を空けないという仮定) A1 =IFERROR(INDEX(Sheet1!A:A,$H2),"") これを縦横にコピー(H列はダメョ) Sheet3以降はSheet2をコピーしてH1を2などに変更するだけ

inchaku
質問者

お礼

ありがとうございます。 やってみます。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.2

オートフィルタではいけませんか? A列を1又は2でフィルタ 抽出後、編集 → ジャンプ → セル選択 → 可視セルをポイント → コピー → Sheet2に貼り付け Excel(エクセル)基本講座:オートフィルタ(データ抽出) http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm 可視セル選択 http://hamachan.info/excel/kasiseru.html

inchaku
質問者

お礼

ありがとうございました。 オートフィルタでやってみたのですが、変更があった場合はのやり直しの点で、難しいかなぁと…。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 各シートのA1に設定、縦横にコピーしてく下さい。 尚、配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。 因みに処理は重たくなりますので、VBAが良いかも知れません。 Sheet2!A1に=IF(COUNTIF(Sheet1!$A:$A,1)>ROW(A1)-1,INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$1:$A$1000=1,ROW(Sheet1!$A$1:$A$1000),99999),ROW(A1))),"") Sheet3!A1に=IF(COUNTIF(Sheet1!$A:$A,2)>ROW(A1)-1,INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$1:$A$1000=2,ROW(Sheet1!$A$1:$A$1000),99999),ROW(A1))),"")

inchaku
質問者

お礼

ありがとうございました。 自分にとっては、この数式の意味が全く何のことかわかりませんが、やってみます。

関連するQ&A