• ベストアンサー

エクセル 複数行にまたがっているデーターを一つの行にまとめたい

      A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

VBAの一例です。 新たなシートを追加してそこにご希望の状態を表示させます。 ご提示のデータはA1から連続してあるものとします。 Sub test01() Dim x As Long, i As Long, myStr As String Dim vAK, vBK, vCI Dim myDic As Object, ns As Worksheet With Range("A1").CurrentRegion.Columns 'A1の連続範囲 x = .Rows.Count '行数取得 vAK = .Item(1).Value '1列目データ vBK = .Item(2).Value '2列目データ vCI = .Item(3).Value '3列目データ End With Set myDic = CreateObject("Scripting.Dictionary") For i = 1 To x '1行目から最終行まで myStr = vAK(i, 1) & "^" & vBK(i, 1) '1列目データ+2列目データ If Not myDic.Exists(myStr) Then 'myDicになければ myDic.Add Key:=myStr, Item:=vCI(i, 1) '追加 Else 'あれば、3列目データを追加 myDic(myStr) = myDic(myStr) + vCI(i, 1) End If Next i Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加 With ns '転記して分離 .Cells(1, 1).Resize(myDic.Count).Value = Application.Transpose(myDic.Keys) ' .Cells(1, 3).Resize(myDic.Count).Value = Application.Transpose(myDic.Items) ' .Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Other:=True, OtherChar _ :="^", FieldInfo:=Array(Array(1, 1), Array(2, 1)) End With End Sub

masa1717
質問者

お礼

多くのデーターの処理にたいしても、時間が殆どかからず出来ました。助かりました。有難うございます。

その他の回答 (3)

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

VBAでないと難しいと思いますので一例です。(E・F・G列に展開します) (1)対象のシートタブ上で右クリック→コード表示 (2)以下のコードを貼り付け Sub データ統合() Dim a, e As Range For Each a In Range("A:A") If a.Value = "" Then Exit Sub For Each e In Range("E:E") If e.Value = "" Then Range("E1").Offset(e.Row - 1) = a Range("F1").Offset(e.Row - 1) = Range("B1").Offset(a.Row - 1) Range("G1").Offset(e.Row - 1) = Range("C1").Offset(a.Row - 1) Exit For Else If e = a And Range("F1").Offset(e.Row - 1) = Range("B1").Offset(a.Row - 1) Then x = InStr(1, Range("G1").Offset(e.Row - 1), Range("C1").Offset(a.Row - 1), vbTextCompare) If x > 0 Then Exit For Range("G1").Offset(e.Row - 1) = Range("G1").Offset(e.Row - 1) & Range("C1").Offset(a.Row - 1) Exit For End If End If Next Next End Sub (3)VBEを終了(Alt+F4キー押下)

回答No.2

まず一旦、B列のグループごとに集計し直して そこから作業を始めてはいかがですか? フィルタで「北海道」を抽出して「シート北海道」にまとめて移すとか。 あとは 「北海道でりんごが2件も3件もあったらどうするのか」等々 場合により処理の仕方が変わると思うのですが。。。 まぁ どちらにせよ一旦「作業用シート」で作業を行って元のシートに戻せば関数もVBAも必要ないですね。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

とりあえず、VBAでの一例です。 Sub test() Dim rmax As Long, rw As Long, r As Long Dim v1 As String, v2 As String, st As String rmax = Cells(Rows.Count, 1).End(xlUp).Row For rw = 1 To rmax - 1  st = Cells(rw, 3).Text  v1 = Cells(rw, 1).Value  If v1 <> "" And v1 <> Chr(27) Then   v2 = Cells(rw, 2).Value   For r = rw + 1 To rmax    If Cells(r, 1).Value = v1 And Cells(r, 2).Value = v2 Then     st = st & Cells(r, 3).Text     Cells(r, 1).Value = Chr(27)    End If   Next r   Cells(rw, 3).Value = st  End If Next rw For r = rmax To 1 Step -1  If Cells(r, 1).Value = Chr(27) Then Cells(r, 1).Resize(1, 3).Delete (xlShiftUp) Next r End Sub

関連するQ&A

  • エクセル 複数行にまたがっているデーターを一つの行

    以前に似たようなVBAの質問を元にさらにやりたいVBAがあるのですが、 (前の質問者のURL:http://okwave.jp/qa/q4955096.html)       A列  B列   C列   D列   E列 ~ R列 1行目  佐藤 北海道 りんご S 100 105 2行目  佐藤 北海道 ばなな M 100 105   3行目 伊藤  東京  いちご S 100 105 4行目  伊藤  東京  ばなな M 100 105 上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列      C列 1行目  佐藤 北海道  りんご,ばなな  S,M 2行目  伊藤  東京   いちご,ばなな  S,M A列とB列とE列~R列のデーターが同じでC列,D列,のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • エクセル関数 データの抽出について

    エクセル2010 重複データの抽出。 重複データの抽出方法をご教示ください。 抽出先はシート1のA列A3~抽出データの分だけ リストはシート2のB2:AB32まで フィルターオプションなども使ってみたのですが どうも上手くいきません。 どなたか知恵をお貸しください。 方法はできれば関数だといいのですが(データが増えてもいいように) できなければ他の方法でもいいです。 VBAなどは全くの初心者なので出来れば避けたいのですが… シート2     A    B   C    D~AB32 1  "" 2 いちご ばなな いちご りんご 3 みかん いちご ばなな いちご 4 りんご ばなな いちご みかん 5 みかん いちご ばなな りんご 6 ばなな ばなな りんご いちご : : 32 シート1(重複データなし)  A 1  "" 2  "" 3 いちご 4 みかん 5 りんご 6 ばなな 7 : : 抽出リストのデータはシート2のB2:AB32にぎっしり入っています。 宜しくお願い致します。

  • EXCELのマクロで条件2つでの合計

    現在シート1に以下のようにあります。 sheet1   A    B    C   D   E 1 品名  日付  担当 個数 チェック 2 いちご 1/10  伊藤 10   ○ 3 りんご 1/15  山田  2   ○ 4 ばなな 1/10  伊藤  5   × 5 いちご 1/20  伊藤  10  △ 6 いちご 1/7   山田  5   ○ 7 ばなな 1/8   江口  5   △ 8 りんご  1/4  江口  4   ○ 9 りんご  1/18 伊藤  5   ○ 10 ばなな  1/8  伊藤  6   × 11 いちご  1/20 江口  4   ○ これを以下のようにシート2にしたいです。 sheet2   A    B    C   D   E 1 品名  日付  担当 個数 チェック 2 いちご 1/10  伊藤  20  ○ 3 りんご 1/15  山田  2   ○ 4 ばなな 1/10  伊藤  11  × 6 いちご 1/7   山田  5   ○ 7 ばなな 1/8   江口  5   △ 8 りんご  1/4  江口  4   ○ 9 りんご  1/18 伊藤  5   ○ 11 いちご  1/20 江口  4   ○ 条件は、「品名」と「担当」が同じならば個数を合計してシート2にコ記すということです。 また、「日付」と「チェック」は照合した一番上の行の「日付」と「チェック」になります。 例えば、2行目と5行目は「いちご」と「伊藤」で同じなので合計を10+10で20にします。 「日付」と「チェック」は2行目の方が上なので「1/10」と「○」になります。 以上をマクロでやりたいです。 マクロの勉強中なので色々なやり方を知りたいです。 よろしくお願いします。

  • 同じ行の中で重複するデータを削除してつめる方法

       A    B    C     D      E    F 1|りんご|いちご|りんご|ぶどう|ばなな|りんご 2|すもも|ばなな| 3|りんご|りんご|びわ | 4|かき |りんご|ばなな| データが上記のように記入されている場合、 下記のように、同じ行の中で重複するデータを削除してつめる方法をご伝授ください。     A    B    C     D      E    F 1|りんご|いちご|ぶどう|ばなな|  2|すもも|ばなな| 3|りんご|びわ | 4|かき |りんご|ばなな| よろしくお願いします。

  • エクセル 最大値データのある行のみを残したい。

    表題の質問をさせていただきます。よろしくお願いいたします。 A列には商品名 B列には販売数があるとします。 商品には一回しか出てこない物や何度も出てくるものがあります。 そこで、販売数が最大値のみの重複しない商品データにする方法をお聞きしたいのです。 できれば非表示的な処理ではなく不要行削除が望ましいです。 例 下の場合 りんご 3(重複商品の最大値) みかん 5(単独商品) りんご 1 バナナ 6(単独商品) りんご 2 イチゴ 2(重複商品の最大値) イチゴ 1 ↓にしたいのです。 りんご 3 みかん 5 バナナ 6 イチゴ 2 よろしくお願いいたします。

  • excelでシートから別シートに抽出する方法

    データシートに A   B    C 佐藤 りんご  25個 木村 オレンジ 3個 伊藤 メロン  12個 伊藤 スイカ  2個 佐藤 イチゴ  40個 佐藤 マンゴー 8個 というデータがあったとします。 それを別のシートに A   B    C 佐藤 りんご  25個    イチゴ  40個    マンゴー 8個 また別のシートに A   B    C 伊藤 メロン  12個    スイカ  2個 といったようにAに佐藤とか伊藤とか入力するだけでB、Cが自動で抽出できるようにできますか? 出来れば関数の入力でやりたいのですがわかる人がいましたらご教授ください。

  • エクセルで2列に入力された同一データを全て抽出したい

    下の表でA列とB列に入力された「バナナ」を全て、すなわち1,2,3,5行目を抽出をしたいのです。 データ量が1000行を越すため、効率よく抽出する 方法を教えてください。     A    B 1 バナナ  みかん 2 りんご  バナナ 3 バナナ  バナナ 4 いちご  みかん 5 バナナ  いちご

  • ★エクセル関数に詳しい方、よろしくお願いします

    ★エクセル関数に詳しい方、よろしくお願いします はじめまして質問を利用させていただきます。 エクセル関数に詳しい方、どうか教えてください。 いつもこの質問コーナーをヒントに↓の関数を作成して、シート1の★c列に 値を抽出することができました。 <シート1>の★c列に関数を入れて、a列、b列の一致したデータを<シート2>から抽出 =INDEX(シート1!c$2:c$10,MATCH(2,MMULT((シート2$a2:F$a10=a2:b2)*1,{1;1}),))    <シート1>           <シート2 データ> a列  b列   ★c列      a列  b列    c列 101  キウイ  北海道    101  キウイ  北海道 201  キウイ  沖縄県    101  ばなな  北海道 101  ばなな  北海道    101  オレンジ 北海道 201  ばなな  沖縄県    101  いちご   北海道 101  オレンジ 北海道    101  メロン   北海道 201  オレンジ 沖縄県    201  キウイ   沖縄県 101  いちご  北海道     201  ばなな  沖縄県 201  いちご   沖縄県    201  オレンジ 沖縄県 101  メロン   北海道     201  いちご  沖縄県 201  メロン   沖縄県     201  メロン   沖縄県 **********************************************  この下からが質問内容になりますm(_ _)m ********************************************** しかし、表が少し複雑になってしまい、 上で作成した関数が使えなくなってしましました。 ●<シート2>のb列の文字が複雑になってしまった場合、 <シート1>の★c列に、うまくデータを抽出することはできますでしょうか? <シート1>          <シート2 データ> a列  b列   ★c列    a列   b列     c列 101  キウイ  #N/A    101  甘いキウイ 北海道 201  キウイ  #N/A    101  甘いばなな 北海道 101  ばなな  #N/A    101  オレンジ   北海道 201  ばなな  #N/A    101  いちご小   北海道 101  オレンジ #N/A    101  メロン小   北海道 201  オレンジ #N/A    201  黄色キウイ 沖縄県 101  いちご   #N/A    201  ばなな小  沖縄県 201  いちご   #N/A    201  オレンジ大 沖縄県 101  メロン   #N/A    201  いちご大  沖縄県 201  メロン   #N/A    201  メロン大   沖縄県 もし、ご存知の方がいらっしゃいましたら、どうかご教示願います。 どうかよろしくお願いいたします。

  • Excelについて

    Excelに下記のようなデータが入っているのですが A列   |   B列 りんご |     2 みかん | 3 ばなな | 1 りんご | 6 すいか | 7 かき | 3 みかん | 4 すいか | 8 りんご | 1 *(実際には100件ぐらいのデータが入っています。) A列で同じ「りんご」があれば、同じ行にあるB列の値を合計したいのでがどうすればよいですか? また「りんご」だけでなく他にもあればその値を合計して出したいのですが。 例えば、今回の例では「りんご」が三箇所あるので「2+6+1]で9と表示したいのですが。 イメージとしては、 A列  |   B列 |   C列   |  D列 りんご |    2  |    りんご |  9 みかん |    3  |    みかん | 7 ばなな | 1  |    ばなな | 1 りんご | 6  |    すいか | 15 すいか | 7  |    かき | 3 かき | 3 | みかん | 4 | すいか | 8 | りんご | 1 | というようにしたいです。どなたか教えてください。

  • お願いします!エクセルで問題発生!

    excelで困っています。 A      B        りんご   私は りんご すきです  ばなな   私は ばなな  すきです みかん  私は みかん すきです 私は<A行> 好きです というように、BにA行の文字列を入れるにはどうすればよいでしょうか? よろしくおねがいします・・・

専門家に質問してみよう