[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内の文字列を検索し、抽出した部分のみを別のセルの指定部分に表示させるには』(もか)
はじめましてよろしくお願いします。
以下のような表で、C列内の“//”を検索し、“//”から後の内容を自動的にひとつ前の行のA列の中に表示させたいです。
ただし、C列には、“//”が付いた文章が、1行だったり、“//”のついた文章が無かったり、または“//”付きの文章が3行や4行あるときもあります。
その“//”付きの行のみを、Cで表示されていた“//”を取り除いた状態で元セルに表示されていた順番通りにA列の一つ前の行のセル内に改行をつけて表示したいです。
なにか良い方法があればご教示いただけますと幸いです。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
A列 B列 C列 1行 One good turn deserves another. (空白)(空白) 2行 (空白) 日付 Today's word //One good turn deserves another. 3行 (別の文章が入ったり、空白だったりします) 4行 (別の文章が入ったり、空白だったりします) 5行 (別の文章が入ったり、空白だったりします) 6行 (別の文章が入ったり、空白だったりします) 7行 Prevention is better than cure. (空白)(空白) make sure!! 8行 (空白) 日付 Today's word //Prevention is better than cure. //make sure!! 9行 (別の文章が入ったり、空白だったりします) −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
< 使用 Excel:Excel2010、使用 OS:Windows7 >
地道に処理する方法で、
Sub test()
Dim r As Range Dim i As Long Dim v As Variant Application.ScreenUpdating = False On Error Resume Next For Each r In Range("C:C").SpecialCells(xlCellTypeConstants) If InStr(1, r.Value, "//") > 0 Then v = Split(r.Value, vbLf) For i = 0 To UBound(v) If v(i) Like "//*" Then If r.Offset(-1, -2).Value = "" Then r.Offset(-1, -2).Value = Mid(v(i), 3, Len(v(i))) Else r.Offset(-1, -2).Value = _ r.Offset(-1, -2).Value & vbLf & Mid(v(i), 3, Len(v(i))) End If End If Next End If Next On Error GoTo 0 Application.ScreenUpdating = True End Sub
(ウッシ) 2015/05/14(木) 15:31
ご返答ありがとうございました。
For Each r In Range("C:C") ここを実際の抜き出しデータ部分のH列
For Each r In Range("H:H") に書き換えをして動かしてみたのですが、
うまく動きませんでした。
他に変えなければいけないところはありますか?
(もか) 2015/05/14(木) 16:13
Range("H:H").SpecialCells(xlCellTypeConstants)
とすればH列のデータの入っているセルだけ処理します。
r.Offset(-1, -2)の部分でA列1つ上のセルを指定しているのでH列なら
A列に書き出す場合は、r.Offset(-1, -7)にする必要が有ります。
提示された状態で動くかまず確かめましたか?
どうせなら最初から本番データのフォーマットを説明すればいいのに・・・
On Error Resume Next
を削除すればエラー表示されますので試してエラーの内容を提示してみて下さい。
(ウッシ) 2015/05/14(木) 16:22
いただいた内容で動かしてみたら動きました。
ご回答どうもありがとうございました。
(もか) 2015/05/14(木) 16:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.