Tom04さんの回答で
以下のとても素晴らしいマクロがあり、
使用させていただきたいのですが、
詳細がわかりません。
少々編集して自分の書類に反映させていただきたく、
マクロの内容を教えていただけませんか?
Sub test() 'この行から
Dim i, j, k, L As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column + 1
For k = Cells(Rows.Count, j).End(xlUp).Row To 2 Step -1
If Cells(k, j) <> "" And WorksheetFunction.CountIf _
(Range(Cells(2, 1), Cells(k, 1)), Cells(k, 1)) > 1 Then
L = WorksheetFunction.Match(Cells(k, 1), Columns(1), False)
Cells(k, j).Cut Destination:=Cells(L, j)
End If
Next k
Next j
Next i
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If WorksheetFunction.CountA(Rows(i)) = 1 Then
Rows(i).ClearContents
End If
Next i
Application.ScreenUpdating = True
End Sub 'この行まで
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
この回答への補足
捕捉になってしまいましたが、
関数クリアはselection.value=selection.value
のようなマクロで簡単に削除できそうですね。
感激です^^!お陰様でようやくできました。
Dの項目列の重複文字が消えなく、どうしてかと考えていましたが、
どうやら、関数がi~Oに入力されているためのようでした。
一度関数をクリアして数値のみにするために、シートの使っていないところに値のコピーをして表に戻してからのマクロ実行にしようかと思います。
ありがとうございました。
もっと勉強しないとと感じました。
関数のクリアは他に良い方法ありますでしょうか?
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
ありがとうございます。
実行してみたところ、L列の1箇所の統合に成功しましたが、
他の重複項目行の数字の移動と
重複項目行の削除が行われませんでした。
原因が分かりませんが修復可能でしょうか?
教えてください。
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
この回答への補足
早速のご返信ありがとうございました。
過去の内容は
http://okwave.jp/qa/q7581112.html
にありました。
私の表では
重複を処理したい項目列がD3以降のD列にあります。
統合処理をしたいのはI3からO3以降の列にあります。
どうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
「段」と「行」の違いがよくわ...
-
VBA 指定した列にある日時デー...
-
Excel文字列一括変換
-
Excelの行数、列数を増やしたい...
-
CSVファイルの「0落ち」にVBA
-
エクセルのソートで、数字より...
-
リストからデータを紐付けしたい
-
Excel/VBA ステップインと通常...
-
横軸を日付・時間とするグラフ化
-
エクセルで最初の行や列を開け...
-
VBAで結合セルを転記する法を教...
-
VBA Splitで「引数の数が一致...
-
エクセルマクロの組み方
-
エクセル 重複したデータを別...
-
Alt+Shift+↑を一括で行うには、...
-
VBAで別ブックの列を検索し、該...
-
ListViewで列を指定して表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
VBA
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
エクセルで複数列の検索をマク...
-
CSVファイルの「0落ち」にVBA
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
えABのある列って
-
VBAで別ブックの列を検索し、該...
-
Excel文字列一括変換
-
エクセルで住所を県と市・郡と...
-
リストからデータを紐付けしたい
-
Alt+Shift+↑を一括で行うには、...
-
エクセル マクロ 範囲指定で...
-
エクセルで最初の行や列を開け...
-
エクセル 重複 隣の列 一番...
おすすめ情報