• ベストアンサー

【excel】複数ある同じ値を、自動でひとつにまとめたい

Microsoft Office Excel 2007を使用しております。 添付図のように、縦に並んでいる同じ値の数値を、できるかぎり自動でひとつにまとめたいのですが可能でしょうか? ・Aは「1」から「91」まであります。縦にソートしてあります。 ・Bに入る数は「1」~「4」までですが、図にある通りそれぞれの数は一定ではありません。「1」が3つあったり「2」が4つだったり。 ※それぞれ、縦に範囲選択してセルの結合を選んで…という作業を繰り返すにはあまりに量が多くて大変なため質問させていただきました。 この作業が少しでも簡略化されればよいのですので、 すべての作業を一発でおこないたい! というわけではありません。 ちょっとでも楽&時間短縮になる方法がありましたら、 なにとぞよろしくお願いいたします。

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

  • ベストアンサー
  • Yosha
  • ベストアンサー率59% (172/287)
回答No.3

この際マクロに挑戦してみては如何ですか? 「開発」タブを開き、「Visual Basic」 をクリックします。 「Microsoft Bisual Basic - Book1」 という表題で 「Visual Basic Editor」 が開きます。  「挿入」 をクリックし出てきた、ドロップダウンリスト内の 「標準モジュール(M)」 をクリックすると、文字が書けるところが現れます。 ここに以下の文 (コードと言います) をコピー&ペスト (コピペ) してください。 Sub test()  Dim r As Long, ro As Long, re As Long, rSt As Long  Dim c As Integer, co As Integer, ce As Integer  Dim n As Integer, no As Integer, n1 As Integer  ro = Selection.Row  co = Selection.Column  re = Cells(ro, co).End(xlDown).Row  ce = Cells(ro, co).End(xlToRight).Column  For c = co To ce   For r = ro To re    rSt = r    no = Cells(rSt, c).Value    Do     n = Cells(r, c).Value     If no <> n Or n = 0 Then      With Range(Cells(rSt, c), Cells(r - 1, c))       .Select       n1 = Cells(rSt, c).Value       .ClearContents       .Merge       .Value = n1       r = r - 1       Exit Do      End With      rSt = r     End If     r = r + 1    Loop   Next  Next End Sub コピペが済みましたら、テストをするために、不要なシートに処理したいデータをコピーして、データの左上のセルを選択してください。 次に、先程コードをコピペした、すぐ上のマークが並んでいる中央付近の右向き三角のボタンをクリックしてください。 ほぼ一瞬のうちに、全ての作業が完了するはずです。 マクロの威力です。 質問の趣意から、背景色、罫線、各列のデータの開始位置と終了位置などは同じであり、予め処理済みであるものとしています。 いろいろなケースでテストをしてOKであることを確認した後に実際に使用しましょう。 不明な場合、こちらでコメントするか、VBA の分かる方に質問してください。 分かり易いコードで書きましたので少し勉強すると分かるようになると思います。 VBA を使い始めるとエクセルが面白く、楽しくなってきますよ。 頑張ってください。

kwisyk1040
質問者

お礼

御礼が遅くなりまして、申し訳ありませんでした。 とにかくビックリしました! まさか、一発でできる方法があった……というか マクロを組んでくださるなんて本当になんとお礼を言ったらいいやら。 No.1さんの回答でも十分ありがたく満足しておりましたが、 マクロの威力に恐れ入りました。 ところで、マクロに挑戦……ううっ。 そうですよね、甘えちゃいけませんね(汗)  たしかにこういうことができるようになってこそ、「excelを使っている!!」と言えますね。 しかもわかりやすいコードで書いていただいているとのこと。感涙です。 ともかく本当に助かりました。ありがとうございました!

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

見た目だけ何とかする方法。 条件付書式で条件1として、一つ上のセルと値が同じなら  ・フォント色:白  ・罫線:左右 条件2として、一つ上のセルと値が異なる場合  ・罫線:上左右 このままですと、一番下の罫線が表示されませんので、表の下の空白セルを書式で罫線:上と、設定します。 これでどうでしょう。 条件付書式は表の1セルにだけ設定し、コピーし、[形式を選択して貼り付け]-[書式]で他のセルに反映できます。

kwisyk1040
質問者

お礼

お返事が遅くなって申し訳ありませんでした! せっかくご回答いただいたのですが、 「見た目」ではなくデータとしてひとつにまとめたかったんです。 説明不足で申し訳ありませんでした。 しかし、罫線などの書式設定まで頭が回っていませんでした。 いただいたアイデアを活用させていただきます。 ありがとうございました。

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

セルの結合は関数ではできませんので関数を使った第2の方法を提案します。 例えばD列とE列に表示させるとしてD1セルには次の式を入力します。 =IF(A1="","",IF(SUMPRODUCT(($A$1:A1=A1)*1)=1,A1,"")) E1セルには次の式を入力します。 =IF(A1="","",IF(SUMPRODUCT((A$1:A1=A1)*(B$1:B1=B1)*1)=1,B1,"")) 最後にD1セルとE1セルを選択して式を下方にオートフィルドラッグします。

kwisyk1040
質問者

お礼

まずはお返事が遅くなりましたこと、お詫び申し上げます。 試してみたところ、理想どおり、うまくいきました。 とても助かりました!! ありがとうございました。

関連するQ&A

専門家に質問してみよう