[[20180317123821]] 『2つのデータの並べ替え』(船男) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2つのデータの並べ替え』(船男)

初心者です。よろしくお願いします。
文面等失礼がありましたらご容赦ください。
一応、やりたいことを書いてみますのでご教授お願いいたします。

2つのデータがあります。
1つのシートにまとめて差異を求めたいと思っています。

データ1

A    B   C     D   E   F
朝   魚  デパート  22  3200   20
朝   魚  小学校A    2   500   20
朝   魚  市役所    4  5400   20
朝   肉  病院    14  6000   20
朝   肉  高校    10  5000   20
朝   米  お店A    22  2300   20
朝   米  工場     9  5000   20
朝   米  お店B    7  9000   20
朝   米  小学校B   45  5000   20
昼   魚  デパート  22  3200   20
昼   魚  小学校C    2   500   20
昼   肉  市役所    4  5400   20
昼   肉  病院    14  6000   20
昼   肉  高校    10  5000   20
昼   米  お店A    22  2300   20
昼   米  本屋     9  5000   20
昼   米  お店B    7  9000   20
昼   米  小学校D   45  5000   20

このようなシートがもう一枚有、
A、B、C、と同じ行の数値を並べたい。
A、B、Cの組み合わせはいろいろで、D、E、Fは数値。

A、B、Cの組み合わせがデータ1にはあるが、データ2には無いものもあり、
逆もあります。

このようにデータ整理したいのですが、可能でしょうか?

Windows 7 エクセル2010です。

なにとぞよろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


>、B、C、と同じ行の数値を並べたい。

>A、B、Cの組み合わせがデータ1にはあるが、データ2には無いものもあり、
>逆もあります。

ないものは、空欄でよいのですか。
SUMIFS関数でできませんか。

(マナ) 2018/03/17(土) 13:19


マナ様

さっそくありがとうございます.

ないものは空欄で結構です。

よろしくお願いします。
(船男) 2018/03/17(土) 14:04


わかりにくかったようで、すみません。
追記いたします。

シートのデータを並べるとこんな感じでしょうか。
  

  シート1のデータ                    シート2のデータ
A    B   C     D   E   F     G   H   I     J   K   L
朝   魚  デパート  22  3200   20   朝   魚  デパート  10  2500  5
朝   魚  小学校A    2   500   20   ・   ・   ・    ・   ・  ・
朝   魚  市役所    4  5400   20   ・   ・   ・    ・   ・  ・   
朝   肉  病院    14  6000   20   ・   ・   ・    ・   ・  ・
朝   肉  高校    10  5000   20   ・   ・   ・    ・   ・  ・
朝   米  お店A    22  2300   20
朝   米  工場     9  5000   20
朝   米  お店B     7  9000   20
朝   米  小学校B   45  5000   20
昼   魚  デパート  22  3200   20
昼   魚  小学校C    2   500   20
昼   肉  市役所    4  5400   20
昼   肉  病院    14  6000   20
昼   肉  高校    10  5000   20
昼   米  お店A    22  2300   20
昼   米  本屋     9  5000   20
昼   米  お店B    7  9000   20
昼   米  小学校D   45  5000   20

と並べたいのは DとJ、EとK、FとLの差異を求めたいからです。

わかりにくいかもしれませんがよろしくお願いします。

(船男) 2018/03/17(土) 14:20


間違えました

ないものは、0(ゼロ)でよいのですか。
SUMIFS関数でできませんか。

(マナ) 2018/03/17(土) 14:26


マナ様

返信いただきまして恐縮です。

ないものは0(ゼロ)でよいです。

SUMIFS関数で具体的なご教示いただけるとありがたいです。

以上、よろしくお願いします。
(船男) 2018/03/17(土) 14:29


いえ、できるかどうかは、ご自分で試してみてください。
https://www.becoolusers.com/excel/sumifs.html

(マナ) 2018/03/17(土) 14:39


マナ様

有難うございます。

合計ではなく、1月のシートと2月のシートなどの数値を並べて差異を出したかったのでできませんでした。

無理なようなので諦めます。

またよろしくお願いしまs。
(船男) 2018/03/17(土) 14:49


 >無理なようなので諦めます。 

 無理かどうか分からないです。

 多分、何らかの方法で出来ると思っていますけど、
 結果図(希望図)を提示して頂かないことには、
 こちらでそれを推測しなきゃなりません。

 それって、結構面倒なんで、推測しないで作れる人(船男さん)に
 お願いしたいんですけども。

(半平太) 2018/03/17(土) 16:46


半平太さま

有難うございます。

シート1は1月のデータとします。

シート2は2月のデータとします。

Aには朝・昼・夜などの3種類のデータ、BはAに対して数種類のデータが発生します。
CにはさらにBに対して数種類のデータが発生します。

D・E・Fには数量・売上・件数が出てきます。
シート2も同じ並びです。

1枚のシートにする場合は、シート2を以下のようにシート1の隣にコピペしたとしても、
販売のないデータが表示されないので、同じ列に同じ条件の結果が並びません。

  シート1のデータ                    シート2のデータ
A    B   C     D   E     F     G   H   I      J   K   L
朝   魚  デパート  22  3200   20   朝   魚  デパート  10  2500  5
朝   魚  小学校A    2   500   20   朝   魚 市役所    2   1000  1
朝   魚  市役所    4  5400   20    ・   ・   ・   ・   ・
朝   肉  病院    14  6000   20    ・   ・   ・       ・   ・   ・
朝   肉  高校    10  5000   20    ・   ・   ・       ・   ・    ・
朝   米  お店A    22  2300   20
朝   米  工場     9  5000   20
朝   米  お店B     7  9000   20
朝   米  小学校B   45  5000   20
昼   魚  デパート  22  3200   20
昼   魚  小学校C    2   500   20
昼   肉  市役所    4  5400   20
昼   肉  病院    14  6000   20
昼   肉  高校    10  5000   20
昼   米  お店A    22  2300   20
昼   米  本屋     9  5000   20
昼   米  お店B    7  9000   20
昼   米  小学校D   45  5000   20

これをどうにか、同じ列に並び替えてDとJ(数量)、EとK(売上)、FとL(件数)の差異を、M・N・Oに際を表示したいのですが、お分かりいただけましたでしょうか。
          ↓

  シート1のデータ                    シート2のデータ
A    B   C     D   E     F     G   H   I      J   K   L
朝   魚  デパート  22  3200   20   朝   魚  デパート  10  2500  5
朝   魚  小学校A    2   500   20    ・   ・      ・    ・    ・  ・
朝   魚  市役所    4  5400   20   朝   魚 市役所    2   1000  1
朝   肉  病院    14  6000   20    ・   ・      ・    ・    ・  ・
このように並び替えて、差異をとれればと思っております。
出来れば1枚のシートで表示できればいいのですが。

伝わりましたでしょうか。

よろしくお願いいたします。

(船男) 2018/03/17(土) 18:24


使いです。

A・B・CまたはG・H・Iの項目はシート2にはあるけどもシート1に無いものもあり、その逆もあります。

ややこしくて済みません。

以上、よろしくお願いします。
(船男) 2018/03/17(土) 18:35


			1月			2月			3月
		D	E	F	D	E	F	D	E
魚	デパート								
魚	小学校C								
肉	高校								
肉	市役所								
肉	病院								

まとめシートは、このような感じにすれば良いのでは?
なんとなくだけど出てくる組み合わせは同じようなものが出てきているようなので
全ての組み合わせで作成しておいてVLOOKUPか何かで各月のデータを持って来れば
いいのかなって思ったけど違うかな??

(通りすがり) 2018/03/17(土) 18:48


通りすがり様

有難うございます。

今のところAは6種、Bは68種、Cは400種あり、その3組の組み合わせが無数に考えられます。
できれば出力したデータを並び替える事で済ませればと思っております。

よろしくお願いします。
(船男) 2018/03/17(土) 18:57


 こう云うのは数式より、マクロでの処理が適しています(・・と思う)。

 Compシート上で照合させる案 (注:Compシートが無い場合は自動追加されます)

 <Sheet1 サンプル>
  行  _A_  _B_  ____C____  _D_  __E__  _F_
   1  朝   魚   デパート    22  3200    20
   2  朝   魚   小学校A      2   500    20
   3  朝   魚   市役所       4  5400    20
   4  朝   肉   病院        14  6000    20
   5  昼   米   お店A       22  2300    20
   6  昼   米   本屋         9  5000    20
   7  昼   米   お店B        7  9000    20
   8  昼   米   小学校D     45  5000    20

 <Sheet2 サンプル>
  行  _A_  _B_  ____C____  _D_  __E__  _F_
   1  朝   魚   デパート    10  2500     5
   2  朝   魚   市役所       2  1000     1
   3  夕   米   小学校B     45  5000    20

 <Comp 結果図>
  行 _A_ _B_ ____C____ _D_ __E__ _F_ _G_ _H_ ____I____ _J_ __K__ _L_
   1 朝  魚  デパート   22 3200   20 朝  魚  デパート   10 2500    5
   2 朝  魚  小学校A     2  500   20                                
   3 朝  魚  市役所      4 5400   20 朝  魚  市役所      2 1000    1
   4 朝  肉  病院       14 6000   20                                
   5 昼  米  お店A      22 2300   20                                
   6 昼  米  本屋        9 5000   20                                
   7 昼  米  お店B       7 9000   20                                
   8 昼  米  小学校D    45 5000   20                                
   9                                 夕  米  小学校B    45 5000   20

 標準モジュールに貼り付けるマクロ

 Sub CompWsh1nWsh2()
     Dim Dict As Object
     Dim KY As String

     Dim Wsh1 As Worksheet
     Dim Wsh2 As Worksheet
     Dim WshC As Worksheet

     Dim DataIn1, DataIn2
     Dim RW As Long
     Dim aRowData

     Set Dict = CreateObject("Scripting.Dictionary")
     Set Wsh1 = Worksheets("Sheet1")
     Set Wsh2 = Worksheets("Sheet2")

     On Error Resume Next
        Set WshC = Worksheets("Comp")
     On Error GoTo 0

        If WshC Is Nothing Then
             Set WshC = Worksheets.Add(, Sheets(Sheets.Count))
             WshC.Name = "Comp"
        End If

     'データを配列に格納
     DataIn1 = Intersect(Wsh1.Columns("A:F"), Wsh1.Range("A1").CurrentRegion)
     DataIn2 = Intersect(Wsh2.Columns("A:F"), Wsh2.Range("A1").CurrentRegion)

     For RW = 1 To UBound(DataIn1)
         If Not IsEmpty(DataIn1(RW, 1)) Then
             KY = DataIn1(RW, 1) & "-" & DataIn1(RW, 2) & "-" & DataIn1(RW, 3)

             aRowData = Dict(KY)
             If Not IsArray(aRowData) Then
                 ReDim aRowData(1 To 12)
                 aRowData(1) = DataIn1(RW, 1)
                 aRowData(2) = DataIn1(RW, 2)
                 aRowData(3) = DataIn1(RW, 3)
             End If

             aRowData(4) = aRowData(4) + DataIn1(RW, 4)
             aRowData(5) = aRowData(5) + DataIn1(RW, 5)
             aRowData(6) = aRowData(6) + DataIn1(RW, 6)

             Dict(KY) = aRowData
         End If
     Next RW

     For RW = 1 To UBound(DataIn2)
         If Not IsEmpty(DataIn2(RW, 1)) Then
             KY = DataIn2(RW, 1) & "-" & DataIn2(RW, 2) & "-" & DataIn2(RW, 3)

             aRowData = Dict(KY)
             If Not IsArray(aRowData) Then
                 ReDim aRowData(1 To 12)
                 aRowData(7) = DataIn2(RW, 1)
                 aRowData(8) = DataIn2(RW, 2)
                 aRowData(9) = DataIn2(RW, 3)
             Else
                 aRowData(7) = aRowData(1)
                 aRowData(8) = aRowData(2)
                 aRowData(9) = aRowData(3)
             End If

             aRowData(10) = aRowData(10) + DataIn2(RW, 4)
             aRowData(11) = aRowData(11) + DataIn2(RW, 5)
             aRowData(12) = aRowData(12) + DataIn2(RW, 6)

             Dict(KY) = aRowData
         End If
     Next RW

     Rem 打ち出し
     With Worksheets("Comp")
         .UsedRange.ClearContents
         .Range("A1").Resize(Dict.Count, 12).NumberFormatLocal = "G/標準;@"
         .Range("A1").Resize(Dict.Count, 12) = Application.Index(Dict.items, 0, 0)
     End With
 End Sub

(半平太) 2018/03/17(土) 20:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.