• ベストアンサー

VBAで決められた記号より前の文字を消去するには?

Excel上に以下のような情報が記載されているとします。 a1*b1 a2*b1 c3*d2 f4*w2 このような場合において、VBA等で*の前にある文字を全て消去(以下参照)する事は可能でしょうか? ※VBA実行後 b1 b1 d2 w2

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>実際には*が付いていない行もあります。 先ほどの回答に誤りがありましたので、それも修正しました。 =RIGHT(A1,LEN(A1)-IF(ISERROR(FIND("*",A1)),0,FIND("*",A1))) とか、 =MID(A1,IF(ISERROR(FIND("*",A1)),1,FIND("*",A1)+1),LEN(A1))

VAN613
質問者

お礼

どうもありがとうございます!問題解決しました☆

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

aに文字列があるとして p=InStr(a、"*") を実行 pが0(存在しない)でないことを確かめて b=Right(a,len(a)-p)

noname#140971
noname#140971
回答No.2

Instr、Right を使えばOK。 この場合は、NO1さんの回答と同じ要領。 で、ここでは別のやり方を・・・。 [イミディエイト] ? CutStr("aaa*bbb", "*", 1) aaa ? CutStr("aaa*bbb", "*", 2) bbb ? CutStr("aaa//bbb//ccc", "//", 3) ccc このように、CutStr関数は、区切り文字で区切られた指定位置の文字列を抜き出します。 ということで、文字列抜き出し専用の関数を用意するのも手。 <標準モジュール> Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function

VAN613
質問者

補足

すみません、私の質問に不備がありました。 例文ではExcel上に記載されている情報は全て*が付いていますが、実際には*が付いていない行もあります。 お手数をおかけしますが、以上を踏まえまして再度教えて頂けませんでしょうか?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

関数で可能です。 =RIGHT(A1,FIND("*",A1)-1)

VAN613
質問者

補足

すみません、私の質問に不備がありました。 例文ではExcel上に記載されている情報は全て*が付いていますが、実際には*が付いていない行もあります。そのような場合、今回教えて頂きました方法ですと、*が無いセルについては#VALUE!と表示されてしまいます。 お手数をおかけしますが、以上を踏まえまして再度教えて頂けませんでしょうか?

関連するQ&A