Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Excel 2000)
FoundCell で検索したセルの一行上のセル値もプラスして書き出したい。
投稿日時: 18/06/12 18:05:27
投稿者: のぶ2018

編集シートの選択範囲から
「検索した "by*" のセルのvalue」 と 「その一行上のセルのvalue」を
    
「検索 "by*" のセルのvalue」 & " − " & 「その一行上のセルのvalue」で
(例 by該当セル内容 − 一行上のセル内容)という感じです。
    
Sheets("Sheet3")に順番に書き出したいのですがどうすればよいのか
教えてください。
よろしくお願いします。
─────────────────────────
下記のページをコピペして手直しのものですが
http://officetanaka.net/excel/vba/tips/tips123c.htm
─────────────────────────
Sub Sample7()
 
    Sheets("編集シート").Select
    Range("a1:a100").Select
  
  
  
    Dim FoundCell As Range, FirstCell As Range
    Set FoundCell = Cells.Find(What:="by*")
     
    If FoundCell Is Nothing Then
        MsgBox "見つかりません"
        Exit Sub
    Else
        Set FirstCell = FoundCell
        FoundCell.Copy Sheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    End If
     
    Do
        Set FoundCell = Cells.FindNext(FoundCell)
        If FoundCell.Address = FirstCell.Address Then
            Exit Do
        Else
            FoundCell.Copy Sheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        End If
    Loop
     
    Sheets("Sheet3").Select
 
End Sub

投稿日時: 18/06/12 18:28:50
投稿者: のぶ2018

検索して書き出したいデーターは
A列にこんな感じです。
─────────────────────
電子レンジで簡単サラダチキン
by YNChanIND
使うものは電子レンジだけ!レンジで簡単にサラダチキンができます! 自家製ゆえ味付けも自分好みにできます♪
材料: 鶏胸肉,塩,胡椒
レンジで4分☆簡単サラダチキン
by みつばちまぁにゃん
コンビニ越えかも!? ジューシーで柔らかくて美味しい♡ サラダに乗っけて♪♪ もちろんそのままでも◎
材料: 鶏胸肉,マジックソルトまたは塩,砂糖,酒
レンジで簡単!サラダチキン
by Suzu❁yoshi
低炭水化物ダイエット向き、そして高タンパク コンビニで売っているようなサラダチキンが家で手軽に作れます
材料: 鶏ムネ肉皮なし,料理酒,マジックソルト
レンジで簡単!サラダチキン(ハーブ)
by ☆チェリー3810☆
コンビニで売ってるサラダチキンを家でも食べたい‼と思って作ったら簡単でした!
材料: むね肉,クレイジーソルト,ラップ
超簡単!レンジでしっとりサラダチキン
by Fooyuco
色々試した結果、一番楽で自分好みの作り方。 知り合いに市販のものよりおいしい!と言ってもらえました(*^^*)
材料: 鶏胸肉,砂糖,塩,みりん,酒,酢
 
 
─────────────────────
書き出したいのはこんな感じです。
クックパッドの検索ランキングの結果を
タイトル と 名前 を一覧にしたいのです。
─────────────────────
by YNChanIND − 電子レンジで簡単サラダチキン
by みつばちまぁにゃん − レンジで4分☆簡単サラダチキン
 
─────────────────────

回答
投稿日時: 18/06/12 20:04:40
投稿者: sy

まずは余計なSelectは止めましょう。

引用:
Sheets("編集シート").Select
Range("a1:a100").Select
Set FoundCell = Cells.Find(What:="by*")
は以下のように纏めれます。
Set FoundCell = Sheets("編集シート").Range("a1:a100").Find(What:="by*")

 
それと、先頭がbyから始まる文章を検索ですよね。
LookAtを指定していないと、前回の検索時の指定方法によっては途中にbyが含まれている文章も検索対象になってしまいますよ。
きちんとLookAtは指定しましょう。
Set FoundCell = Sheets("編集シート").Range("a1:a100").Find(What:="by*",LookAt:=xlWhole)

 
転記したいのは、FoundCellの文章と、右に-で区切って、一つ上のセルの文章を連結させた
文章ですよね。
ならコピペよりも文字列の代入の方が適しています。
引用:
FoundCell.Copy Sheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
2カ所にある上記の1行を以下に変更して下さい。
Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = FoundCell.Value & " - " & FoundCell.Offset(-1, 0).Value

投稿日時: 18/06/12 22:13:03
投稿者: のぶ2018

syさん
わかりやすく親切なアドバイスで助かりす。
LookAtは指定なども教えていただいて
本当に勉強になりました。
本当にありがとうございました。
m(_ _)m
 
これで問題なく目的のマクロが働いてくれてます。
 
Sub cookpad_Edit()
 'クックパッドのランキングから名前とタイトルだけ一覧にする
  
    Dim FoundCell As Range, FirstCell As Range
    Set FoundCell = Sheets("編集シート").Range("a1:a100").Find(What:="by*", LookAt:=xlWhole)
     
    If FoundCell Is Nothing Then
        MsgBox "見つかりません"
        Exit Sub
    Else
        Set FirstCell = FoundCell
        Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = FoundCell.Value & " - " & FoundCell.Offset(-1, 0).Value
    End If
     
    Do
        Set FoundCell = Cells.FindNext(FoundCell)
        If FoundCell.Address = FirstCell.Address Then
            Exit Do
        Else
            Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = FoundCell.Value & " - " & FoundCell.Offset(-1, 0).Value
        End If
    Loop
      
    Sheets("Sheet3").Select
  
End Sub