[[20200401111454]] 『行の順番を入れ替える方法』(koooo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『行の順番を入れ替える方法』(koooo)

マクロで行の順番を入れ替える方法を教えてくれませんか

条件にあった行が何行目かはすでにa、b、cと求めています

条件あ=a,条件い=b,条件う=c
条件あ、い、うの順に上から並べます

順番を入れ替えるにはコピー、削除を繰り返すのでしょうか?

 Dim a As Long
 Dim b As Long
 Dim c As Long

 a=
 b=
 c=

 wk.Rows(c).Insert

< 使用 Excel:Excel2019、使用 OS:Windows10 >


どんな値を、どんなルールで並び替えるのか、具体的な数値と、並び替え後のイメージを教えてください。

並び替え方法はいろいろあり、ダミーの変数を1つ用意するとか、外部オブジェクトを利用するとか、そのまま貼った後にExcelの並び替え機能を使うようコーディングするとか…。
(???) 2020/04/01(水) 12:01


A列にあ,うい,うとそれ以外の値があります
これをA列の最後の行の下に上から順番にあの行,いの行,うの行と並べ、
あの行の上に1行挿入したいです

あの行番号はa,いの行番号はb,うの行番号はcです

例えば 
     あ → あ ←最後の行の下に順番に並べる
     う → い
     い → う

  Dim a As Long
  Dim b As Long
  Dim c As Long

 a=Application.Match("あ", Columns("A"), 0)
 b=Application.Match("い", Columns("A"), 0)
 c=Application.Match("う", Columns("A"), 0)

 wk.Rows(a).Insert
(koooo) 2020/04/01(水) 13:03

うーん、その例だと、やっぱり何をしたいのか判らないです。 a,b,cが、それぞれの文字列に一致する行というのは判りましたが、「あ」の行の上に1行挿入するだけだと、b,c は不要ですよね? それに、何も並び替えていないし。

一番下に「あ、い、う」の順で行コピーし追加するにしても、a,b,cの順番で処理するだけであり、何も並び替える必要は無いし…。 「あ」の上に行挿入なのか、行末尾に何か追加するのか、どっちなのでしょう? 元データと、実行後のデータの例を挙げてみてください。

そして、並び替えるのが行番号のような数値なのか、それとも検索対象の文字列なのか、それが判らないと、どういう方法で実現するのがベストなのか判らないです。
(???) 2020/04/01(水) 13:16


 > あ → あ ←最後の行の下に順番に並べる 

 こんな事?
 Sub Test()
    Dim myR As Variant, a As Variant

    For Each a In Array("あ", "い", "う")
        myR = Application.Match(a, Columns(1), 0)
        If IsError(myR) Then
            MsgBox a & " が見つかりません", vbExclamation
            Exit Sub
        Else
            Cells(myR, 1).EntireRow.Delete
            Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = a
        End If
    Next
 End Sub

(ピンク) 2020/04/01(水) 13:42


 行毎に移動ですね
 Sub Test()
    Dim myR As Variant, a As Variant

    For Each a In Array("あ", "い", "う")
        myR = Application.Match(a, Columns(1), 0)
        If IsError(myR) Then
            MsgBox a & " が見つかりません", vbExclamation
            Exit Sub
        Else
            Cells(myR, 1).EntireRow.Cut Cells(Rows.Count, "A").End(xlUp).Offset(1)
            Cells(myR, 1).EntireRow.Delete
        End If
    Next
 End Sub

(ピンク) 2020/04/01(水) 13:48


Sub test()
    Const sKey As String = "あ,い,う"
    Dim v As Variant
    Dim rngFind As Range

    For Each v In Split(sKey, ",")
        Set rngFind = Range("A:A").Find(v)
        If rngFind Is Nothing Then Exit Sub
        rngFind.Cut
        Cells(Rows.Count, "A").End(xlUp).Offset(1).Insert
    Next
End Sub

こんなかんじですかね。
検索機能(Findメソッド)で探した方が、セルその物が返ってくるので、
行番号の操作をするより便利かと思いました。
(まっつわん) 2020/04/01(水) 13:58


ぶつかってしまいましたがそのまま投稿します

並べ替える方法は分からず困ってます
できているとこまでを一応お知らせしました。

wk.Rows(a).Insertは並び替えた後です

A列の最後の行の下に上から順番にあの行,いの行,うの行と並べ、
あの行の上に1行挿入したいです

あの行、いの行、うの行、それ以外を分けるためです

 それ以外
 空白
 あ
 い
 う

並べ替えるのは行全体です
手動では
  対象の行を選択→切り取り→最後の行の下に貼りつけ
となります

例えば

 それ以外 → それ以外
 い    → それ以外
 それ以外 → それ以外
 それ以外 → それ以外
 う    → それ以外
 それ以外   空白
 あ    → あ
 それ以外 → い
      → う

(koooo) 2020/04/01(水) 13:59


 >wk.Rows(a).Insertは並び替えた後です 

 Sub Test2()
    Dim myR As Variant, a As Variant

    For Each a In Array("あ", "い", "う")
        myR = Application.Match(a, Columns(1), 0)
        If IsError(myR) Then
            MsgBox a & " が見つかりません", vbExclamation
            Exit Sub
        Else
            Cells(myR, 1).EntireRow.Cut
            Cells(Rows.Count, "A").End(xlUp).Offset(1).Insert
        End If
    Next
 End Sub

(ピンク) 2020/04/01(水) 15:16


ピンクさん 並び替えた後にInsertされなかったです
自力では修正できませんでした
教えてくれませんか?

まっつわんさん Findで見つかったセルだけ並び替えられました
行全体を並び替えるにはどうなるのでしょうか?

(koooo) 2020/04/01(水) 16:34


なるほど、一致した行を最下行に移動させたかったのですね。 あまり並び替えは関係なかった、と。

私だったら、移動ではなく、まずは見つかった順にコピーしていき、全部コピーし終わってから、下の行から元を削除しますね。(消す順番を得るために並び替えしています)

 Sub test()
    Dim vw As Variant
    Dim AR As Object
    Dim iR As Long
    Dim i As Long

    Set AR = CreateObject("System.Collections.ArrayList")
    iR = Cells(Rows.Count, "A").End(xlUp).Row + 2

    For i = 0 To 2
        vw = Application.Match(Array("あ", "い", "う")(i), Columns(1), 0)
        If IsError(vw) = False Then
            Rows(vw).Copy Cells(iR, "A")
            AR.Add vw
            iR = iR + 1
        End If
    Next i
    AR.Sort

    For i = AR.Count - 1 To 0 Step -1
        Rows(AR(i)).Delete
    Next i
 End Sub
(???) 2020/04/01(水) 17:08

切り取り&挿入なら、行数は変わらない事をいうのを利用すると、以下でも良いですね。
 Sub test2()
    Dim vw As Variant
    Dim iR As Long
    Dim i As Long

    iR = Cells(Rows.Count, "A").End(xlUp).Row + 2

    For i = 0 To 2
        vw = Application.Match(Array("あ", "い", "う")(i), Columns(1), 0)
        If IsError(vw) = False Then
            Rows(vw).Cut
            Rows(iR).Insert
        End If
    Next i
 End Sub
(???) 2020/04/01(水) 17:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.