アプリ版:「スタンプのみでお礼する」機能のリリースについて

皆様お知恵を拝借させてください


検索用を後ろの数字のみ削除する方法

この下記の条件が成立する方法を教えてください

検索用1=aaa_bbbbbbb_01
検索用2=aaa_bbbbbbb
検索用1=検索用2

=========================
実験した手法
※以下検索用は1と2両方行っている物とお考えください

検索用=Left(検索用,inStrRev(検索用,"_"-1)
数字は消えるが文字列に数字が無いとガッツリ消える

検索用=Left(検索用,Len(検索用)-3
数字は消えるが結局文字列も消えるので・・・

==========================
よろしくお願いいたします

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

  • shiroutosan様の手法は私のレベル不足で活用出来ない模様でした
    申し訳ございません

      補足日時:2019/02/19 15:14
  • 完成いたしましたのでご報告と後の人の為に

    皆様ありがとうございました!

    ベストアンサーはいち早くご回答頂けた上に採用させて頂きましたという理由で選びました

    「皆様お知恵を拝借させてください 検索用を」の補足画像2
      補足日時:2019/02/20 07:52

A 回答 (3件)

検索用1と検索用2どちらを正(マスタ。

検索対象)とするかについてルールがあれば、決定してください。例えば、Len(検索用1)とLen(検索用2)の短い方とか。

ここでは例題のように、検索用2の方が短い前提で、検索用2を正とします。

Left(検索用1,Len(検索用2))とLeft(検索用2,Len(検索用2))
を比較してください。Len関数を一致させているのがポイントです。
    • good
    • 0
この回答へのお礼

有難うございます!
文字数を同じにする事が出来るのですね!

ちなみに検索用1を100列30シート位比較して全部終われば検索用1を1セルずらして〜なので

検索用1a1-maxrowとe1-maxrowまでの10シート分
検索用2がd2-maxrowの30シート分有るので文字列の長さと後ろに00等付いたり付かなかったり・・・
作る人によって変わるというあるあるネタで翻弄されておりました

文字列の長さを右から3文字削った検索用1に合わせて検索用2の文字数を調整する で良いのでしょうか?
早速やってみます

お礼日時:2019/02/19 12:55

ちょっと言葉を挟むようですが、


>検索用=Left(検索用,inStrRev(検索用,"_"-1)
>VBA歴2-3ヶ月

それは、VBAの話ではありませんか?関数に、逆検索の関数はなかったような気がします。
VBAでは、やり方はいくつかありますが、正規表現で数字の部分を検索させるという手がありますね。

Find 検索するけれども、その時に、ワイルドカードを使うなどします。
検索値 [*##*] 
など。このようなワイルドカードで数字が入っているものを探し出し、その後、正規表現で置換をするわけです。質問の求めているものが違うなら、評価はうけないでしょうけれども、正規表現の面白さだけをピックアップさせておきます。

正規表現を使いますね。(\D+)_\d+$ → $1
もしくは、^(\D+)_\d+$ → $1

\D は数字でないもの, $ 末尾, ^ 先頭
もっと複雑なものも可能です。(日本語-オフラインヘルプは入手不可のもよう)

https://docs.microsoft.com/ja-jp/previous-versio …

Sub TestREgExp()
Dim RegEx As Object
Dim intext As String
Dim out_text As String
intext = "あいう_bbbbbbb_0123"  '数値はいくつでも構わない。
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Global = True: .IgnoreCase = False: .MultiLine = True
.Pattern = "(\D+)_\d+$"
outtext = .Replace(intext, "$1") '出力
End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
また知らない知識が増えました!

VBA2ヶ月 Excel関数3か月といったところでしょうか・・・

今回は動くものが出来ましたのでそちらを採用させて頂きました(急ぎでしたので

お礼日時:2019/02/20 07:54

=IF(ISNUMBER(VALUE(RIGHT(検索用,2))),LEFT(検索用,LEN(検索用)-3),検索用)



条件:対象の後ろ2文字を数値化できた(=数字だった)ら、
TRUE:対象の先頭→末尾から4文字目 までを返す
FALSE:対象をそのまま返す

検索用1,2とも出力はaaa_bbbbbbbになります。
OfficeOnlineでは動作確認しました。なお、末尾の数字の文字数が文字列によって異なる場合は使えませんのであしからず。
    • good
    • 0
この回答へのお礼

なるほど!有難うございます

末尾2文字が数字ならばという条件も出来るのですね(VBA歴2-3ヶ月

御二方とも作成してみてからベストアンサー決めたいと思います(どちらも目からウロコでぱっと決めれないので

お礼日時:2019/02/19 13:29

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