• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列から「任意の数字+特定の文字」を探す)

VBAマクロで文字列から特定の条件の部分を探す方法

このQ&Aのポイント
  • VBA マクロを利用して、任意の数字と特定の文字が含まれる部分を文字列から探す方法について説明します。
  • 具体的には、文字列中の「数字 + 特定の文字」のパターンを見つけて分離するコードを作成します。
  • また、見つかったパターンが存在しない場合は分離せずに元の文字列をそのまま利用します。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

参考に Dim myStr As String Dim i As Long, n As Long myStr = "Cells(1,1)=2[-1 " For i = 0 To 9 n = InStr(myStr, i & "[") If n > 0 Then Exit For Next If i > 9 Then MsgBox myStr Else MsgBox Left(myStr, n) End If

fisica
質問者

お礼

ありがとうございます。 >For i = 0 To 9 n = InStr(myStr, i & "[") If n > 0 Then Exit For Next こういう発想を知らず勉強になりました。 大変参考になりました。 助かりましたありがとうございます。

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

その他の回答 (2)

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

基本的に関数ではまず無理という性格の問題と思う。 すでに#1で出ているように、VBA、VBSを使って正規表現に持ち込むか、正規表現を重視しているテキストエディタ(UNIX系が発祥)を使ってできないか考えることになるでしょう。 オフィスはワイルドカード以外は、正規表現のような考え方は、重視していないようで 充実していない。むしろバージョンが進んで退化した?ように思う。ワードの方がまだその考えを取り入れているように思う。 正規表現は、質問者に取って、1夜の勉強で利用可能かどうか疑問がある。 VBAでInstr関数で[の位置は簡単にi判るが、その直後の文字が数字かどうか判定が必要のようだからプログラムを組む必要が出てくる。 ーー その前に、ルールについて しかしその判定のロジックが、質問の説明では不十分ではないか? 数字部分は、むしろ数字というよりも、数であって、-1などは数とするのかな。 6[[-[1[   → 6[[-[1は文章ではどう説明するの? どうだからこうだという説明を文章でしてみてよ。 7-[-1  → 7-[-1 は該当しないというケース例か? もう少し文章で言えばどうなるのか、正確に質問者が思考し、丁寧に表現しないと、むつかしさも大幅に変わる(あるいは不可能という結論になる)と思うよ。回答もミスする。 質問者のレベルでは、データ数(セル数)が少ないなら、多分該当文字箇所を質問者が頭で、判定し、素の箇所に特殊記号を挿入して置き、全セルまとめてその部分以下を捨てる(関数を利用)のが早いと思うよ。

fisica
質問者

お礼

ありがとうございます。 説明不足で申し訳ありません。 "-1"などの場合は"1"だけが対象で、" [ "の直前の一文字が数字という意味でした。

全文を見る
すると、全ての回答が全文表示されます。
  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

「正規表現」を使って、数字を表す「d」または「[0-9]」が何文字か、とか、 ¥[ という正規分布では範囲を示す特殊文字「 [ 」そのものを検索させる、とか、 そうやって行うのが、他の処理系でも使える正規表現をそのまま流用できて書きやすいように思いますよ。 正規表現による文字列マッチング | EXCE(エクセル)のVBA・マクロ http://excel-mania.com/vba/regexp.html VBAで正規表現を利用する(RegExp)|ExcelマクロVBA技術解説 http://excel-ubara.com/excelvba4/EXCEL232.html

fisica
質問者

お礼

ありがとうございます。 正規表現という概念を初めて知りましたので勉強しようと思います。

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

関連するQ&A

  • Exel2003で特定の文字列を含む行の数字を拾う方法

    初めての質問です。失礼があったらすみません。 Excel2003を使用していますが、『特定の文字を含む行の数字を拾って足し合わせていく』というマクロを組みたいと考えています。 例えば、 パンダ 200 コアラ 210 ねずみ 300 パンダ 400 ねずみ 100 といった表であれば、『パンダ』を特定の文字列として指定し、 自動的にパンダの文字列を含む数字「200」と「400」を足し合わせた結果が出力されるようなマクロを組みたいです。 マクロほぼ初心者ですので、コピペで使用できるようなマクロを教えていただけると嬉しいです。よろしくお願いします。

  • 特定の文字を除くVBA

    特定の文字を除くためのVBAについて質問させてください。 あるマクロを実行したときに、インプットボックスを表示させ、 特定の文字や数字を入力します。そして、H列に入力した文字や数字を含まない行にある処理を行いたいと思います。 以下のようにVBAを入力してみたのですが、インプットボックスに入力した文字をうまく除外してくれません。一体どういった書き方が正しいのでしょうか~?! ご教授いただけるととても助かります! よろしくお願いいたします。 message = InputBox("文字を入力して下さい") If Not Cells(行, H).Value Like "*" & message & "*" Then 処理

  • エクセル VBA 特定の文字列

    エクセル VBA 特定の文字列 A列に、様々な文字列があるとします。 そのうち、りんごと書かれている行のみを別シートに書き出すマクロを教えてください。 お願い致します。

  • A列に特定の文字と数字があればその行を削除

    A列には大半が文字が入力されており特定の文字"自分"と一部数字があればその2,3,4行を削除し以下のように行を詰めたいのですがどなたかVBAコードの解る方お願いします。   A  B  C    1 鈴木 あ い     2 自分 う え       3 123 お あ    4 368 え う 5 江藤 え う    ↓   A  B  C 1 鈴木 あ い 2 江藤 え う

  • EXCELで任意の文字列に特定のハイパーリンクを指定する方法

    EXCELで任意の文字列に特定のハイパーリンクを指定する方法を探しています。 セルに特定の文字が入っていた場合に 指定した固定のurlをハイパーリンクで指定する事は 可能でしょうか。 例 セル 「ヤフー」 リンク先 「​http://yahoo.co.jp​ 」

  • 特定の文字列を削除

    こんにちは perlで特定の文字列からその後ろをすべて 削除したいのですが、うまくできなくて質問します。 Ex)123.12abc   ⇒123.12 012.123abc   ⇒012.123 123.1234|| ⇒123.1234 上記のようなデータの少数点までの数字の後ろにabc、||、半角、全角スペースなど文字列があります. 少数点までの数字の後ろの文字列すべてを削除したいですが、 特定の文字列からその後ろにある文字列全てを指定する方法(正規表現)はありませんでしょうか? どうかご存知の方、教えてください!! よろしくお願いいたします。

  • VBA 文字列に関して

    現在 A22のセルに入力された文字列をボタンを押せば ばらばらにしてA22のセルから順番に入れるマクロを作りました (例)A22のセルに ”こんにちわ”の文字列が入っている場合 ボタン押下   ↓ A22のセル⇒こ B22のセル⇒ん C22のセル⇒に D22のセル⇒ち E22のセル⇒わ になる。 不思議なことに数字を16文字以上いれてボタンを押し文字を分離すると入力していない文字、数字が入ってしまいます。 数字だけこういう現象が発生してしまいます。 例えば "1111111111111111"と入力して文字を分離した場合 1.11111111111111E+15と個々のセルに格納されます。 原因がわかる方、教えて頂けないでしょうか? 以下がコードです。宜しくお願い致します。 Private Sub CommandButton1_Click()   Dim one As String   Dim myString As String   myString = Cells(22, 1)   numString = Len(Cells(22, 1))   If Len(myString) <= 50 Then    For i = 1 To Len(Range("A22").Value)      one = String(1, myString)      Cells(22, i) = one      myString = Replace(myString, one, "", 1, 1, vbTextCompare)    Next i   End If End Sub

  • 正規表現で任意の文字列が含まれない文字列の取得

    VB6/VBAでお願いします。 <tr> <td>あいうえお</td> <td>かきくけこ</td> </tr> ここで、<td>と</td>に挟まれた文字列を取得しようとするのですが、 ABCとXYZ両方が取得できます。任意の文字列を含まない指定はどう すればいいでしょうか? この場合、「きくけ」を含まない「あいうえお」を取得したいと思い ます。

  • エクセル 特定文字列のある列の削除と保存

    こんにちは いつもお世話になっています。 エクセル2010です 1行目に文字列が入力されています。 (1)1行目に特定文字列を含む列を削除するマクロ。 (2)1行目に特定文字列を含む列だけを残して、他はすべて削除するマクロ を教えてください。 2つ質問するのが不適当ならどちらか一方でも構いません。 指定したい文字列は複数ありますので「文字列A、文字列B、・・・」等で追記できる形だと助かります。フォーマットが決まっているので指定文字列を頻繁に変えることはありません。 特定行を削除するマクロはネット上でヒットしたんですが、列は見つかりませんでした。 マクロ記録で、文字列検索、列削除をしましたが、連携のさせ方がわかりません。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Rows("1:1").Select Selection.Find(What:="あ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Columns("A:A").Select Selection.Delete Shift:=xlToLeft End Sub

  • Excel 任意の列の特定の行のみ値の取得

    書籍とサイトで教えていただいた説明などを見ながら、ExcelのVBAでセル内のデータの操作について勉強中ですが、タイトルのようなことをやる場合のオブジェクト式の選び方がわかりません。 よろしくお願いします。 例えば図のようなデータが入った"Sheet1"があり、行数、列数は様々なのですが、やりたいことは ・A列にエラーコード(ここでは"9999"または特定文字列)、空行、0が入っている行(ピンク色がついたセルのある行)は無視する。 ・任意の列がコピー元(ここでは「A列=コード」「B列=商品名」「E列=価格」で、上記に該当しないセルが対象 ・そのセルの値のみ取得し、"Sheet2"のA~C列に上から順に(上詰めで)「値」のみをはりつけたい Dim i As Long Worksheets("Sheet1").Select Rows(1).Copy Worksheets("Sheet2").Range("A1") For i = 2 To Range("A65536").End(xlUp).Row If Cells(i, "A") = 9999 And IsNumeric(Range("A" & i)) Then この記述ではこのデータ操作ではエラーを変えすのですが、 根本的な「任意の列の特定の行のみの値の取得(と他シートへの複写)」の概念がわかっていません。 正しく動作する記述において、なぜそのオブジェクト式を採用するのかも含めて教えていただければと思います。 よろしくお願いします。

MFC-L2750DW両面印刷できない
このQ&Aのポイント
  • Windows11にアップデートした際、MFC-L2750DWでの両面印刷ができなくなりました。
  • 問題の解決方法を探している方へ、MFC-L2750DWの両面印刷トラブルに関する解説と対処方法をご紹介します。
  • MFC-L2750DWの両面印刷ができない場合、Windows11の設定を確認し、必要なドライバーのインストールを行ってください。
回答を見る

専門家に質問してみよう