[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行の順番を入れ替える方法』(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,いの行番号は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の順番で処理するだけであり、何も並び替える必要は無いし…。 「あ」の上に行挿入なのか、行末尾に何か追加するのか、どっちなのでしょう? 元データと、実行後のデータの例を挙げてみてください。
そして、並び替えるのが行番号のような数値なのか、それとも検索対象の文字列なのか、それが判らないと、どういう方法で実現するのがベストなのか判らないです。
(???) 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
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
まっつわんさん 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.