プロが教える店舗&オフィスのセキュリティ対策術

エクセル2007を使っています。
各支店の在庫状況を調べたところ、添付した画像のように
同じ商品が支店ごとの行になっています。
これでは使いにくいので、商品ごとの各支店の在庫を
まとめる方法があれば教えて下さい。

                  platte

「エクセルで複数行にあるデーターを1行にす」の質問画像

質問者からの補足コメント

  • tom04さん、30246kikuさん、さっそくのご回答ありがとうございます。
    質問の仕方が悪くてうまく伝わらなかったようです。
    あまり難しい事をせずに下のような一覧表になればいいなとおもっいてます。

    コード   名称    東京   大阪   広島   博多
    F2029   HB鉛筆   ◎    ◎    -    ◎
    M2022 ノート    ★    ◎ -    -
    F2222 サインペン  ◎    ◎    ◎    ◎
    A2249 消しゴム   ◎    -    ◎    -

    質問の仕方が悪くて申し訳ありません。
                            platte

      補足日時:2016/04/17 10:56

A 回答 (4件)

No.1です。



VBA向きの質問内容になりますね。
VBAの方法はすでに回答済みですので、あえて関数でやってみました。

↓の画像のように元データSheetに作業用の列を2列設けます。
作業列1のH3セルに
=IF(COUNTIF(B$3:B3,B3)=1,ROW(),"")
作業列2のI2セルに
=IF(COUNTA(D3:G3),B3&INDEX(D$2:G$2,SUMPRODUCT((D3:G3<>"")*COLUMN(A1:D1))),"")
という数式を入れ、H2・I2セルを範囲指定 → I2セルのフィルハンドルで下へずぃ~~~!っとコピーしておきます。

そしてSheet2のA2セルに
=IFERROR(INDEX(Sheet1!B:B,SMALL(Sheet1!$H:$H,ROW(A1))),"")
という数式を入れ隣のB2セルまでフィル&コピー!
C2セルに
=IFERROR(INDEX(Sheet1!$D:$G,MATCH($A2&C$1,Sheet1!$I:$I,0),MATCH(C$1,Sheet1!$D$2:$G$2,0)),"")
という数式を入れF2セルまでフィル&コピー!
A2~F2セルが選択されている状態でF2セルのフィルハンドルで下へコピー!

これで画像のような感じになります。m(_ _)m
「エクセルで複数行にあるデーターを1行にす」の回答画像4
    • good
    • 1

#2です



実行もしていないのですね

Samp1 は、新規シートに出力していましたが、
その場で上書きするようにしてみました


Public Sub Samp2()
  Dim vA As Variant
  Dim i As Long, j As Long, k As Long

  With Range("B2").CurrentRegion
    vA = .Value
    k = 1
    For i = 2 To UBound(vA)
      If (vA(i, 1) <> vA(k, 1)) Then
        k = k + 1
        If (k <> i) Then
          vA(k, 1) = vA(i, 1)
          vA(k, 2) = vA(i, 2)
          For j = 3 To UBound(vA, 2)
            vA(k, j) = ""
          Next
        End If
      End If
      For j = 3 To UBound(vA, 2)
        If (vA(i, j) <> "") Then vA(k, j) = vA(i, j)
      Next
    Next

    Application.ScreenUpdating = False
    .Borders.LineStyle = xlNone
    .ClearContents
    With .Resize(k, UBound(vA, 2))
      .Value = vA
      .Borders.LineStyle = xlContinuous
    End With
    Application.ScreenUpdating = True
  End With
End Sub
    • good
    • 0

以下でどうなりますか



Public Sub Samp1()
  Dim vA As Variant
  Dim i As Long, j As Long, k As Long

  vA = Range("B2").CurrentRegion.Value
  k = 1
  For i = 2 To UBound(vA)
    If (vA(i, 1) <> vA(k, 1)) Then
      k = k + 1
      If (k <> i) Then
        vA(k, 1) = vA(i, 1)
        vA(k, 2) = vA(i, 2)
        For j = 3 To UBound(vA, 2)
          vA(k, j) = ""
        Next
      End If
    End If
    For j = 3 To UBound(vA, 2)
      If (vA(i, j) <> "") Then vA(k, j) = vA(i, j)
    Next
  Next

  Application.ScreenUpdating = False
  With Worksheets.Add
    With .Range("B2").Resize(k, UBound(vA, 2))
      .Value = vA
      .Columns(3).Resize(, .Columns.Count - 2) _
        .HorizontalAlignment = xlCenter
      .Rows(1).HorizontalAlignment = xlCenter
      .Borders.LineStyle = xlContinuous
    End With
  End With
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

こんにちは!



「◎」の行だけ表示すればよいのですね?
一例です。
↓の画像のように元データはSheet1にあり、Sheet2のA1セルに「支店名」を入力すると
表示されるようにします。

画像ではSheet2のA4セルに
=IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(OFFSET(Sheet1!$C$1:$C$1000,,MATCH($A$1,Sheet1!$D$2:$G$2,0))="◎",ROW(A$1:A$1000)),ROW(A1))),"")
配列数式になりますので、Ctrl+Shift+Enterで確定!

A4セルのフィルハンドルで右へ・下へコピーすると
画像のような感じになります。m(_ _)m
「エクセルで複数行にあるデーターを1行にす」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!