• 締切済み

エクセルで、2枚のシートを統合するやり方

文字で説明するとわかりにくいので、図を見て頂けると助かります。 エクセルでそれぞれ別々の担当者が、同じフォーマットで書き込みしています。 図の項目”え”に対して2人の担当が内容を書いている場合、1枚のシートに統合し、 2行に分けることは可能ですか? 手作業がほとんどなく、本人が、入力したものが統合用シートにいくようにしたいです。 関数でIFを使ってやってみましたが、それだと2行にわけるのは不可能ですよね。 初心者にちょっと毛が生えた程度ですが、教えて下さい。 できれば、関数やマクロで1回設定したらOKみたいな感じで出来るとうれしいです。

みんなの回答

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.5

鈴木さんが記入するシートを、book1.xls の シート「Sheet1」、 田中さんが記入するシートを、book2.xls の シート「Sheet1」、 統合用のシートを、book3.xls の シート「Sheet1」、とし、 さらに、どのシートも、列Aのすべてのセルが空欄で、行4のすべてのセルが空欄とします。 Sub test() Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim Sh3 As Worksheet Set Sh1 = Workbooks("book1.xls").Sheets("Sheet1") Set Sh2 = Workbooks("book2.xls").Sheets("Sheet1") Set Sh3 = Workbooks("book3.xls").Sheets("Sheet1") Sh1.Range("B5").CurrentRegion.Copy Sh3.Range("B5") With Sh2.Range("B5").CurrentRegion .Resize(.Rows.Count - 1).Offset(1).Copy Sh3.Cells(Sh3.Rows.Count, "B").End(xlUp).Offset(1) End With With Sh3 Dim r As Long For r = .Cells(.Rows.Count, "B").End(xlUp).Row To 6 Step -1 If .Cells(r, "C").Value = "" Then .Rows(r).Delete Next r .Range("B5").CurrentRegion.Sort Key1:=.Range("B6"), Order1:=xlAscending, Header:=xlYes For r = .Cells(.Rows.Count, "B").End(xlUp).Row To 6 Step -1 If .Cells(r, "B").Value = .Cells(r - 1, "B").Value Then .Cells(r, "B").ClearContents Next r End With End Sub

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

2枚のシートはそれぞれが別のブックにあるとしても、それをコピーして一つのブックのシート1及びシート2にあるとします。 それぞれのシートでA1セルには項目、B1セルには担当、C1セルには内容の文字があり、項目のA列では項目の順番や行数を同じになっているとします。そこでシート1のD列は作業列としてD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",COUNTA(A$2:A2)*10000+IF(B2<>"",1,0)) シート2ではD2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",COUNTA(A$2:A2)*10000+IF(B2<>"",100,0)) シート2のE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)<=COUNT(Sheet1!D:D),SMALL(Sheet1!$D:$D,ROW(A1)),IF(ROW(A1)<=COUNT(Sheet1!D:D)+COUNT(D:D),SMALL(D:D,ROW(A1)-COUNT(Sheet1!D:D)),"")) そこでまとめの表をシート3に作るとしてA1セルからC1セルには同じ項目名を入力します。 その後にA2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet2!$E:$E),"",IF(MOD(SMALL(Sheet2!$E:$E,ROW(A1)),10)=1,INDEX(Sheet1!$A:$C,MATCH(SMALL(Sheet2!$E:$E,ROW(A1)),Sheet1!$D:$D,0),COLUMN(A1)),IF(MOD(SMALL(Sheet2!$E:$E,ROW(A1)),1000)=100,INDEX(Sheet2!$A:$C,MATCH(SMALL(Sheet2!$E:$E,ROW(A1)),Sheet2!$D:$D,0),COLUMN(A1)),"")))

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

鈴木さんが書き込むシートと、田中さんが書き込むシートと、統合用シートは、同じブック(ファイル)の別々のシートですか? それとも、それぞれのシートは別々のブック(ファイル)のシートですが? 表の位置(レイアウト)はどうなっていますか? 表の左上の「項目」のセルのアドレスは何ですか? 3つのシートで、「項目」のセルの位置は同じですか? 2行に分けた場合、2行目の項目を空欄にする必要はありますか? 質問の例の場合、「え」の2行目の項目にも「え」と表示しても大丈夫ですか?

tomotomov
質問者

補足

>鈴木さんが書き込むシートと、田中さんが書き込むシートと、統合用シートは、同じブック(ファイル)の別々のシートですか?  全て違うブックの別々のシート(ファイル)です。 >表の位置(レイアウト)はどうなっていますか? 表の左上の「項目」のセルのアドレスは何ですか?  B5のセルです。 >3つのシートで、「項目」のセルの位置は同じですか?  同じ位置です。 >2行に分けた場合、2行目の項目を空欄にする必要はありますか? 質問の例の場合、「え」の2行目の項目にも「え」と表示しても大丈夫ですか?  できれば、表示したくないのですが、出来なければ表示してもかまいません。 よろしくお願いいたします。

  • pai3_14
  • ベストアンサー率56% (319/566)
回答No.2

例えば Sheet1の C4 セルと Sheet2 の C4 セルの 内容を Sheet3 の C4 セルに 文字列として 2行に まとめる場合ですが =CONCATENATE(Sheet1!C4,CHAR(10), Sheet2!C4) とし、 Sheet3の 該当セルの書式設定で 「折り返して全体を表示する」にチェックを入れればいいのでは? CHAR(10)は 改行文字です。

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

エクセルはシートやブックを分けると、統合したいニーズが出てくる。 しかし関数では、表の組換えは大変複雑な式になって、手に負えない。 こういうニーズにはVBAで処理する必要がある。 本件はファイル・マッチングという手法でやれば出来るという見通し。 または本来は、ACESS以上のデータベースソフトで処理するものです。 しかし質問者はVBAの経験も無いし、ファイルをマージするアルゴリズムも聞きはじめであろう。 また丸投げの質問なのでコードは書かない。 だから手動でコピペして並べ替えることを考えるしかない。 実際はプログラムなど組んだり、こんなところへ質問するより、10シートぐらい以下なら断然速い。 例データ Sheet1 A-C列 A列は列挿入して担当者コードを入れる(複写で可) B列はシャインコードや商品コードや店舗コードなどのコードや、氏名・商品名などの名前など、この資料のデータの情報帰属主体 1 11 a 1 12 b 1 13 c 1 15 d Sheet2 A-C列 A列は列挿入して担当者コードを入れる(複写で可) 2 11 x 2 11 y 2 12 z 2 13 u 2 14 v 2 14 s Sheet3で Sheet1を「コピペ Sheet2を下にコピペ A-C列 1 11 a 1 12 b 1 13 c 1 15 d 2 11 x 2 11 y 2 12 z 2 13 u 2 14 v 2 14 s B列でソートして 1 11 a 2 11 x 2 11 y 1 12 b 2 12 z 1 13 c 2 13 u 2 14 v 2 14 s 1 15 d VBAでもこれと同じことをプログラムでやる必要性がある場合も多い。

関連するQ&A