• ベストアンサー

VBA 特定の文字を含むとき

今excelにてvbaを作っています。初心者です。 ある特定の文字が含まれる場合にある値を隣のセルに返す という構文なんですが、 TPという文字が含まれる場合1 PTという文字が含まれる場合2 PTとかTPではなくPだけが含まれる場合3 PTとかTPではなくTだけが含まれる場合4 (例) K L 4-A-P  3 という構文を作りたいんですが出来なくて。。。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.5

正規表現を使う方法があります。 Function IncludeChar(ByVal Text As String) As String Dim RegExp Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = True RegExp.IgnoreCase = True '★大文字小文字を区別する時はFalse RegExp.Pattern = "TP" '== パターン1 :"TP" If RegExp.Test(Text) Then   IncludeChar = "1"   Exit Function End If RegExp.Pattern = "PT" '== パターン2: "PT" If RegExp.Test(Text) Then   IncludeChar = "2"   Exit Function End If RegExp.Pattern = "P" '== パターン3: "P" If RegExp.Test(Text) Then   IncludeChar = "3"   Exit Function End If RegExp.Pattern = "T" '== パターン4: "T" If RegExp.Test(Text) Then   IncludeChar = "4"   Exit Function End If End Function 【使用例】 For Y = 1 To 5   Cells(Y, 2).Value = IncludeChar(Cells(Y, 1).Value) Next 正規表現は文字比較において英大文字小文字の区別は独自に指定し、 Option Compare 句の影響を受けません。また、独特のパターンを 指定することもできます。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

pontama
質問者

お礼

ありがとうございます。 何とかできそうです。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

#3です。 >申し訳ございません。 >説明不足で とんでもないです。 私の無用な心配だったようですので、スル~して下さい。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>4-A-P  3 例えば、 4-T-P とか言うケースは、ないって事で良いのでしょうか。 (この場合だと4+3=7?)

pontama
質問者

補足

申し訳ございません。 説明不足で K2のセルに 4-A-PとPが含まれていれば L2のセルに 3 を返すということです。

すると、全ての回答が全文表示されます。
  • mindatg
  • ベストアンサー率48% (110/227)
回答No.2

ごめんなさい、No1は間違いです。 Public Sub hoge()  Dim strCell As String  Dim lRet As Long  strCell = Range(A1).Value  If InStr(1, strCell, "T") > 0 Then ' Tが含まれる   ' TPが含まれる   If InStr(1, strCell, "TP") > 0 Then    lRet = 1    GoTo Finaly   End If   lRet = 4  ElseIf InStr(1, strCell, "P") > 0 Then ' Pが含まれる   ' PTが含まれる場合   If InStr(1, strCell, "PT") > 0 Then    lRet = 2    GoTo Finaly   End If   lRet = 3  End If Finaly:  Range(B1).Value = lRet End Sub

pontama
質問者

お礼

上記ありがとうございます。 でも動かないんです。。。。。 J2の中のPTを読み取ってK2に値を返したいのですが。

pontama
質問者

補足

すみません解決しました!! 続きですみませんが 返す際数値ではなくて文字の場合はどうしたらよいでしょうか?

すると、全ての回答が全文表示されます。
  • mindatg
  • ベストアンサー率48% (110/227)
回答No.1

大文字小文字を無視なんでしょうか? 大文字小文字をきっちり見るなら、compare引数を指定するなり・・。 以下はだいぶ省略してますが、A1セルの値を読んで、B1セルに結果を渡す関数です。 Public Sub hoge() Dim strCell As String Dim lRet As Long strCell = Range(A1).Value ' A1セルの内容を変数に格納 If InStr(1, strCell, "T") > 0 Then ' Tが含まれる ' TPが含まれる If InStr(1, strCell, "TP") > 0 Then lRet = 1 Exit Sub End If lRet = 4 ElseIf InStr(1, strCell, "P") > 0 Then ' Pが含まれる ' PTが含まれる場合 If InStr(1, strCell, "PT") > 0 Then lRet = 2 Exit Sub End If lRet = 3 End If '結果をB1セルへ Range(B1).Value = lRet End Sub

すると、全ての回答が全文表示されます。

関連するQ&A