• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:検索して該当するセルのとなりのセルを使い処理したい。)

Excelで検索して処理する方法と最大値の求め方

このQ&Aのポイント
  • 東京と神奈川のセルの隣に入力されている数値を使って処理する方法を教えてください。
  • ヒットしたセルの中で最大値を求める際に0と空白を区別して計算する方法を教えてください。
  • 最大値のあるセルの位置も取得する方法を教えてください。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

不明な変数が多くて、何をしてるか良く解かりませんが、、、 ※1は、わざわざ行番号、列番号に分解する必要も無いです。    s.Offset(0,2).Value ※2も上記と同様で、また、この構文なら j に代入する必要も感じません。 ※3は前の段階で""かチェックしてるので j<>"" は不要でしょう。 ※4 j2は多分最小値なのでしょうが、ループ前に初期化しておかないと意味がありません。 j2 = -999 For Each s In tw2.Range("B" & frow2, tw2.Range("IV" & frow2).End(xlToLeft)) h1 = s.Row i1 = s.Column  If s.Value = f2 Then    If tw2.Cells(h1, i1).Offset(0, 2).Value <> "" Then '※1     j = tw2.Cells(h1, i1).Offset(0, 2).Value  '※2     If j <> "" And j > j2 Then  '※3       j2 = j     End If    End If   End If Next s If j2 = -999 Then   fW2.Cells(e2, "H").Value = "" Else   fW2.Cells(e2, "H") = j2 B2~P2が下記状態とします。 東京,"",-1.5,東京,"",-1.2,神奈川,"",20,東京,"","",東京,"",-0.9 下記で-0.9を表示します。 Sub Test1() f2 = "東京" j2 = -999 For Each s In Range("B2:P2")  If s.Value = f2 Then   If s.Offset(0, 2).Value <> "" Then     j = s.Offset(0, 2).Value       If j > j2 Then j2 = j   End If  End If Next s  MsgBox j2 End Sub こんな書き方もあります。 Sub Test2() Dim r As Range, uR As Range Set uR = Nothing For Each r In Range("B2:P2")  If r.Value = "東京" Then    If uR Is Nothing Then     Set uR = r.Offset(0, 2)    Else     Set uR = Union(uR, r.Offset(0, 2))    End If  End If Next r  MsgBox Application.Max(uR) End Sub

oyasaisanba
質問者

お礼

変数の設定部分を抜いてしまって申し訳ありません。 ですが、Test1の方のマクロを活用して自分のやりたい処理をすることに成功しました。(Test2の方は自分の方でちょっと変えたりしたためかうまくいきませんでした。) 何度もご迷惑をおかけしましたがありがとうございます。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

> tW.Range("B" & fRow) = fR.Offset(0, 1)の部分でエラーが出ます。 ここは ' でコメントアウトしてますのでエラーは出ないハズです。 そちらでどんなコードを書かれているか、どんなデータで処理しているか見えないので原因は解りません。 > どうやったら行、列を数値で取り出せるのでしょう? 少し簡単にしましょう。 For Each ~ Next はコレクションの各要素を処理出来ます。 下記は A1:C3のそれぞれの「アドレス」「値」「行番号」「列番号」を表示します。 Sub aaa() Dim r As Range  For Each r In Range("A1:C3")    MsgBox r.Address & "の値は、" & r.Value & vbCrLf & _     "行は" & r.Row & "で列は" & r.Column  Next r End Sub > 数値の候補が-9,-15,"",-12だとした場合0が最大値になってしまう ん?こちらの環境では下記は -9 を表示しますよ。 Sub bbb()  Range("A1:D1") = Array(-9, -15,"", -12)  MsgBox Application.Max(Range("A1:D1")) End Sub

oyasaisanba
質問者

補足

最初の部分については私のコピーミスです。大変申し訳ありません。どうもFor Each ~ Next自体には問題がないようですがうまくいきません。例えばFor Each s In tW2.Range("B" & fRow2, tW2.Range("IV" & fRow2).End(xlToLeft)) h1 = s.Row i1 = s.Column If s.Value = f2 Then If tW2.Cells(h1, i1).Offset(0, 2).Value <> "" Then j = tW2.Cells(h1, i1).Offset(0, 2).Value If j <> "" And j > j2 Then j2 = j End If End If End If Next s If j2 = -999 Then fW2.Cells(e2, "H").Value = "" Else fW2.Cells(e2, "H") = j2 というようにして(この場合条件に該当するセルの2つとなりのセルに数値が入っているのですが)、そのなかで最大値(-999になるほど値が小さくなることはないため便宜上こうしています)を出そうとしているのですがうまくいきません(該当する条件があるのに反応がない)し、 fW2.Cells(e2 - 1, "H").Value = Application.Max(tW2.Cells(fRow2, "F").Value, tW2.Cells(fRow2, "K").Value, tW2.Cells(fRow2, "P").Value, tW2.Cells(fRow2, "U").Value, tW2.Cells(fRow2, "Z").Value) とやると、やはり該当部分がマイナス値か空白しかないと0を返してきます。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

ここを Else '  tW.Range("B" & fRow) = fR.Offset(0, 1)    For Each r In tW.Range("B" & fRow, tW.Range("IV" & fRow).End(xlToLeft))     If r.Value = "東京" Then MsgBox r.Address    Next r End If とすると、東京を探してアドレスを表示します。

oyasaisanba
質問者

補足

よくわからないのですがうまくいきません。tW.Range("B" & fRow) = fR.Offset(0, 1)の部分でエラーが出ます。rというのは検索範囲内の中でのセルの一つ(?)という意味だと思うのですが、どうやったら行、列を数値で取り出せるのでしょう?また、条件に該当する数値の中で最大値を出してそれを変数に設定する等がしたいのですが、数値の候補が-9,-15,"",-12だとした場合0が最大値になってしまうのですがとにかくこれを何とかしたいです。 やりたいことがうまく説明できていない感もありますが、よろしくお願いします。

関連するQ&A