エクセルVBAで結合したセルの並び替え方法と重複行の削除方法

このQ&Aのポイント
  • エクセルVBAでSheet2以降の項目を総括に転記した後、結合したセルの並び替え方法を教えてください。
  • また、並び替えが完了した後で、重複する行を削除する方法も教えていただけますか?
  • 初歩的な質問かもしれませんが、よろしくお願いいたします。
回答を見る
  • ベストアンサー

結合したセルの並び替え(エクセルVBA)

いつもお世話になっております。 エクセルVBAについてお尋ねします。 仕事でエクセルによって、各担当者ごとの業務報告書を作成しております。 仕様を簡単に説明させていただくと。 Sheet2以降に各担当者ごとの業務報告書があり、その集計をSheet1の総括にて行っております。 各担当者のシート様式は、日付ごとにAAA項目、BBB項目、CCC項目等の項目があり、それぞれに対して担当者が記載していくようになっております(添付ファイル参照) 総括のシートも様式は担当者の様式と同じです。 VBAによって、Sheet2以降の項目を総括に転記するところまでは出来たのですが(ちょうど添付ファイルのように日付がランダムに並んでいる状態です) この後の、並び替え作業の方法が分かりません。セルの結合を行っている箇所もあるのでSortも出来そうに無いですし・・・。 現在は、添付ファイルのようにA列に日付順の順位を表記した状態で止まっております。 並び替えの方法をご指導願います。 また、並び替えが完了した後で、重複する行(添付ファイルの4月2日の箇所)を削除する方法があれば、一緒にご指導をお願いいたします。 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

折角マクロを使ってるのですから、丁寧にマクロを動かしていけば簡単にやってくれます。 sub macro1()  dim lastRow as long  dim r as long ’並べ替え準備  lastrow = range("C65536").end(xlup).row  range("B:B").unmerge  range("B2:B" & lastrow).specialcells(xlcelltypeblanks).formular1c1 = "=R[-1]C" ’並べ替え  range("B2:D" & lastrow).sort key1:=range("B2"), order1:=xlascending, header:=xlno ’復元  application.displayalerts = false  for r = lastrow - 2 to 2 step -3   cells(r, "B").resize(3, 1).merge  ’if application.countif(range("B2:B" & r), cells(r, "B").value ) > 1 then cells(r, "B").resize(3, 1).entirerow.delete shift:=xlshiftup  next r  application.displayalerts = true end sub >重複する行(添付ファイルの4月2日の箇所)を削除する方法 (上述でとりあえず止めてあるようにして)「(2つ目以降の)4月2日の3行を無造作に削除」してしまっていいのか、C列やD列の記載内容を含めて「重複」を判断する必要があるのか、具体的な状況を添えて「別途のご相談として」投稿し直して下さい。

genta1019boston
質問者

お礼

ありがとうございます。

関連するQ&A

  • EXCEL VBA 並び替えについて

    こんばんは。 EXCEL VBAでデータの並び替えを作りましたが、実行すると実行時エラー(1004)となってしまいます。原因を探りましたが分からないため、問題点のご指導をお願いします。 ・1行目はタイトル行で、2行目以降にデータが入っております(現在は200行までデータが入っています)。。 ・A1~T1にタイトルのそれぞれの項目が入っています。 ・D1セルに「商品名のカナ」が入っており、カナで並び替え(昇順)をしたいと思っています。 'データの最終行をEndrowに格納する EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row Worksheets("基礎データ").Select Worksheets("基礎データ").Range(Cells(1, 1), Cells(EndRow, 20)).Select Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal プロシージャの一部を抜粋しました。 Selection.Sort Key1~以降の記述は、「マクロの記録」で記録したものを貼り付けました。 よろしくお願いします。

  • エクセルVBAで作成できますか(2)

    質問No.9506691に関連して添付ファイルのようなVBAを作成したい。 1:日付と時刻が同じセルで10分毎に合計を出すことはできますか。  それとも日付と時刻は別々のセルにして算出する方がいいのでしょうか。 2:抽出する項目は先に作成しておいた方がいいのでしょうか。  VBAで表示させることはできますか。 どなたかアドバイスお願いします。

  • Excel VBAについて

    VBA初心者です。 社内の様式に合うようなVBAを組みたいのですが。。。 1,様式は表になっており1つのグループに5つの選択肢があり横に5グループ,縦に12グループあります。(例えば1行目にA1.A2.A3.A4.A5|B1.B2.B3.・・・・E3.E4.E5 2行目にF1.F2.F3.F4.F5|G1.G2・・・・12行目にBM1.BM2のような表) 2,シートは2枚あり1枚目のシートで選んだ1グループ1項目に1つだけ○がつく(ダブルクリックで選択し,違う項目を選択すれば前に選んだ項目の○は消える。) 3,1枚目に丸がついた項目が2枚目の任意のセルに表示される(例えば1枚目のシートのAグループのA3を選択すれば2枚目のシートの任意のセルにA3と表示され,取り消し変更された場合は変更後の選択肢のみ表示される) 4,また,選択する項目は変更されないように保護をかけたい。

  • EXCELのVBAでのsortについて

    EXCELでVBAを使ってsortしているのですが 1行目が項目行にもかかわらずデータとみなされて 並び変えられてしまいます Header:=xlGuess としているのですが・・・ 条件指定していて 同じデータで並び順を変えてsortかけると そちらはきちんと項目行が判断されて 正しく並び変ります とても困っています どうかご指導下さい

  • Excelで値貼り出力をするVBAは作れますか?

    Excelで値貼り出力をするVBAは作れますか? Excel2003を業務で使用しています。 SUMPRODUCTなどのいろんな関数を使って売上げ報告書を集計し、 取引先に送っているのですが、計算式や参照式でファイルが重くなっているので、 値貼りをしたファイルを作成したいのです。 そこで、VBAを使って以下のどちらかを実現することは可能でしょうか。 ・報告書の全シートの全書式(罫線・色)と値を別ファイルに出力 ・書式のみ、全て空欄の別ファイルに全シートを値貼り これが出来るととても助かるので、ご教示ください。宜しくお願いいたします。

  • 離れたセル同士で並び替えが出来るようにしたい。

    複数のセルを結合させています。1つの項目が「L6」~「Q6」まで。2つ目の項目が「R6」~「S6」で結合されています。データは「L7」「R6」から下に数行あり(変動します) 「L6」の文字列をキーとして「R6」も一緒に昇順で表示させたい。 下記のVBAを作成したのですが、離れたセル同士では並び替え(ソート)が出来ないようです。お知恵をいただければ幸いです。宜しくお願い致します。 '◆「検索シート」のセルL7から指定範囲を解除する場合 Sub test1() Worksheets("検索シート").Range("L7").CurrentRegion.UnMerge Dim r As Range Dim ret Set r = Range("L6") ret = r.Sort( _ Key1:=Range("R7"), _ Order1:=xlAscending, _ Header:=xlYes) '◆「検索シート」のセルL7から指定範囲を結合する場合 Worksheets("検索シート").Range("L6").CurrentRegion.Merge End Sub

  • シート保護してても並び替えをしたい。

    添付画像を載せましたが、残高には関数があり、その列だけはシート保護をかけてあります。 保護のかけ方は、A~Dの1行目も含め最下行までです。 あとのA~D列は入力できるのですが、「このシートのすべてのユーザーに許可する操作」 で、「並び替え」にチェックしてあるのですが、A1の“年月日”にセルを置いて<昇順で並び替え>をやるのですが、保護がかかっているため並び替えできません。 VBAではなく一般操作の範囲でなんとか並び替えができるようにならないでしょうか。

  • エクセルVBA セルの抽出とコントロール

    エクセルVBAについての質問です。 結論から言いますと、添付ファイルのエクセルシートで以下の処理をしたいです。 1.「有無」の列の内容を判断し、「有」となっているもののみ、 E列に表示。 2.このままだと、抽出結果の行が飛び飛びになってしまう。 たとえば、「福利厚生費」の下は「荷造運賃発送費」となるが、間に3行 空いてしまう。これをしっかりくっつける形で処理されるようにしたい。 ※データ並び替えの機能を使えばできるように思うが、そうすると50音順等になってしまうのでできない。 3.販売管理費抽出のコントロールボタンを押せば、上記の処理がなされるようにしたい。 以上です。VBAの教科書をあさってみましたが、どうも応用の仕方が分かりませんでした。 お忙しいところまことに恐れ入りますが、ご検討の程お願いします。

  • VBA エクセルでセル値を結合セルにコピー

    VBAにて購入品注文書の印刷を一括で出来ないかの相談です。 シートが2枚あります。 1枚は(1)購入品注文書でFAXする為の用紙です。(手配する商品の欄のみ10箇所ほどあります。) もう1枚の方に(2)表があり、購入品先・件名・注番・手配する商品が行単位に複数行並んでいます。 1行目から検索して購入品先・件名が同じで手配する商品が複数ある場合は購入品注文書の 手配する商品の2段目以降に転記していきます。 購入品注文書の転記するセルが結合セルになっています。 (2)表に30行程度入力したあとで(購入品先・件名別単位で10枚印刷)、マクロ釦1個で完了 させたいのですが可能でしょうか。 尚、出来ればシートは現在のシートを転記・印刷・クリアー⇒転記・印刷・クリアー⇒という 形にしたいです。 そもそも可能かどうかでも回答を頂きたいので宜しくお願いします。

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

専門家に質問してみよう