Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8247 / 13644 ツリー ←次へ | 前へ→

【34351】≧4 と比べる en 06/2/1(水) 8:29 質問[未読]
【34353】Re:≧4 と比べる Statis 06/2/1(水) 9:16 発言[未読]
【34356】Re:≧4 と比べる en 06/2/1(水) 10:02 回答[未読]
【34357】Re:≧4 と比べる Statis 06/2/1(水) 10:21 発言[未読]
【34368】Re:≧4 と比べる やっちん 06/2/1(水) 12:04 発言[未読]
【34416】Re:≧4 と比べる en 06/2/2(木) 9:47 発言[未読]
【34417】Re:≧4 と比べる やっちん 06/2/2(木) 10:08 発言[未読]
【34418】Re:≧4 と比べる en 06/2/2(木) 10:26 発言[未読]
【34419】Re:≧4 と比べる やっちん 06/2/2(木) 10:39 回答[未読]
【34420】Re:≧4 と比べる en 06/2/2(木) 10:56 質問[未読]
【34421】Re:≧4 と比べる やっちん 06/2/2(木) 11:09 発言[未読]
【34426】Re:≧4 と比べる en 06/2/2(木) 11:57 発言[未読]
【34427】Re:≧4 と比べる やっちん 06/2/2(木) 12:57 発言[未読]

【34351】≧4 と比べる
質問  en  - 06/2/1(水) 8:29 -

引用なし
パスワード
   A列  B列
≧4.0  1
≧3.0 2
≧2.0 3

と書かれています。
やりたいことは、A列と値を比べて、B列の結果を返したい
なので、Content_R を4とすると当てはまるのが≧4なので
結果は1を返すのが正しいのですが、どのように書いたらいいか
分かりません。

マクロでは
Content_R = 4
  For i = 33 To 38
    If CStr(Cells(i, 1)) = Content_R Then
      AAA = Cells(i, 3)
      Exit For
    End If
  Next
と書いてもダメなんですよね・・

【34353】Re:≧4 と比べる
発言  Statis  - 06/2/1(水) 9:16 -

引用なし
パスワード
   ▼en さん:
>A列  B列
>≧4.0  1
>≧3.0 2
>≧2.0 3
>
>と書かれています。
>やりたいことは、A列と値を比べて、B列の結果を返したい
>なので、Content_R を4とすると当てはまるのが≧4なので
>結果は1を返すのが正しいのですが、どのように書いたらいいか
>分かりません。
>
>マクロでは
>Content_R = 4
>  For i = 33 To 38
>    If CStr(Cells(i, 1)) = Content_R Then
>      AAA = Cells(i, 3)
>      Exit For
>    End If
>  Next
>と書いてもダメなんですよね・・

試されましたか?

1行目は分かりますが2行目3行目はなぜそのような数値がかえってくるのでしょうか?

A列  B列
≧4.0  1
≧3.0  2 →ここです
≧2.0  3 →ここです

【34356】Re:≧4 と比べる
回答  en  - 06/2/1(水) 10:02 -

引用なし
パスワード
   ▼Statis さん:
すみません。記述間違えです
数多くの行があり、その中で対応している値を探します。
なので、お決まりでもありません。

A列  B列
≧4.0  1
<4.0  2
<3.0  5
の時もあれば
>6.0  1
≧5.0  2
≧4.0  8

【34357】Re:≧4 と比べる
発言  Statis  - 06/2/1(水) 10:21 -

引用なし
パスワード
   こんにちは
私が求めている回答ではないですね。
>やりたいことは、A列と値を比べて、B列の結果を返したい
上記で正しければ「1」正しくないの場合は何をB列に転記するのですか?
レイアウトを見ると色々な数値がありますがそれはどのように決めているのですか?
参考までにコードをUpしておきますので、
あとはそちらでコードを変更して下さい。


Sub test()

Dim Content_R As Long, i As Long
Content_R = 4
For i = 33 To 38
  If CLng(Mid(Cells(i, 1).Value, 2)) = Content_R Then
    Cells(i, 2).Value = "正しい"
  Else
   Cells(i, 2).Value = "正しくない。"
  End If
Next

End Sub

【34368】Re:≧4 と比べる
発言  やっちん  - 06/2/1(水) 12:04 -

引用なし
パスワード
   ▼en さん:
こんにちは。
こういうことしたいのでしょうか?

Sub Test()

  Dim st As String
  Dim i As Long
  Dim n As Double
  
  n = 2 '比較する値
  For i = 33 To 38
    st = Cells(i, "A").Value
    st = Replace(st, "≧", ">=")
    st = Replace(st, "≦", "<=")
    st = Replace(st, ">", ">")
    st = Replace(st, "<", "<")
    st = Replace(st, "=", "=")
    st = "=(" & n & st & ")"
    If Evaluate(st) Then
      MsgBox Cells(i, "B") '該当あり
      Exit For
    End If
  Next
End Sub

【34416】Re:≧4 と比べる
発言  en  - 06/2/2(木) 9:47 -

引用なし
パスワード
   ▼やっちん さん:
おはようございます。
回答ありがとうございます。
すっごく助かりました。
そこで、また一つ悩みが・・
""とかかれていないセルがありました。

A列  B列
0    5
>=1   4
>=2   1
このような場合、やっちんさんの公式でやると
st = "=(" & n & st & ")"
の時に  = "=(00)" となります。
本来なら0=0にしたいのですが・・・

【34417】Re:≧4 と比べる
発言  やっちん  - 06/2/2(木) 10:08 -

引用なし
パスワード
   ▼en さん:
「=0」
とセルに入れれば動きます。
並びから見ても等号を入れるのが自然に見えますけどね。
どうしても「=」の場合は数値のみの入力にしたいのですか?

書き込みを削除して質問し直さなくても、追加していけばいいですよ。

【34418】Re:≧4 と比べる
発言  en  - 06/2/2(木) 10:26 -

引用なし
パスワード
   ▼やっちん さん:
そうです。=の場合は数値のみ、セルに書かれてるようなので
それに対応して、マクロを組みたいと思ってます

【34419】Re:≧4 と比べる
回答  やっちん  - 06/2/2(木) 10:39 -

引用なし
パスワード
   ▼en さん:
数値かどうかの判断を入れました。

Sub Test()
  Dim st As String
  Dim i As Long
  Dim n As Double
 
  n = 0 '比較する値
  For i = 33 To 38
    st = Cells(i, "A").Value
    st = Replace(st, "≧", ">=")
    st = Replace(st, "≦", "<=")
    st = Replace(st, ">", ">")
    st = Replace(st, "<", "<")
    st = Replace(st, "=", "=")
    If IsNumeric(st) Then
      st = "=(" & n & "=" & st & ")"
    Else
      st = "=(" & n & st & ")"
    End If
    If Evaluate(st) Then
      MsgBox Cells(i, "B").Value '該当あり
      Exit For
    End If
  Next
End Sub

【34420】Re:≧4 と比べる
質問  en  - 06/2/2(木) 10:56 -

引用なし
パスワード
   ▼やっちん さん
ありがとうございました。
やはり関数をしってると、かなりやりたいことが一文でできるんですね
っでもう一つ課題が出てきました。

A列が数値でない場合
A列
0ヶ月
>=1ヶ月
>=2ヶ月
このような場合、If Evaluate(st) Then でエラーになってしまいます
おそらく、数値でないからだと思いますが。
なにか対策ありますか?

【34421】Re:≧4 と比べる
発言  やっちん  - 06/2/2(木) 11:09 -

引用なし
パスワード
   ▼en さん:
全てのパターンを最初に上げてください。
プログラムは行き当たりばったりで作るものではありません。

A列のデータを何故変更しないのでしょうか?
他人が作ったものなのですか?

【34426】Re:≧4 と比べる
発言  en  - 06/2/2(木) 11:57 -

引用なし
パスワード
   ▼やっちん さん:
そうなんです。行き当たりバッタリでいつも作ってるので
ダメなんですね・・
ではいつもどのように"やっちん"さんは作られてるのでしょうか?


A列のデータは、設計者が固定で作っているものであるので
変更できません。

【34427】Re:≧4 と比べる
発言  やっちん  - 06/2/2(木) 12:57 -

引用なし
パスワード
   ▼en さん:
パターンは全て作成前におさえないと穴だらけになりますよ。
コードにする前に処理を考えるのが先です。
後から簡単に追加修正できると思っていると
全て作り直しになる危険性もあります。

Sub Test()
  Dim st As String
  Dim i As Long
  Dim j As Long
  Dim n As Double
 
  n = 5 '比較する値
  For i = 33 To 38
    st = Trim(Cells(i, "A").Value)
    st = StrConv(st, vbNarrow)
    st = Replace(st, "≧", ">=")
    st = Replace(st, "≦", "<=")
'数値の後の単位を削除
    For j = Len(st) To 1 Step -1
      If Mid(st, j, 1) Like "[0-9]" Then
        Exit For
      End If
      st = Left(st, Len(st) - 1)
    Next
'評価する式を作成
    If st <> "" Then
      If IsNumeric(st) Then
        st = "=(" & n & "=" & st & ")"
      Else
        st = "=(" & n & st & ")"
      End If
    Else
      st = "=False"
    End If
'式を評価
    If Evaluate(st) Then
      MsgBox Cells(i, "B").Value '該当あり
      Exit For
    End If
  Next
End Sub

8247 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free