プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

A 早単

A 単

というデータがあります。

このデータはData1,Data2の変数にそれぞれ入ってます。

IF 文をつかって

IF If data Like ”A" & "*[!早単]" Then

  処理1

End IF

IF If data Like ”A" & "*[!単]" Then

  処理2

End IF

と二つに処理をわけたいのですが、

実行するとデータ A 早単
     データ A 単
の場合でも処理1、処理2を実行して
二重に実行してしまいます。

これを別々に処理に分けることは
可能なのでしょうか?

宜しくお願いします。

質問者からの補足コメント

  • 回答ありがとうございます。

    dataはdata1かdata2の
    どちらかを入れる変数のことです。

    説明不足ですいません。

    データがA 単の場合、

    処理1、処理2のif分を
    どちらも通ってしまい困っています。
    処理2だけ通したいのです。

    宜しくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/08/03 12:51
  • 回答ありがとうございます。

    すいません、likeの条件式
    間違ってました
    !マークなしでお願いします。

    likeの後の文字Aの部分は
    本当は変数を入れたいので
    like 変数A & ✳︎ 【早単】
    とするつもりだったので
    こんな書き方をしました。

    データがA 単の場合に
    処理1.2 どちらも通るので困ってます。
    処理2のみ通したいです。

    宜しくお願いします。
    likeの後の文字Aの部分は
    本当は変数を入れたいので
    like 変数A & ✳︎ 【早単】
    とするつもりだったので
    こんな書き方をしました。

    データがA 単の場合に
    処理1.2 どちらも通るので困ってます。
    処理2のみ通したいです。

    宜しくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/08/03 13:04
  • 質問のlikeの条件式の
    !マークなしで
    お願いします。

    間違ってましたすいません。

      補足日時:2015/08/03 13:06
  • お世話になります。

    説明不足で申し訳ありません。

    月の仕事の出勤の予定から
    月の予定業務時間を計算する
    ものを考えてます。

    出勤 1日目 定時出勤で夜担当ありの
    場合は出勤簿に定 担と
    入力します。

    出勤 2日目 定時出勤で早上がりの
    夜担当ありの場合は出勤
    簿に定 早担と入力します。

    業務時間

    定 担 13時間

    定 早担 11時間

    この場合は私の考えたlike演算子
    では定 早担のデータが定 担の
    ifの処理に入り13時間足されて
    しまいます。

    どのようにlike演算子の
    条件変えたら正常に11時間足される
    ようになるのかが分からないので
    困っているところです。

    宜しくお願いします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2015/08/04 12:54

A 回答 (5件)

if 「A」 then


 「A」が成立したときの処理
elseif 「B」 then
 (「A」が不成立で)「B」が成立したときの処理
elseif 「C」 then
 (「A」「B」ともに不成立で)「C」が成立したときの処理
...

と、 elseif を使うことで、「条件を順番に調べて、最初に成立したものだけ実行」ということはできます。



ただ、条件はそれで正しいですか?
IF If data Like ”A" & "*[!早単]" Then
で 、if が2つ続いている、dataというData1でもData2でも無い変数(?)になっている、というのは入力間違いでしょうか?
[!早単] という表現は 「早単 という文字列ではない」 という意味ではなく、 「 早 でも 単 でも無い1文字」という意味ですが、それが期待する答えなのでしょうか?

どういう判定をさせたいのか、一度見直しましょう。
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

like文じゃなく、instr文を使用し
解決することができました。

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

お礼日時:2015/09/09 21:19

こんにちは。


わざわざ、私の書いたことに、返事を付けていただきありがとうこざいます。

>定 担.... 13時間

>定 早担.... 11時間

例:
A   B   C
1  定 担  13
2  定 早担 11

こういう場合は、より条件の細かい方を先にするという方法を使いますが、以下のLike演算子のマッチング・パターンそれぞれでは厳密な区分けは出来ていません。便宜上、より条件の多いものから抜き出すということで、ふるい分けができるだけです。

Sub UsingLikeOperation()
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
 If Trim(Cells(i, 2).Value) Like "*早担" Then
   Cells(i, 3).Value = 11
 ElseIf Trim(Cells(i, 2).Value) Like "*担" Then
   Cells(i, 3).Value = 13
 Else
  '別な条件
 End If
Next i
End Sub

もちろん、以下も同様に、正しく演算子のマッチング・パターンは出来てはいません。

Sub UsingLikeOperation2()
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
 If Trim(Cells(i, 2).Value) Like "[!早]担" Then
   Cells(i, 3).Value = 13
 ElseIf Trim(Cells(i, 2).Value) Like "*早担" Then
   Cells(i, 3).Value = 11
 Else
  '別な条件
 End If
Next i
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

like文じゃなく、instr文を使用し
解決することができました。

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

お礼日時:2015/09/09 21:19

一言、よこやり、いれさせていただきます。



>likeの後の文字Aの部分は
>本当は変数を入れたいので
>like 変数A & ?? 【早単】
>とするつもりだったので

どう考えても、レストランで調理後に出てきたオーダーの食べ方を聞いているだけで、一体、何の注文をしているのか、聞いていません。そういう状態なら、いくらでも話をひっくり返せます。

ご質問者さんは、Like演算子が得意なわけではないから、お聞きになっているわけですよね。

でも、何を判定させて分岐させたいのかは、書かれていません。その一例でも分からない限りは、私なら、答えの書きようがないと思うのです。

>A 早単
>A 単
質問に出されていた内容は変わって、このAは変数だと言うわけです。

どういう文字列を判定で分けたいのか、ということです。

回答者側は、その内容に対して、その規則性を見いだせるのかできないか、ということです。

それに、「早単」が末尾に来るのか、末尾は「早」か「単」のどちらかなのか、「早単」という並びなのか、一言もご質問者さんが触れていないのに、構文などできるはずがありませんね。
この回答への補足あり
    • good
    • 0

たとえば



Var = "A"
If Data Like Var & "*早単*" Then
MsgBox "処理1"
ElseIf Data Like Var & "*単*" Then
MsgBox "処理2"
Else
MsgBox "処理3"
End If
    • good
    • 0

EXCEL VBAのLIKEは正規表現ではないみたいですね


それでも
「Like ”A" & "*[!早単]"」だと「Like ”A*[!早単]"」となるので
おかしくないですか?せめて「Like ”A [!早単]*"」的な?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!