• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Excel関数】複数条件に対し、最初に一致したセルの行番号を返す方法)

【Excel関数】複数条件に対し、最初に一致したセルの行番号を返す方法

このQ&Aのポイント
  • Excelの関数を使って、複数の条件に一致するセルの行番号を取得する方法について解説します。
  • 具体的な例として、A列にランダムな数字が並んでいる場合に、「16.5より大きく21より小さい数」の条件に最初に一致したセルの行番号を求める方法を紹介します。
  • また、大量のファイルや行数がある場合でも、VBAを使わずに関数を利用して効率的に行番号を取得する方法も提案しています。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

以下のような数式を入力し、Ctrl+Shift+Enterで確定してください。 =MIN(IF((A1:A1000>16.5)*(A1:A1000<21),ROW(A1:A1000),""))

linelan
質問者

お礼

 MackyNo1様  どうもありがとうございます!!解決いたしました!^^ データが100万行以上あるんですが、 =MIN(IF((A:A>100456.954351)*(A:A<100456.954353),ROW(A:A),"")) といたしてみましたところ、見事行番号が表示されました!^^  よくこんな方法がパッとでてまいりますねーー^^;  RowのMinを取るのはなるほど(-o-)なんでございますが、 Ctrl+Shift+Enterって??知りませんでした。 今から検索してまいります。 m(_ _)m  本当に助かりました。ご閲覧いただけてよかったです! まことにありがとうございました!!!

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

敢えてVBAで回答いたします(VBAの名誉のために?) 当方xl2000なので、65536行が最大なのですが、最後の行に該当する値をセットしておいて、下記のコードで200msec未満でみつかりますが、いかがでしょうか。遅くなる種をすべて潰してみたつもりです。なお、PentiumM 1.3Gです。 Public Declare Function GetTickCount Lib "KERNEL32" () As Long Sub test() Dim buf As Variant Dim i As Long, startTime As Long startTime = GetTickCount Application.ScreenUpdating = False Application.Calculation = xlCalculationManual buf = Columns(1).Value For i = 1 To UBound(buf, 1) If buf(i, 1) > 16.5 And buf(i, 1) < 20 Then Debug.Print i Exit For End If Next i Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Debug.Print GetTickCount - startTime End Sub Sub testData() Columns(1).Value = 6 Cells(ActiveSheet.Rows.Count, 1).Value = 17 End Sub

linelan
質問者

お礼

 mitarashi様  どうもありがとうございます!!m(_ _)m ↑絵と名前が一致してらっしゃいますね^^食いたくなってきます。  こんな優良回答を連発でいただけて幸せモノでございますm(_ _)m 時間までチェックしてくださったとのことで、どうもありがとうございます。 100万行強、でございますので200msec×100万÷6万≒3秒/File でございますね。 これが40万ファイルございましてorz(後から後から申し訳ございません) 3sec×400,000/60sec/60min/24h = 13日  ↑これに対し、関数を入れる+少し待機+数字取得 が 早いかどうか、でございますね^^ 今からVBAで組んで比較してみます。前者についてはmitarashi様のコードを そのまま使わせていただきます。  このたびはご親切にアドバイスいただきまして、どうもありがとうございました!! また見かけたらどうぞアドバイスしてやってください! 失礼いたします^^

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

作業列が使えるのなら B1(作業列)に =AND(A1>16.5,A1<21) で、下にコピー C1に =MATCH(TRUE,B:B,0) で、求められる。 VBAでやったほうが速いと思うけどねぇ。

linelan
質問者

お礼

 どうもありがとうございます!! >VBAでやったほうが速いと はい、全ファイル100万行あるんですorz 最大値を求める場合、関数だと「=Max」とするだけで 一瞬ですがVBAだと、、、  したがって、10個以下のセルに関数群を入れてうまくいく 方法を探している私大でございます。 (100万行オートフィルさせるのも少し困難でございます。。。orz)  この度はご親切にどうもありがとうございました!!

linelan
質問者

補足

(お礼後の捕捉になります) すみません、「探している私大でございます」       →「探している次第でございます」^^;  大変失礼いたしました。m(_ _)m

関連するQ&A

専門家に質問してみよう