- ベストアンサー
Excel VBAによる検索処理の実装方法とは?
- ExcelのVBAを使用して、指定の条件での検索処理を行う方法を教えてください。
- 具体的には、指定のセルの値に一致する行を検索し、その行の別のセルの値を取得する方法を知りたいです。
- サンプルコードや考え方を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#01です。C2の式は以下でいかがでしょうか。 =IF(A2="","",INDIRECT("B"&MIN(IF(LEN(A2:A$10)=0,ROW(A2:A$10),65536))-1)) (Shift+Ctrl+Enterで入力します) ただし最終行にデータがあると不正動作するようですので、範囲(A2:A$10)は例えばA2:A$500のように実際のデータより大きめに指定しておいてください。
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
#01です。VBAならとりあえずこんな感じでしょうか Sub Macro() Dim wkNUM, idx As Long, psw As Boolean psw = False For idx = Range("A65536").End(xlUp).Row To 2 Step -1 If Cells(idx, 1) = "" Then psw = False Cells(idx, 3) = "" Else If psw = False Then wkNUM = Cells(idx, 2).Value psw = True End If Cells(idx, 3) = wkNUM End If Next End Sub
お礼
VBAでのご回答もわざわざ考えてくださりありがとうございます。 内容を理解してみようと思います。最初VBAと書いたのは、ループ処理が入るのではないかと思ったからでした。今後複雑な処理をする必要が出てきそうですのでVBAもきちんと勉強しようと思います。
- zap35
- ベストアンサー率44% (1383/3079)
もちろんVBAでもできます。でも関数でもできます。C2に以下の式をペーストして =IF(A2="","",INDIRECT("B"&MIN(IF(ISBLANK(A2:A$9),ROW(A2:A$9),65536))-1)) Shift+Ctrl+Enterで入力し、C3以下はC2をコピー。式中のA2:A$9の範囲は実データに合わせる。($記号はいじらないこと!) VBAでやりたいが、アルゴリズムが分からないというご趣旨であれば補足して下さい。
補足
迅速なご回答ありがとうございます。 関数の式については理解してみようと思います。 頂いた内容で試してみたところ、A列に直接入力している場合はうまくいきました。 一方A列自身に式を設定しているような場合には見かけ上空白でも、その式の最後までは空白で無いと認識しているようです。 (例:IF(D2="B",D2,"")をA列のセルに設定している場合) お願いばかりで恐縮ですが、A列自身に式を設定されている場合でも有効な関数の式を教えて頂けないでしょうか?よろしくお願いいたします。
お礼
重ね重ねのご回答ありがとうございます。 今度は問題なく処理されました。ISBLANK関数で空白をチェックするのではなく、LEN関数で文字数が0であることを条件分岐にしたんですね。 大変参考になりました。もっと勉強せねばと思いました。