[[20150308084901]] 『セル内容の移動』(noro) ページの最後に飛ぶ

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

 

『セル内容の移動』(noro)

(1)A列のあるセルに「20時台」という文字をみつけて、それをひとつ上のセルに移動させる。
(A40の 「20時台」をA39に)(A40は不定なのでFindする)

(2)A列のあるセルにある文字列「20時台」をみつけて次の行も含めて、1行上に2行ごと移す
A40に「20時台」A41に「***」とあるものを、A39に「20時台」A40に「***」に移動させる。

なお(2)の場合は、1行下にするケースもあります。

すでに使用しているマクロに挿入したいので、その部分だけを教えていただけるとありがたいです。
よろしくお願いします

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 複数あったらどうしたいですか?

 追加で。A1に20時台があったらどうしますか?

 さらに追加で。

 ・「移動」とは? A40 を A39 へ。そのあと A40は空白にするということですか?
 ・「その部分だけ」とは、どの部分ですか? Find ですか? 「移動」ですか?

 と、質問しましたが、とりあえずコードを。要件の取り間違いあれば指摘願います。
 (1)が Test1、(2)が Test2Up と Test2Down です。

 Sub Test1()
    Dim c As Range

    Set c = Columns("A").Find(What:="20時台", LookAt:=xlWhole)
    If c Is Nothing Then Exit Sub
    If c.Row = 1 Then Exit Sub
    c.Offset(-1).Value = c.Value
    c.ClearContents

 End Sub

 Sub Test2Up()
    Dim c As Range

    Set c = Columns("A").Find(What:="20時台", LookAt:=xlWhole)
    If c Is Nothing Then Exit Sub
    If c.Row = 1 Then Exit Sub
    c.Offset(-1).Resize(2).Value = c.Resize(2).Value
    c.Offset(1).ClearContents

 End Sub

 Sub Test2Down()
    Dim c As Range

    Set c = Columns("A").Find(What:="20時台", LookAt:=xlWhole)
    If c Is Nothing Then Exit Sub
    c.Offset(1).Resize(2).Value = c.Resize(2).Value
    c.ClearContents

 End Sub

(β) 2015/03/08(日) 09:03


ありがとうございます。
A列に「20時台」というのはひとつしかなく、A1は4時台からはじまります。
また、移動はそのとおり元の場所は空白になります。(2)のケースはA41が空白になります。
その部分とはSubとかDimをはずして考えていました。SubとEnd Subの間をペーストすればいいだけの話でしたがこれだけで独立使用することになったため「その部分」は取り消します。
とり急ぎご返事のみで今から試してみます。

※試しました。
これでうまくゆきました。
ありがとうございました。

(noro) 2015/03/08(日) 10:18


先日教えていただいたセル移動で、別のケースが出てしまったため、修正版で教えていただけるとありがたいです。

「20時台」を見つけたら、その上の行との計2行を1段下の行に移動。(前回はその下の行)
A30に「****」A31に「20時台」とあったら、A31に「****」A32に「20時台」(A30は空欄)

よろしくお願いします。
(noro) 2015/03/12(木) 07:39


 こんなことですか?

 Offset と Resize について、一度、何かで調べて習得しておかれたらよろしいかと。
 でなければ、こんどは3行上をどうこう、4行下にどうこう そのたびに、コードをお願いしますと
 そう質問することになりますよ。

 前回の Test1,Test2Up,Test2Down とあわせて、そのコードの違いと実行結果の違いを見比べ
 それを理解していたら、以下は自分でかけるはずですが?

 Sub Test2Down2()
    Dim c As Range

    Set c = Columns("A").Find(What:="20時台", LookAt:=xlWhole)
    If c Is Nothing Then Exit Sub
    c.Resize(2).Value = c.Offset(-1).Resize(2).Value
    c.Offset(-1).ClearContents
 End Sub

(β) 2015/03/12(木) 08:53


どうもすみません。
一応前回のコードを見ながら色々書き込んで試してみたのですが、知識がないままにやっていたので下には移動できたものの2行がうまくゆかなかったのでお願いしてしまいました。
今回との違いを比較しながら勉強したいと思います。
ありがとうございました。
(noro) 2015/03/12(木) 09:30

コメント返信:

[ 一覧(最新更新順) ]


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