- ベストアンサー
マクロで別シートの検索と別シートへの転記
- Windows7、エクセル2013で、Sheet1のA列の値をSheet2のA列内で検索し、同じ値があればSheet3のB列の5行目から順番に転記する方法を教えてください。
- Find関数ではうまくいかず、Countif関数を使っても駄目でした。関数などを使用して対応する方法を教えてください。
- 質問者はVBAのコードを使用して検索と転記を行い、うまくいかなかったとしています。関数を使用して同じ処理を行う方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
やりたいのはこういう事でしょうか 修正前 If Worksheets("Sheet2").Columns("A").CountIf(検索値) <> 0 Then 答 = 検索値 ↓ 修正後 If WorksheetFunction.CountIf(Worksheets("Sheet2").Columns("A"), 検査値) <> 0 Then 答 = 検査値 ・変数名が「検索値」「検査値」で間違っています。 ・VBA内でワークシート関数を使用する場合はWorksheetFunctionを使用します。
その他の回答 (1)
- tsubu-yuki
- ベストアンサー率46% (179/386)
横から失礼します。 CountIf はもう回答が出ていますので、 こんな方法も、という程度で参考までに。 > If Worksheets("Sheet2").Columns("A").CountIf(検索値) <> 0 Then ↓ If Not Worksheets("Sheet2").Columns("A").Find(What:=検索値, _ Lookat:=xlWhole) Is Nothing Then でもおそらくいけますね。 一般機能にもある「検索」を使って、 返り値が Nothing じゃなかったら、 つまり、一件以上ヒットしたら、という意味合いです。 なお、ヒットするとここでいう「検索値」を返してきます。 逆に一件もヒットしないときは Nothing が返ります。 (略) <> "" Then という書き方だと「比較対象が無いよ」ということで エラーを返して止まってしまいますので、 Nothing と比較してやりましょ、ということですね。 ちなみに xlWhole で「完全一致」を指定しています。 If 対象 Is Nothing Then If Not 対象 Is Nothing Then ちょっと回りくどい、ややこしい書き方ですが、 覚えておくと何かに応用ができるかも?です。
お礼
ありがとうございました。
お礼
検査値と検索値、すいません。間違えてました。 全部検索値に直しました。 教えていただいた If WorksheetFunction.CountIf(Worksheets("Sheet2").Columns("A"), 検索値) <> 0 Then 答 = 検索値 で思ったように動きました。 ありがとうございました。 Sub 検索転記2() Dim 検索行 Dim 検索値 Dim 答 Dim 入力行 入力行 = 5 For 検索行 = 3 To 8 検索値 = Worksheets("Sheet1").Cells(検索行, 1) If WorksheetFunction.CountIf(Worksheets("Sheet2").Columns("A"), 検索値) <> 0 Then 答 = 検索値 Worksheets("Sheet3").Cells(入力行, 2) = 答 入力行 = 入力行 + 1 End If Next 検索行 End Sub