Excel (VBA)

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

 
(指定なし : 指定なし)
イミディエイトウインドウの値をセルにコピーするについて
投稿日時: 22/07/15 17:53:23
投稿者: BETA

初心者ですので、よろしくお願いします。
エクセルVBAでシートB列を文字列検索(北海道)をします。
北海道が検索された場合、対象セルの下2つが必要データとなります。
ただし、北海道でヒットした場合、下のセルが空欄の場合は除外して次を検索します。
検索ヒットした場合、offsetでイミディエイトウインドウに表示させ、うまくいっています。
イミディエイトウインドウの出力結果を、sheet1のU1から右(横)方向にコピーをしたいです。
'//////////////////////////検索()
Sub 北海道()
Dim rng As Range, tempRng As Range, searchRng As Range
 
Set searchRng = Range("B:B")
 
Set rng = searchRng.Find("北海道")
 
Set tempRng = rng
 
Do While Not rng Is Nothing
 
  If rng.Offset(1, 0) <> "" Then
 
    Debug.Print rng.Offset(1, 0) ’コピーしたい値(セルU1〜)
    Debug.Print rng.Offset(2, 0) ’コピーしたい値(セルV1〜)
     
   End If
 
    Set rng = searchRng.FindNext(rng)
 
    If rng.Address = tempRng.Address Then
        Exit Do
    End If
Loop
 
End Sub
 
////////////////////////////////////////////////////////////////////////
 
1回のヒットでU1とV1の2セルを使用します。
最大で5個までヒットするため、AD1まで使用することになります。
5個以上のヒットは無視をしたいです。
 
 
わかりづらい説明で申し訳ございませんが、ご教示をお願いします。

回答
投稿日時: 22/07/15 21:09:00
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

    Debug.Print rng.Offset(1, 0) ’コピーしたい値(セルU1〜)
    Debug.Print rng.Offset(2, 0) ’コピーしたい値(セルV1〜)
 

を、つぎのように変更します。
 
Dim LastCol As Long

    With ActiveSheet
        LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        If LastCol > .Range("U1").Column Then
            .Cells(1, LastCol + 1).Value = Rng.Offset(1, 0).Value
            .Cells(1, LastCol + 2).Value = Rng.Offset(2, 0).Value
        Else
            .Range("U1").Value = Rng.Offset(1, 0).Value
            .Range("V1").Value = Rng.Offset(2, 0).Value
        End If
    End With

 
※5個という条件は、自分で組み込んでください。
 LastColを参照すれば対応可能と思います。

回答
投稿日時: 22/07/15 22:31:18
投稿者: WinArrow
投稿者のウェブサイトに移動

追記
  
全体として、シートで修飾したほうがよい。
Valueプロパティを省略しない方がよい。

投稿日時: 22/07/16 05:38:51
投稿者: BETA

WinArrow様
ご回答ありがとうございました。
想定した動作をすることができました。
5個の条件につきましては、学習して対応したいと思います。