• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル重複行統合マクロの意味)

エクセル重複行統合マクロの意味

このQ&Aのポイント
  • エクセル重複行統合マクロの意味について詳しく教えてください。
  • Tom04さんの回答で素晴らしいマクロが紹介されていますが、マクロの詳細が分かりません。
  • マクロの内容を少し編集して自分の書類に使いたいです。マクロの内容を教えてください。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 前回は寝ぼけていましたので、ごめんなさい。 もう一度最初からコードを考えてみました。 >私の表では >重複を処理したい項目列がD3以降のD列にあります。 >統合処理をしたいのはI3からO3以降の列にあります。 すなわち↓の画像のように 項目行が2行目でデータは3行目以降にあるとし、 D列データで重複がある場合に1行にまとめる! まとめる範囲はI~O列までという解釈です。 マクロ実行後には左側の表が右側のようになります。 尚、D列が同じ場合はI~O列で重複してデータはない!という前提です。 Sub Sample2() Dim i As Long, j As Long, c As Range Application.ScreenUpdating = False For i = Cells(Rows.Count, "D").End(xlUp).Row To 3 Step -1 If WorksheetFunction.CountIf(Range("D:D"), Cells(i, "D")) > 1 Then Set c = Range("D:D").Find(what:=Cells(i, "D"), LookIn:=xlValues, lookat:=xlWhole) For j = 9 To 15 If Cells(i, j) <> "" Then Cells(i, j).Cut Cells(c.Row, j) End If Next j If WorksheetFunction.CountA(Range(Cells(i, "I"), Cells(i, "O"))) = 0 Then Range(Cells(i, "D"), Cells(i, "O")).Delete shift:=xlUp End If End If Next i Application.ScreenUpdating = True End Sub 今度はどうでしょうか?m(_ _)m

kudasai
質問者

お礼

感激です^^!お陰様でようやくできました。 Dの項目列の重複文字が消えなく、どうしてかと考えていましたが、 どうやら、関数がi~Oに入力されているためのようでした。 一度関数をクリアして数値のみにするために、シートの使っていないところに値のコピーをして表に戻してからのマクロ実行にしようかと思います。 ありがとうございました。 もっと勉強しないとと感じました。 関数のクリアは他に良い方法ありますでしょうか?

kudasai
質問者

補足

捕捉になってしまいましたが、 関数クリアはselection.value=selection.value のようなマクロで簡単に削除できそうですね。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 >私の表では >重複を処理したい項目列がD3以降のD列にあります。 >統合処理をしたいのはI3からO3以降の列にあります。 前回のコードは無駄なループをしているようですので、 少し変えてみました。 Sub test2() Dim i As Long, j As Long, k As Long, L As Long Application.ScreenUpdating = False 'I列~O列まで For j = 9 To 15 '変数jの列の最終行~5行目まで For k = Cells(Rows.Count, j).End(xlUp).Row To 5 Step -1 '項目列に重複があれば If Cells(k, j) <> "" Then If WorksheetFunction.CountIf(Range(Cells(4, "D"), Cells(k, "D")), Cells(k, "D")) > 1 Then 'D列に初出現行(L)を決定 L = WorksheetFunction.Match(Cells(k, "D"), Range("D:D"), False) '対象セルをその列のL行目にカット&ペースト Cells(k, j).Cut Cells(L, j) End If End If 'kとjをループ Next k Next j 'D列の最終行~2行目まで For i = Cells(Rows.Count, "D").End(xlUp).Row To 4 Step -1 'i行のI列~O列にデータがない場合 If WorksheetFunction.CountA(Range(Cells(i, "I"), Cells(i, "O"))) = 0 Then 'その行を削除 Rows(i).Delete End If '次(上)の行へ Next i Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

kudasai
質問者

お礼

ありがとうございます。 実行してみたところ、L列の1箇所の統合に成功しましたが、 他の重複項目行の数字の移動と 重複項目行の削除が行われませんでした。 原因が分かりませんが修復可能でしょうか? 教えてください。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! かなり以前に当方が投稿したコードだと思いますが、 大きな間違いをしています。 変数の宣言部分で >Dim i, j, k, L As Long は i,j,k については何も宣言していませんので、長整数型ではなくValiant型になりますので、 宣言を >Dim i as long,j as long,k as long,L as long に訂正してください。 さしあたり気づいた点だけまずは投稿します。 自分で書いたコードだと思うのですが、今コードを見ても何をやりたいのか判りません。 質問内容にそってコードを記載しているはずですので、 もう少しコードを再確認して投稿したいと思います。 まずは間違いの訂正まで・・・m(_ _)m

kudasai
質問者

補足

早速のご返信ありがとうございました。 過去の内容は http://okwave.jp/qa/q7581112.html にありました。 私の表では 重複を処理したい項目列がD3以降のD列にあります。 統合処理をしたいのはI3からO3以降の列にあります。 どうぞよろしくお願いします。

関連するQ&A