質問: ### 前提・実現したいこと Excel VBAを使用しています。 Sheet1には ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/26f306efb2ffe0b5042cd40bce5797c0.jpeg)] ↑このような文字列がセルに入力されています。 このうち、文字列に『→』を含むセルのみを別ブックのSheet2に表示させたいです。 例えば上に貼付致しました画像の場合ですと、Sheet2に ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/8f3f8b25d3b467db0faf02ea27971707.png) ↑このように一括表示させたいです。 「d→e」が入力してあるCells(1,2)は1行目の2列目、「j→k」が入力してあるCells(3,3)は3行目の3列目なのでこのような表示になります。 手順といたしましては 1行番号と列番号をそれぞれ(i,j)と置きRange("A1","C3")のセルを一括で取得 2「→」を含むセル番号をSheet2に一括表示 という流れになるのかな...と思いましたが、それをコードで表すことができず悩んでおります。 もしわかる方がいらっしゃいましたらアドバイスなどよろしくお願い致します。 ### 発生している問題・エラーメッセージ ### 該当のソースコード ``` ExcelVBA ``` ### 試したこと ### 補足情報(FW/ツールのバージョンなど)
回答: For Each と、InStr と、Offset を使いました。 シート(Sheet2) の、見出しは1行目、行列値の書き込みが2行目からだとして データ上書きの例と、データ追記の例を貼りましたので参考にしてみて下さい。 見出し行などの条件が変わると期待するセルに書き込んでくれません。 書き直してみて下さい。 データ追記の例で使った End(xlUP) は、キーボードの 「End」「↓」「↑」 です。 ``` Dim Rng As Range Dim r As Integer For Each Rng In Sheets("Sheet1").Range("A1:C3") If InStr(Rng.Value, "→") > 0 Then With Sheets("Sheet2") .Range("A2").Offset(r).Value = Rng.Row .Range("B2").Offset(r).Value = Rng.Column End With r = r + 1 End If Next Rng ``` ``` Dim Rng As Range Dim r As Integer r = Cells(Rows.Count, 1).End(xlUp).Row For Each Rng In Sheets("Sheet1").Range("A1:C3") If InStr(Rng.Value, "→") > 0 Then With Sheets("Sheet2") .Range("A1").Offset(r).Value = Rng.Row .Range("B1").Offset(r).Value = Rng.Column End With r = r + 1 End If Next Rng ```