一つ上のセルの値のみ取得
今日は、こちらの記事に便乗。
koroko.hatenablog.com
コロ子さんが挑戦されているように、「フィルターが掛かっていても」がポイントだと思う。
以下の条件を全て満足する場合、簡略化が可能だ。
- 選択セルが空白である。
- 一つ上のセル(隠れているものを除く)が、空白ではない。
この場合フィルターの有無に関わらず、選択中のセルから「End(xlUP)」を用いれば、空白ではない一つ目のセルが選択される。
Sub ArrayOnOne() Selection.Value = Selection.Offset(Selection.Item(1).End(xlUp).Row - _ Selection.Item(1).Row).Value End Sub
しかし、一つ上が空白の場合、本来空白が入力されるべきところ、さらに一つ上が入力されてしまう。
また、選択中のセルに、既に何か文字が入力されている場合。
この場合も、意図しない結果が返ってしまう。
ということで、やはり地道に探しに行くのが一番良さそうだ。
Sub ValueOnOne() Dim i As Long ' 選択範囲の左上セルから見て、一行ずつ上のセルを確認する。 ' 表示されている場合、その値を選択範囲に入力する。 For i = 1 To Selection.Item(1).Row - 1 If Rows(Selection.Item(1).Row - i).Hidden = False Then Selection = Selection.Offset(-i).Value Exit For End If Next End Sub
参考まで。