• 締切済み

Excel 重複データ 横に並べたい

下記となる様なに関数またはVBAを教えてください。 ※下記スペースごとにセルが分かれてます。 SheetA A りんご 100 30 A りんご 100 40 A りんご100 50 B もも 100 20 B もも 100 30 ↓ ※下記スペースごとにセルを分けたいです。 sheetB Aりんご 100 30 りんご 100 40 りんご 100 50 B もも 100 20 もも 100 30

みんなの回答

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

データ例 Sheet1 配置が回答画面では乱れると思うが、手抜きですみません。 A りんご 100 30 りんご 100 40 りんご 100 50 りんご 100 60 B もも 100 20 もも 100 30 もも 100 70 ーーー 標準モジュールに Sub test01() cmax = Range("XfD1").Column 'データは100000行程度以内とする。 '--シートは元データはSheet1、結果はSheet3に作るとする Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") sh2.Cells.Clear 'Sheet3の出るデータをクリア k = 1 lr = sh1.Range("B100000").End(xlUp).Row 'Sheet1のB列最下行を取得 'MsgBox lr For i = 1 To lr If sh1.Cells(i, "B") <> "" Then x = sh1.Cells(i, "B") 'りんごのような商品名?を取得 k = k + 1 '---Sheet3に第1のデータをセット sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, "C") = sh1.Cells(i, "C") sh2.Cells(k, "D") = sh1.Cells(i, "D") '--- 'MsgBox x ' GoTo p1 '--りんごなど探索 '---検索範囲を定義 Set Rng = sh1.Range(sh1.Cells(2, "F"), sh1.Cells(100000, cmax)) '---探索 Set fnd = Rng.Find(x) 'MsgBox fnd If fnd Is Nothing Then GoTo p1 r = fnd.Row '見つかった行 ' MsgBox r c1 = fnd.Column '見つかった列 'GoTo p2 'ーーー最初に見つかった分をSheet3にセット C2 = sh2.Cells(k, 1000).End(xlToLeft).Column sh2.Cells(k, C2 + 1) = sh1.Cells(r, c1) sh2.Cells(k, C2 + 2) = sh1.Cells(r, c1 + 1) sh2.Cells(k, C2 + 3) = sh1.Cells(r, c1 + 2) fstrow = r '=======第2以降のりんごなど探索===== Do While Not fnd Is Nothing ' FindNextで検索を継続 Set fnd = Rng.FindNext(fnd) ' すべて検索し終えると最初に戻るので、Addressで確認! ' これを忘れると無限ループになるので注意! If fnd.Row = fstrow Then '最初発見セルに戻った Exit Do Else r = fnd.Row c1 = fnd.Column '--Sheet3に見つかったデータをセット。左寄せ的に3行分セット C2 = sh2.Cells(k, cmax).End(xlToLeft).Column sh2.Cells(k, C2 + 1) = sh1.Cells(r, c1) sh2.Cells(k, C2 + 2) = sh1.Cells(r, c1 + 1) sh2.Cells(k, C2 + 3) = sh1.Cells(r, c1 + 2) End If Loop 'ーーー p2: End If p1: Next i End Sub ーーー 実行結果 Sheet3に A りんご 100 30 りんご 100 40 りんご 100 50 りんご 100 60 B もも 100 20 もも 100 30 もも 100 70 === Find法ともいえるもので、人間がコンピュターを使わず、紙と鉛筆で作業する(1980年代以前を想像?)ときのステップをなぞって、VBAコード化した方法。 だからロジックは奇抜なアイデアはなく、素直なんだが、Find、FindNextの使い方が、慣れないとむつかしい。他には、.END(XXXX)を使っているぐらいで平凡で、面白味無し。 関数の回答が出ているので、その方法を勉強するほうが良いかな。 質問のデータ例のバラエティについて、十分ではないと思うので(数を増やすとともに、文章での注釈が必要と思う(ここの質問者では、それができない者が多い))、当方の勘違いがあるかもしれない。 また多数データでのテストが必要だか、時間的にもそれができない。 プロに頼む場合でも、いろいろな点を質問して確かめられるはずだ。そのそれをしないと、思わぬ予想外の結果になって、社内や世間を騒がせるものだ。 それが表現できないということは、コンピュータを仕事などには使うには、まだ早いということだろう。

maanaa17
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

敢えて、關數版です。(^_^)

maanaa17
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.2

敢えて、マクロに頼ら無い別觧です。マクロ化は御自分でだうぞ。(^_^) 添附圖參照(Excel 2019) 範圍 A1:J5 内でマウスをツン⇒Ctrl+Shift+:⇒Ctrl+G⇒[セル選択]⇒ “空白セル”に目玉入れ⇒[OK]⇒Ctrl+-⇒“上方向にシフト”に目玉入 れ⇒[OK] 範圍 A1:J5 内でマウスをツン⇒Ctrl+Shift+:⇒Ctrl+G⇒[セル選択]⇒ “空白セル”に目玉入れ⇒[OK]⇒Ctrl+-⇒“左方向にシフト”に目玉入 れ⇒[OK] A列全體を選擇⇒Alt+AM⇒“現在選択…並べ替える”に目玉入れ⇒ [重複の削除]⇒[OK]⇒[OK]

全文を見る
すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率48% (720/1491)
回答No.1

空白があって醜いですが、このようなデータ変換ですか。 Option Explicit ' Sub Macro1()   Dim I As Worksheet   Dim RInp As Long   Dim ROut As Long   Dim Colu As Integer   Dim NowKey As String   Dim Oldkey As String '   Set I = Sheets("SheetA")   Sheets("SheetB").Select   Application.ScreenUpdating = False '   For RInp = 1 To I.Cells(Rows.Count, "A").End(xlUp).Row     NowKey = I.Cells(RInp, "A") '     If NowKey <> Oldkey Then       Colu = 0       ROut = ROut + 1       Cells(ROut, "A") = NowKey     End If     [B1.D1].Offset(ROut - 1, Colu) = I.[B1:D1].Offset(RInp - 1).Value     Colu = Colu + 3     Oldkey = NowKey   Next RInp End Sub

maanaa17
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sheet1セルA1のデータ切り替えについて

    Excel2010に3つのシートsheetA、sheetB、sheetC があります。 それぞれセルA1のデータは,sheetAのA1=ブランク、sheetBのA1=b、sheetCのA1=c とします。 この状態で、 sheetBがActiveの時に、sheetAのA1=b sheetCがActiveの時に、sheetAのA1=c になるような関数、もしくはマクロを組み込みたいと思います。 どのようにしたら実現できますでしょうか? よろしくお願いします。

  • エクセルでデータの突き合わせ

    新しい職場で各々が管理しているデータを統一しようと思っています。 sheetA 住所・氏名・氏名カナ・生年月日・台帳番号・個人データ *住所は住居表示変更前のものあり *氏名カナは半角・全角・スペースの有無がいろいろ sheetB 住所・氏名・氏名カナ・生年月日・個人データ *住所・氏名は旧字のものあり *氏名カナは半角のみ sheetA・Bとも約3000件あります。 データの順序はそれぞれ違います。 sheetAにあり、sheetBにはない。またその逆でsheetBにはあるがsheetAにはない人もいます。 まず、sheetA・Bとも住所・氏名・生年月日が一致するデータを抽出したい そして、sheetAにありBにないデータの一覧、sheetBにありAにないデータの一覧を作りたいのですが、関数を使用して作成することはできますでしょうか。 関数にあまり詳しくないので、細かく教えていただくとありがたいです。

  • Excel 2つの重複データに重複先セル番地を表示させたい!

    お世話になります。 エクセルで2つの重複しているデータがランダムにがあります。 下記のように表示いたいのですが、良いほうを教えて下さい。 たとえばA1のみかんがA7と重複している時【7】と表示したい ※VBAはわかりません。関数は得意です。  よろしくお願いします。 A  B C 1  7 みかん 2  5 りんご 3    もも 4  6 なし 5  2  りんご 6  4  なし 7  1  みかん 8  9  ぶどう 9  8  ぶどう

  • エクセルで自動的に範囲選択させるには?

    職場のエクセルの表を壊してしまいました。チカラを貸してください。 SHEETaに表があります。 常に表の最終行にデータを入力しています。  A10     B10    C10    D10   E10 3月3日   りんご   8個   みかん  5個 この一部を同じブックのSHEETbの表の最終行に =IF(SHEETa!A10="","",SHEETa!A10)といったふうに返しています。  A15     B15    C15 3月3日   みかん   5個 ちなみにSHEETaとSHEETbのデータの並び順は違います。 行の番号も違います。 作業としては、SHEETaを入力したあと、SHEETbの最終行を1行だけ 印刷します。 SHEETaを入力すると自動的にSHEETbの最終行が選択されるようにするにはどうしたらいいのでしょうか?    

  • エクセルで選択した項目をマークする方法

    SheetBで選んだ項目を、SheetAの該当する項目の隣の列の四角を □から■になるように、数式を組みたいのです。 ・SheetA       A列  B列 1行目  □   りんご 2行目  □   みかん 3行目  □   ぶどう という表を作成しております。 SheetB       A列                                    B列 1行目  選択する果物を、B列のリストボックスより選んでください   {りんご,ぶどう、みかん} シートB列の (1,B)は、リストボックスで簡単に出来るのですが、 シートAの、(3、A)の、ぶどうを□から■にする方法がわからないのです。 当然、ぶどうの次に、りんごが選ばれれば、ぶどうは□、りんごを■にしたいのです。 解決方法をご存知の方がいらっしゃいましたら ご教授のほう宜しくお願いします。

  • エクセルマクロでデータの検索と転記方法

    エクセル2000です。 sheetAの 10行~165行に表Aがあります。 途中に、空白行や小計行もかなりあります。 C列のコード(文字列、数値両方あります)をキーにして、SheetBの4行目から91行目までの表B(A列にコードがあります)のB列の数値を、sheetAの10行~170行のD列に転記したいのです。sheetAの表の小計行のC列は空白です。SheetBの表Bのコードは、sheetAの表Aのコードの一部しかありません。ですから、sheetAの表AのコードがSheetBの表Bになかったらそこは何も転記しません。 わかりづらい説明かと思いますが、マクロの記述をお教えいただければ幸いです。

  • エクセルのデータ移動(マクロ使用)

    エクセルのSheetAを使用して入力画面を作成し、そのデータをSheetBやSheetCへリンクさせて印刷を行っています。1件ごとの入力になるので、データが残りません。このSheetAのデータを別のSheetDか別のファイルへ行ごとの横一直線という形式で残したいのですが、どうすればよろしいでしょうか? また、反対に移動したデータを戻す場合などどうしたらいいのでしょうか? マクロを利用すればいいように思うのですが、マクロは印刷程度の簡単なマクロの知識しかありません。 もしも、何か方法があるようでしたら、いろんな応用が利きそうなので、今後に向かって幅が広がりそうなので、是非詳しい方お願いします。 <例> 1つめのデータをSheetAへ入力 SheetA セルA1 h16.12.1                  B2 ○○商事                           C3 △△-□□          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□  (この間にSheetAのデータはすべて削除) 2つめのデータをSheetAへ入力 SheetA セルA1 h16.12.3                 B2 ●●販売                            C3 ▲▲-■■          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□       A2 h16.12.3 B2 ●●販売 C2 ▲▲-■■

  • excelのオートフィル

    すいません、いろいろと調べてみましたがわからなかったので質問させてください。 あるシート(sheetA)に集計データがあり、それを別シート(sheetB)に表示したいとき、 シート名を固定し、参照するセル番号を10刻みで増やしたい場合、オートフィルで可能でしょうか? 具体的には、sheetAのAE4~AE242およびにランダムな数値データがあった際に、 ・sheetBのB3~B26にsheetAのAE4,AE14,AE24・・・と十刻みでコピー ・sheetBのC3~C26にsheetAのAE5,AE15,AE25・・・と十刻みでコピー ・sheetBのD3~D26にsheetAのAE6,AE16,AE26・・・と十刻みでコピー ということをしたいと思っています。 拙い文章で恐縮ですが、どなたか教えていただけると幸いです。 よろしくお願いいたします。

  • エクセルで別の行に並んだ重複データをチェックしたい

    ネットで色々調べてはみたのですがやり方がいまいち見つからずどなたかお力添えいただけると幸いです 同じ行にならんでいるデータ内で重複するものを見つける関数はわかったのですが 別の行に並んでいるそれぞれのデータで重複するものを見つけるやり方はありますか? 例)      A    B 1  みかん  りんご 2  みかん  ぶどう 3  りんご   もも 上記の場合、A3のりんごとB1のりんごが重複していますがこれを探したいのです ※A1のみかんとA2のみかんは含みません 不慣れな質問で大変恐縮ですが何卒よろしくお願いいたします

  • VBAでおしえてください

    お世話になっております。 今、5個のエクセルファイルがあり、それぞれ複数のシートで構成されていますが、シート名、並び順は、5個のファイルとも共通です。 シート名は、sheet1から、A,B,C,D,・・・・と割り振っております。 ここで、同じシート名のdataを同じシート内に集めたいです。。 (元DATAの形式) ファイル1 SheetA SheetB セル DATA セル DATA B2 2 B2 8 B3 3 B3 5 B4 4 B4 6 ファイル2 SheetA SheetB セル DATA セル DATA B2 6 B2 2 B3 5 B3 3 B4 1 B4 4 VBA変換後 ファイル1 SheetA セル DATA セル DATA B2 2 C2 6 B3 3 C3 5 B4 4 C4 1 よろしくお願いいたします

専門家に質問してみよう