• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロで別シートの検索と別シートへの転記)

マクロで別シートの検索と別シートへの転記

このQ&Aのポイント
  • Windows7、エクセル2013で、Sheet1のA列の値をSheet2のA列内で検索し、同じ値があればSheet3のB列の5行目から順番に転記する方法を教えてください。
  • Find関数ではうまくいかず、Countif関数を使っても駄目でした。関数などを使用して対応する方法を教えてください。
  • 質問者はVBAのコードを使用して検索と転記を行い、うまくいかなかったとしています。関数を使用して同じ処理を行う方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

やりたいのはこういう事でしょうか 修正前 If Worksheets("Sheet2").Columns("A").CountIf(検索値) <> 0 Then 答 = 検索値 ↓ 修正後 If WorksheetFunction.CountIf(Worksheets("Sheet2").Columns("A"), 検査値) <> 0 Then 答 = 検査値 ・変数名が「検索値」「検査値」で間違っています。 ・VBA内でワークシート関数を使用する場合はWorksheetFunctionを使用します。

gx9wx
質問者

お礼

検査値と検索値、すいません。間違えてました。 全部検索値に直しました。 教えていただいた 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

その他の回答 (1)

回答No.2

横から失礼します。 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 ちょっと回りくどい、ややこしい書き方ですが、 覚えておくと何かに応用ができるかも?です。

gx9wx
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう