[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フィルターなどを使わず抜き出したい』(初心者)
例えば下の表があるとします、
図1
_A列_ _B列_ _C列_ 1 遊園地 駅直結 ジェットコースター 2 水族館 ペンギン 3 植物園 車必須 ラフレシア 4 動物園 シロクマ 5 美術館 5年ぶり ジャコメッティ
並べ替えとフィルターを使わずにB列の文字や数値が入っている行だけ一番上にすることはできますか?
↓こうしたい
図2
_A列_ _B列_ _C列_ 1 遊園地 駅直結 ジェットコースター 3 植物園 車必須 ラフレシア 5 美術館 5年ぶり ジャコメッティ 2 水族館 ペンギン 4 動物園 シロクマ
なお、D列以降と6行目以降も複数の関連性のない文字が入っています。
< 使用 Excel:Excel2021、使用 OS:Windows10 >
別のシートにコピーして並べ替えた後、貼り付け直せばいいんじゃ? (稲葉) 2023/03/24(金) 10:23:41
E2 =SORT(IF(A1:C5="","",A1:C5),2,-1) (フォーキー) 2023/03/24(金) 11:52:49
|[E] |[F] |[G] [1]|植物園|車必須 |ラフレシア [2]|遊園地|駅直結 |ジェットコースター [3]|美術館|5年ぶり|ジャコメッティ [4]|水族館| |ペンギン [5]|動物園| |シロクマ (フォーキー) 2023/03/24(金) 11:56:32
>D列以降と6行目以降も複数の関連性のない文字が入っています。 見落としてました。
マクロ以外だと稲葉さんの回答になると思います。
(フォーキー) 2023/03/24(金) 12:03:27
>並べ替えとフィルターを使わずに これも見落としてました。(タイトルも同じにしてほしいです・・・) 私の回答は無視してください。 (フォーキー) 2023/03/24(金) 12:07:41
空白を詰めるフィルターってことかしら? Sub test() Dim v1 As Variant, v2 As Variant Dim x As Variant, y As Variant Dim xx As Variant, yy As Variant Dim i As Long x = Filter([transpose(if(row(1:5),if(b1:b5="",char(2),row(1:5))))], Chr(2), False) y = Filter([transpose(if(row(1:5),if(b1:b5="",row(1:5),char(2))))], Chr(2), False)
v1 = Range("A1:C5").Value v2 = v1 i = 0 For Each xx In x i = i + 1 v2(i, 1) = v1(xx, 1) v2(i, 2) = v1(xx, 2) v2(i, 3) = v1(xx, 3) Next xx For Each yy In y i = i + 1 v2(i, 1) = v1(yy, 1) v2(i, 2) = v1(yy, 2) v2(i, 3) = v1(yy, 3) Next yy Range("A1:C5").Value = v2 End Sub (稲葉) 2023/03/24(金) 14:02:41
Dim bMax As Long Dim bDst As Long Dim iRow As Long bMax = Cells(Rows.Count, "B").End(xlUp).Row For iRow = 2 To bMax If Cells(iRow, "B").Value = "" Then If bDst < 1 Then bDst = iRow Else Cells(iRow, "A").EntireRow.Cut Cells(bDst, "A").EntireRow.Insert Shift:=xlDown iRow = bDst bDst = 0 End If Next
禁断のループ数上書きを使う方法
(火災報知器) 2023/03/24(金) 15:21:39
Dim bMax As Long Dim bTgt As Long Dim iRow As Long bMax = Cells(Rows.Count, "B").End(xlUp).Row For iRow = 2 To bMax If Cells(iRow, "B").Value = "" Then bTgt = Cells(iRow, "B").End(xlDown).Row If bTgt > bMax Then Exit For Cells(bTgt, "B").EntireRow.Cut Cells(iRow, "B").EntireRow.Insert Shift:=xlDown End If Next
禁じ手抜きの別バージョン
(火災報知器) 2023/03/24(金) 15:37:23
火災報知器さん >なお、D列以降と6行目以降も複数の関連性のない文字が入っています。 らしいんで > Cells(bTgt, "B").EntireRow.Cut > Cells(iRow, "B").EntireRow.Insert Shift:=xlDown はだめかも・・・ 新規シートにコピーしてからやっちまったほうが早そうっすね (稲葉) 2023/03/24(金) 15:51:10
上記2コードは破棄でお願いします。
(火災報知器) 2023/03/24(金) 16:03:51
Dim bMax As Long Dim bTgt As Long Dim iRow As Long bMax = 5 For iRow = 1 To bMax If Cells(iRow, "B").Value = "" Then bTgt = Cells(iRow, "B").End(xlDown).Row If bTgt > bMax Then Exit For Cells(bTgt, "A").Resize(, 3).Cut Cells(iRow, "A").Resize(, 3).Insert Shift:=xlDown End If Next
A〜C列、1〜5行に限定
(火災報知器) 2023/03/24(金) 16:08:59
参考出品 Sub sample() [A1:C5] = [VSTACK(FILTER(A1:C5,B1:B5<>""),FILTER(A1:C5,B1:B5=""))] End Sub (´・ω・`) 2023/03/25(土) 12:57:52
VSTACK関数は2021にはないですか、、、 (´・ω・`) 2023/03/25(土) 13:09:10
もしSORTBYが使えれば =SORTBY(IF(A1:C5="","",A1:C5),B1:B5="") (んなっと) 2023/03/25(土) 18:45:38
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.