[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『空白行のオフセットについて』(ちいきも)
こんにちは。
行に入力させているデータが空白になった時に、
下の行に入力されているデータを上に
詰める方法についての質問です。
下のマクロで、A~Cの行が空白になった場合
行を上にオフセットするが出来たのですが、Deleteで
セルごと消されてオフセットされてしまうので、
セル内のデータのみオフセットするように改良できませんでしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rs As Range
Dim dt As Range
With Range("A1", ActiveSheet.UsedRange).Columns("A:C")
Set t = .Offset(.Rows.Count).Rows(1)
For Each s In .Rows
If WorksheetFunction.CountBlank(s) = s.Cells.Count Then Set t = Union(t, s)
Next
End With
t.Delete xlUp
End Sub
よろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
(マナ) 2021/07/29(木) 19:01
下から順にコピぺして、下の余分をクリア(ちょい無駄気味)。 という建付けで考えてみました。
Sub test() Dim r As Long, flgBlank As Boolean Dim sR As Range With Range("A1", ActiveSheet.UsedRange).Columns("A:C") For r = .Rows.Count To 1 Step -1 If WorksheetFunction.CountA(.Rows(r)) > 0 Then If flgBlank And Not sR Is Nothing Then sR.Copy .Rows(r + 1) Range(.Rows(r + 1 + sR.Rows.Count), .Rows(.Rows.Count)).Clear End If Set sR = Range(.Rows(r), .Rows(.Rows.Count)) flgBlank = False Else flgBlank = True End If Next End With End Sub
(白茶) 2021/07/29(木) 19:45
ちょっとアイディア倒れかも Sub sample() Const fstr As String = "=FILTER(A1:C#,(A1:A#<>"""")*(B1:B#<>"""")*(C1:C#<>""""))" With ActiveSheet With .Range("A1", .UsedRange).Columns("A:C") nr = .Rows.Count buf = Evaluate(Replace(fstr, "#", nr)) .ClearContents .Cells(1, 1).Resize(UBound(buf), 3).Value = buf End With End With End Sub (´・ω・`) 2021/07/29(木) 20:48
こんばんは! 現状のコードを尊重して、、値だけで良ければ。。。。
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim v As Variant Dim x As Variant Dim i As Long Dim j As Long Dim k As Long Dim MyFlg As Boolean With Range("A1", Me.UsedRange).Columns("A:C") v = .Value ReDim x(LBound(v, 1) To UBound(v, 1), LBound(v, 2) To UBound(v, 2)) For i = LBound(v, 1) To UBound(v, 1) MyFlg = False For j = LBound(v, 2) To UBound(v, 2) If v(i, j) <> Empty Then MyFlg = True Exit For End If Next If MyFlg Then k = k + 1 For j = LBound(v, 2) To UBound(v, 2) x(k, j) = v(i, j) Next End If Next Application.EnableEvents = False .Value = x Application.EnableEvents = True End With Erase v, x End Sub (SoulMan) 2021/07/29(木) 21:08
私のはダメでした。ちょっとテスト不足 Filterの条件は * じゃなくて + じゃないとダメですね。 (´・ω・`) 2021/07/29(木) 21:48
あ、ちなみに私のは
Deleteでオフセットされてしまうのがイヤって事は、 [A:C]の各行を参照している計算式が他の列にあるのではないか?
...と予想してコピペ方式にしてみたんですよね。 なので、違う事情ならあんまり良くないかも知れません。
(白茶) 2021/07/29(木) 21:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.