セル同士の並び替えを実現する方法を教えてください

このQ&Aのポイント
  • 質問者は、離れたセル同士で並び替えができるようにしたいと考えています。
  • 質問者は、複数のセルを結合させており、1つの項目が「L6」~「Q6」まで、2つ目の項目が「R6」~「S6」で結合されています。
  • 質問者が作成した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

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

どこか別のセルに隣り合わせでコピーして習い変えて元のセルにコピーし直すか、VBAのSortを使わずに VBAで必要となる基本的なアルゴリズムについて(ソートアルゴリズム、Excel列番号の取得など) https://qiita.com/t-yama-3/items/edea854e58dd0f1ebe79 のソートアルゴリズムを使って自前で並び直すかで試してみてください。

その他の回答 (1)

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.1

データがどうなっているのか判りません、せめて画像位付けて下さい。 L6~Q R9~S が横方向に結合されていると解釈します。 この場合、道楽して1か所だけSortしようととするからできないのです。めんどくさがらず、きちんと範囲指定をすればできます。 Option Explicit ' Sub Macro1()   Dim REnd As Long '   REnd = Cells(Rows.Count, "L").End(xlUp).Row   Range("L7:S" & REnd).UnMerge   Range("L7:R" & REnd).Sort Key1:=[L7]   Range("L7:Q" & REnd).Merge True   Range("R7:S" & REnd).Merge True End Sub この解釈が間違っている場合、締め切った後、画像付きで再質問して下さい。すぐ回答が付くと思います。(締め切らずに同じ質問をすると、マルチポストで規約違反です)

関連するQ&A

  • 可視セルから結合セルへの貼り付けについて

    お世話になります。 ユーザーフォームに期間を入力し、オートフィルタから可視セル をコピペしようと試みたのですが、貼り付け先が結合セルのため うまく出来ません。可視セルをひとつずつ貼り付けるしかないのでしょうか? 仮にセルを一つずつ貼り付ける場合はどのようにコードを 書いたらよいでしょうか? 以下コード Private Sub CommandButton1_Click() Dim 開始日 As Date Dim 終了日 As Date 条件 = Worksheets("sheet2").Range("C6") 場所 = Worksheets("sheet2").Range("A21") 開始日 = TextBox1 終了日 = TextBox2 If Worksheets("sheet1").AutoFilterMode Then Worksheets("sheet1").AutoFilterMode = False End If ScreenUpdating = False With Sheets("sheet1") .Range("A5").AutoFilter Field:=2, Criteria1:=">=" & TextBox1, Operator:=xlAnd, _ Criteria2:="<=" & TextBox2 '条件日付 .Range("A5").AutoFilter Field:=13, Criteria1:="=" & 条件, Operator:=xlAnd '条件 End With Range("A5").Select Range("A5:X1000").Sort Key1:=Range("A5"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Worksheets("sheet1").Range("A5").CurrentRegion.SpecialCells (xlCellTypeVisible) .Copy Worksheets("sheet2").Range("A21").Offset(-1.1).PasteSpecial , Paste:=xlPasteValues Range("C6").Select Application.CutCopyMode = False Worksheets("sheet1").AutoFilterMode = False ScreenUpdating = True End Sub

  • マクロ 並び替え

    Sub 並べ替え() With Worksheets("Sheet1").Sort .SortFields.Clear .SortFields.Add Key:=Range("e6"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:="金,銀,銅" .SetRange Range("a6:Cl16").CurrentRegion .Header = xlNo .Apply End With End Sub 6行目~16行目で並び替えを行ってほしいのですが、1行目から並び替えになります。 .SetRange Range("a6:Cl16").CurrentRegion と記入しているので6列目からになると思っていたのですが。 マクロ初心者のため詳しい方がいれば教えて下さい。

  • VBA - セル解除

    コピーA列結合セルを解除して、解除した行にすべてに「OK」と入れたいのですがうまくいきません。 アドバイスをお願い致します。 Dim i, Addr Worksheets("Sheet1").Range("A:A").Copy With Worksheets("Sheet2") .Range("A1").PasteSpecial . . If .Cells(i, 1).MergeCells Then Addr = .Cells(i, 1).MergeArea.Address .Cells(i, 1).UnMerge .Cells(i, 1)(Addr) = "OK" '←ここがダメです。 End If . .

  • マクロ 並び替え エラーがでる

    マクロの記録で以下のようなマクロを作りましたが、実行するとエラー91「オブジェクト変数またはブロック変数が設定されていません」とでます。どう直したらよいでしょうか? Sub Macro6() Columns("A:L").Select Selection.AutoFilter ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _ ("A1:A497"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B2").Select End Sub

  • シートの増減あっても特定セルに連番したい

    Excel2007でマクロ作成の初心者です。 すべてのシートのR15セルに、シートの順番どおり 1から連番で番号をつけるマクロを教えていただきました。 Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim i As Integer For i = 1 To ThisWorkbook.Worksheets.Count Worksheets(i).Range("R15").Value = i Next i End Sub これを以下のように改良したのですが、新しく追加したシートにはなぜか 番号が表示されません。どうしたら、うまく連番が入るようになるでしょうか。 Sub シートに連番() Dim i As Integer For i = 1 To ThisWorkbook.Worksheets.Count Worksheets(i).Range("R15").Value = i Next i End Sub

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

  • エクセル(マクロ)置換 結合されたセルに対しての置換

    こんばんは、 今置換用のマクロをこちらで検索して使ってましたが 使用するエクセルのフォーマットが 1セルに入力されてるのではなく、3つのセルを結合されている物に入力されているもので 下記のマクロだと、正しく置換されておりません。 置換変換用のシートと、置換したいシートがある状態で、 下記のマクロだとなぜ結合されたセル内の文字は置換えできないのでしょうか? 結合されてないセルですと、置換はちゃんとされております。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row ActiveSheet.Cells.Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub 明日の昼までに5000個のファイルを置換えするので これが出来ればなぁと思っております。 大変お手数ですが教えて頂けると助かります では、よろしくお願いいたします。

  • 同じセル位置にシートの連番をつけたい

    Excel2007でマクロ作成の初心者です。 すべてのシートのR15セルに、シートの順番どおり 1から連番で番号をつけたいです。 途中でシートを削除したときも、即座に新しい連番が表示されるようにしたいです。 どうつくったらいいか、皆目わかりません。よろしくお願いします。 Sub test() Dim i As Integer For i = 1 To (Worksheets.Count - 3) Cells(18, 15) = Worksheets(i) Range("R15").Formula = "="1"" Next i End Sub

  • VBAで統合セルの並び替えは可能ですか?

    表題のとうりなのですが・・・ Sub 並番号() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range("M4") .SetRange Range("A4:M242")   .Apply End With End Sub とプログラムしてるのですが、M4からM242までがセルを3個ずつ 統合したセルになっております。 統合セルの並び替えは出来ないのでしょうか? ご教授お願いいたします。

  • 【VBA】別シートを検索して該当があれば『●』表示

    VBA初心者(独学中…)です。 別シートからVLOOKUPの要領でデータの抜き出しをしたいです。 関数を試しましたが、データ量が多く、かなり時間が掛かってしまうため、 できればマクロで完了させたいと思っています。 ご教示のほど、何卒よろしくお願いいたします。 ------------------------  帳票の仕様 ------------------------ ■Excel2010 にて  ・Sheet1~9のJ列に『検索コード』があります。  ・Sheet10は【コードマスタ】シートです。  ・行はシートにより増減あり。  ・列はSheet1~9で共通、項目・並び等 変更なし。     Sheet10も項目・並びは変更しません。 ------------------------  やりたいこと ------------------------ Sheet10からSheet1~9へ、VLOOKUPのように該当データを抽出・転記したい。 ------------------------  具体的には… ------------------------ Sheet1~9の『検索コード(J列 ※データは[セル:J2]以下~)』を元に、  (1)Sheet10のA列を検索 ⇒ 該当があればSheet1~9のK列へ  (2)Sheet10のB列を検索 ⇒ 該当があればSheet1~9のL列へ 『●』が表示されるようにしたい。 ------------------------------------------------------------------------ 試しに(1)の動作テスト用に、以下を書いてみましたがうまく動作しませんでした。 (★の部分がエラーになります) 正しく動作させるには、どのようにしたらよろしいでしょうか。 (実際のコードを教えていただけますと、大変有難いです…) ================================================================ Sub コードマスタからK列値をVLookup() Dim tbl As Range Set tbl = Worksheets(10).Range("A:B") Dim key As Long key = Range("J2").Value        ★ On Error Resume Next Dim ret As String ret = WorksheetFunction.VLookup(key, tbl, 1, False) On Error GoTo 0 Range("K:K").Value = ret End Sub ================================================================

専門家に質問してみよう