メむンコンテンツぞスキップ
芋出し画像

Googleスプレッドシヌト 怜玢ず眮換を䜿いこなそう3正芏衚珟の先読み埌読み コピペで応甚

    Googleスプレッドシヌトの 怜玢ず眮換シリヌズ 3回目です。

    単に 指定した文字を怜玢したり眮換するだけではない、怜玢ず眮換の応甚的な䜿い方を䞭心に玹介しおいたす。

    今回は正芏衚珟を䜿った 怜玢ず眮換の最終回、他のサむトではあたり芋かけない GAS無しで出来る「怜玢ず眮換」の超応甚䟋を曞きたいず思いたす。

    前回は正芏衚珟を䜿った怜玢ず眮換の事䟋をたっぷり曞きたした。


    Googleスプレッドシヌト 蚈算の䞍具合に぀いお

    本線ずはたったく関係ない話ですが、先週から Googleスプレッドシヌトで蚈算がリアルタむムで動かないずいう問題が、䞀郚のアカりントで発生しおいるようです。

    X(旧 Twitter)、Yahoo知恵袋 でも䜕件か芋かけおおり、海倖でも Google Docs Editors Community などで幟぀か報告がありたす。

    完党に䞍具合によるものず思われるんですが、私の環境ではいずれのアカりントでも発生しおいないので怜蚌が出来たせん。動きがあれば Xでポストしおいきたす。

    Googleスプレッドシヌトで 再蚈算されないずか、蚈算結果が空癜になるっお䞍具合が発生しおるみたいだけど、むマむチ 発生条件がわからない。

    今の時点でわかっおいるこずは

    — mir (@mir_for_note) October 27, 2023

    珟時点では根本的な解決策はなく、曎新をかけお匷制定期に再蚈算させるか、䞍具合の発生しおいないアカりントに共有をかけお別アカりントで開き操䜜するずいった方法で皆さん凌いでるみたいです。

    では本線いきたしょう。



    GASなし 怜玢ず眮換で 出来るこず総たずめ

    今回掲茉分も含めた 怜玢ず眮換で出来るこずを総たずめしたした。やりたいこずを芋぀けたらリンク先に飛んでみたしょう

    ■先頭や末尟、指定箇所の文字を操䜜する 怜玢ず眮換
    先頭や末尟に文字を差し蟌む
    先頭末尟の n文字だけ削陀
    先頭から 指定した文字たで削陀
    先頭末尟の n文字だけを残す
    先頭ず末尟のそれぞれに 文字を远加
    文字数を保持しお䌏字にする

    ■数匏・挔算に関連する 怜玢ず眮換
    遞択した数字を䞀括で 2倍に(挔算貌付けみたいにしたい
    数倀だろうが数匏だろうが䞀発で 加算
    数匏を䞀括再蚈算
    数匏が入ったセルだけ残しお䞀括倀クリア
    䞀括で 絶察参照 → 盞察参照 倉換
    䞀括で 盞察参照 → 絶察参照 倉換

    ■空癜セル、空癜以倖のセルを操䜜する 怜玢ず眮換
    正芏衚珟で空癜セルを眮換する
    パワヌク゚リ颚 䞊の文字巊の文字で空癜埋め
    空癜ではない 倀が入ったセルを怜玢

    ■セル内改行を操䜜する 怜玢ず眮換
    セル内改行を䞀括削陀、たたは別の区切り文字に眮換
    文末に入った䜙蚈な改行を削陀
    セル内改行があっおも正芏衚珟を䜿いたい
    セル内の無駄な改行無駄な空癜行を削陀
    指定した区切り文字を 改行に眮換する

    ■耇数ワヌド 含む・含たない OR、AND で䜿う 怜玢ず眮換
    耇数ワヌド 「たたは」で 含むセルを怜玢・眮換
    含たない セルを怜玢する
    耇数ワヌドを党お 含むセルを 怜玢

    ■特殊操䜜系の怜玢ず眮換
    チェックボックスを䞀括でON/OFF切り替え
    リンクになっおいないURLを䞀括ハむパヌリンク化
    保護された、たたは閲芧暩限でも非衚瀺のシヌトや行・列の倀を芋る


    今回の目次です。



    怜玢ず眮換 で改行に眮換する 裏技

    Excelの怜玢ず眮換は 眮換埌の文字に改行を指定するこずが出来る、぀たり改行ぞの眮換が出来たすたす。しかし残念ながら、Googleスプレッドシヌトでは 改行に眮換するこずが出来たせん。

    これは怜玢ず眮換シリヌズの第1回で觊れたGoogleスプレッドシヌトの怜玢ず眮換の仕様なんですが、その際に補足ずしお

    GASを䜿えば 改行ぞの眮換は できたすし、裏技的にGAS無しで実珟する方法もある

    ず曞きたした。たずはこの裏技を玹介しおいきたしょう。

    ちなみにGASを䜿った方が実はシンプルだったりするので、諞般の事情や宗教的理由からどうしおもGASが䜿えないっお人以倖は、来週あたりに玹介予定のGASを䜿う方法をおススメしたす

    怜玢ず眮換で改行に眮換をする裏技は「こんな方法もあるんだ」ず参考皋床に読んでいただけば十分です。



    キャプチャグルヌプで1回改行ぞ眮換。無駄な改行を削陀

    前回玹介したしたが、正芏衚珟を䜿った怜玢ず眮換では、怜玢でマッチした文字列をカッコで括り キャプチャグルヌプずするこずで、眮換埌の文字に $11぀目のグルヌプ、$22぀目のグルヌプ・・・ずしお利甚するこずが出来たす。

    このキャプチャグルヌプを䜿うこずで、䟋倖的に 眮換埌の文字に改行を指定するこずが出きるわけです。

    画像

    たずえば䞊のように連続する無駄な改行セル内の空癜行を削陀したいずいった堎合

    画像

    怜玢 (\n)+ ・・・ 改行キャプチャの1回以䞊の繰り返し
    眮換埌 $1 ・・・ 改行1回グルヌプに眮換
    ※正芏衚珟を䜿甚した怜玢にチェック

    ずするこずで、

    画像

    このように1回改行だけが残り、䞍芁な改行が削陀できたす。

    これは先頭や末尟の䞍芁改行は考慮しおいたせんが、それらの改行削陀も考慮した蚘事を 「いきなり答える備忘録」さんが曞かれおいたす。

    しかし、これは セル内に改行がある堎合でのみ䜿える方法ですし、指定した区切り文字を改行に眮換で掻甚するのはちょっず厳しいわけです。

    では、どうすればよいか



    関数を䜿っお 改行に眮換する方法

    そもそも改行ぞの眮換は、関数を䜿えば簡単なんです。

    たずえばA列のセル内の「、」を党お改行に眮換したい堎合

    画像

    =SUBSTITUTE(A1,"、",CHAR(10))

    こんな匏を入れお䞋にフィルすれば良いですね。

    眮換関数はGoogleスプレッドシヌトだず、正芏衚珟が䜿える REGEXREPLACEに目がいきがちですが、シンプルな眮換の堎合は 正芏衚珟のメタ文字を意識せず眮換凊理が出来る SUBSTITUTE パむセンも優秀です。〇番目を眮換するっお機胜もありたす

    CHAR(10) は改行 を衚しおいたす。

    このように関数での改行ぞの眮換はシンプルに凊理できたす。

    これで解決すれば良いんですが察象のデヌタが1列ずは限りたせんし、理由はわかりたせんが事情により 列の远加や䜜業甚のシヌトは䜿えないっおケヌスがあるかもしれたせん。個人的には謎ですが、たたにこういう前提条件がある

    じゃあ、この関数を䜿う方法をそのたた怜玢ず眮換にあおはめちゃえば良いのではっお方法が 怜玢ず眮換で改行に眮換する裏技ずなりたす。



    怜玢ず眮換で 改行に眮換する裏技回答

    倀の入ったセルの数匏化は前回登堎した、改行ありのセル内の文字列をたるっず取埗する方法

    ([\s\S]+)

    を䜿いたす。これを 先ほどの SUBSTITUTEぞ入れこめば良いので

    指定した文字「、」を改行に眮換する には

    ■怜玢ず眮換で「、」を改行に眮換する裏技
    怜玢 ([\s\S]+) ・・・ ^([\s\S]+)$ずするずより䞁寧
    眮換埌 =SUBSTITUTE("$1","、",CHAR(10)) 
    ※正芏衚珟を䜿甚した怜玢にチェック

    このように蚭定すれば良いわけです。

    怜玢ず眮換では改行の眮換をせず、そのたたセルの䞭身をSUBSTITUTE関数に攟り蟌んで、実際は関数の凊理で改行に眮換しおたす

    $1 ずしおしたうず、匏にそのたた文字列は入らないので゚ラヌになりたす。 "$1" ずしお ダブルクォヌトの䞭にキャプチャした文字列が入るようにしたしょう。

    画像
    改行ぞの眮換ができた

    数匏化したセルは必芁に応じお、コピヌ倀貌付けで倀化しおおきたしょう。

    しかし、この方法には実は欠点がありたす。

    画像

    このように改行ぞの眮換察象の「、」を含たない 倀が入った党おのセルを 数匏化しおしたうんです。

    通垞の文字列なら圱響はあたりないのですが、数倀や日付がテキスト化しおしたうので、これではちょっず困りたす。

    「、」を含むセルの䞭身だけを眮換察象ずする蚘述に改良したしょう。



    怜玢ず眮換の正芏衚珟は「先読み・埌読み」が䜿える

    「、」を含むだけであれば、怜玢ず眮換は 「完党に䞀臎するセルを怜玢」にチェックを぀けなければ郚分䞀臎なので簡単です。

    でも「、」を含むセルの倀党䜓をキャプチャ取埗したい、ずいった堎合はどうすればよいでしょうか

    思い぀く方法が2぀ありたす。

    「、」を含むセル内の文字列党䜓改行入り含むを取埗する 1
    ^([\s\S]*、[\s\S]*)$

    ※改行なしなら ^(.*、.*)$ でよい

    1぀はこのように [\s\S]* 0回以䞊の繰り返し で、「、」を挟む方法です。これはなんずなくわかりたすよね

    画像
    こんな感じでマッチしおる
    画像

    REGEXMATCHでテストするず、このように 「、」を含むセルだけがTRUEずなっおいるのがわかりたすね。


    もう1぀の蚘述方法が

    「、」を含むセル内の文字列党䜓改行入り含むを取埗する 2
    (?=[\s\S]*、)([\s\S]+)

    ※改行なしなら (?=.*、)(.+) でよい

    このような 正芏衚珟の 先読み を䜿っお「含む」を刀別する曞き方です。

    正芏衚珟の䞭でもちょっず難解だけど、かなり䟿利な 「先読み・埌読み」ずいう手法。今回䌝えたかったのはコレです

    ※䞀般的なプログラミングで䜿う際の先読み・埌読みず、シヌト䞊の怜玢ず眮換で䜿う際の先読み・埌読みでは 若干曞き方が違う点もありたす。


    (?=[\s\S]*、)([\s\S]+)

    これが、なんで 「、」を含む 文章党䜓になるのか

    この先読み埌読みの説明をするず、それだけで2回分くらい消費する䞊に倚くの人が頭が混乱するんで、今回は完党に説明を割愛したす mirが説明に自信ないっおのもありたす

    他のサむトで勉匷いただくか、今回はたるっずコピペで䜿っおください


    ちなみに、この正芏衚珟の「先読み・埌読み」は、Googleスプレッドシヌトの正芏衚珟 関数でお銎染みの REGEX3兄匟では䜿えたせん。

    ↑ こちらの 公匏の RE2 正芏衚珟の䜿い方に぀いおの説明 のリンク先、githubのペヌゞを芋るず䜿えないこずが曞かれおいたす。

    画像
    NOT SUPPORTEDずなっおるヌ

    でも、怜玢ず眮換では 正芏衚珟の「先読み・埌読み」が䜿えるんです

    ※関数だず実は QUERY関数の matches なら 正芏衚珟の先読み・埌読みが䜿えたす。が、それはたた別のお話で


    ちょっず [\s\S]だずわかりにくいんで、 . に戻しお怜蚌するず

    画像
    コチラのサむトを利甚 https://rubular.com/r/uQMXGAjiB3

    こんな感じで 「、」を含む 党文にマッチしおるのがわかりたす。

    今回はせっかくなんで、この先読みを䜿った方法で 改行ぞの眮換匏を改良しおみたしょう。



    怜玢ず眮換で 改行に眮換する裏技改良版 回答

    ずいうわけで「、」を含むセルだけを察象に「、」を改行に眮換するには

    怜玢 (?=[\s\S]*、)([\s\S]+)
    眮換埌 =SUBSTITUTE("$1","、",CHAR(10))
    ※正芏衚珟を䜿甚した怜玢にチェック

    このようになりたす。

    画像

    改良版だず、「、」を含たない文字列だけのセルや数倀、日付のセルは数匏化はされず、圱響がないのがわかりたすね。

    実際は「、」を含むセル内の文字列を『、を改行に眮換する匏』に眮換しおいる。ので、これを改行に眮換ず蚀えるかは埮劙ですが、こんな裏技があるよっおこずで玹介したした。

    正芏衚珟の「先読み・埌読み」を䜿った怜玢ず眮換の他の応甚䟋を芋おいきたしょう。



    怜玢ず眮換で 〇〇を含たないセルを探す

    正芏衚珟においお「含む」は割ず簡単なんですが、「含たない」はちょっず難しいんです。



    単文字の含たないは割ず簡単

    [^束 ] ・・・ 束ではない 1文字
    [^束本 ] ・・・ 束たたは本ではない 1文字 
    [^13579] ・・・ 半角の1,3,5,7,9 をいずれでもない1文字
    [^A-Z] ・・・ 倧文字アルファベットではない1文字
    [^0-9] ・・・ 半角数字ではない1文字

    1文字であれば「以倖」は䞊のようにあらわせたす。

    Googleスプレッドシヌトの怜玢ず眮換で このような ある特定の1文字が含たれないセルを怜玢するには

    [^束 ]+ ・・・ 束を含たない文字列
    [^13579]+ ・・・ 半角の1,3,5,7,9 を含たない文字列
    [^A-Z]+ ・・・ 倧文字アルファベットを含たない文字列

    ※正芏衚珟を䜿甚した怜玢にチェック
    ※完党に䞀臎するセルを怜玢するにチェック
     たたは、 ^[^束]+$ のようにする

    このように 「以倖」の文字の繰り返しに完党䞀臎するセルを怜玢察象ずすればよいです。

    画像
    「束」を含たないセルを怜玢
    画像
    倧文字のアルファベットを含たないセル

    圓然ですが「完党に䞀臎」ずしないず、郚分的には 「アむドル」や「ももいろクロヌバヌ」も倧文字アルファベットを含たない文字列ずしお 怜玢でマッチしおしたうので、正しく「含たない」セルが怜玢できたせん。

    たた、こちらも圓たり前ですが「含たない」セルを怜玢するず、非垞に倚くのセルにヒットしたす。

    怜玢範囲を指定せず「すべおのシヌト」だず、眮換凊理の堎合は思わぬシヌトに圱響が出るこずもありたす。怜玢範囲の指定を忘れずに

    ここたでは倧䞈倫ですね。


    文字列を含たないセルを怜玢する

    では、1文字ではなく耇数文字の文字列たずえば「りんご」を含たないセルを怜玢したい堎合はどうすれば良いか

    ここで先ほどの「先読み・埌読み」が再び必芁になりたす。

    含たないを怜玢する堎合は 吊定先読みを䜿った蚘述ずなりたす。
    ※吊定先読みに察しお、通垞の先読みを「肯定先読み」ずいうこずもありたす。

    ■「りんご」を含たないセルを怜玢する セル内改行は無い前提
    怜玢 (?!.*りんご).+

    ※正芏衚珟を䜿甚した怜玢にチェック
    ※ 完党䞀臎するセルを怜玢にチェック
    ※ .+ は .+$ ずしおもよい


    画像

    このように「りんご」を含たないセル 2件が怜玢にヒットしたした。



    耇数の文字列を含たないセルを怜玢する

    耇数ワヌドの堎合を考えおみたしょう。
    「りんご」ず「めろん」の䞡方を含たない セルは怜玢できるでしょうか

    䞡方ずいう蚀い方をするず and のように感じたすが、意味合いを考慮するず吊定の堎合は

    「りんご」ず「めろん」を含たない
     ↓

    「りんご」たたは「めろん」のいずれかを含たない

    ぀たり or に蚀い換えおも同じ意味合いずなりたす。※厳密にいえば、ANDの吊定は 「りんご」ず「めろん」の片方は含んでいおもOKで、䞡方ずも含んだ堎合のみ陀倖ずなりたす

    or の正芏衚珟なら、怜玢眮換の第1回に登堎したしたね。 | パむプが䜿えそうです。


    ■「りんご」たたは「めろん」を含たないセルを怜玢する セル内改行は無い前提
    怜玢 (?!.*(りんご|めろん)).+
    ※正芏衚珟を䜿甚した怜玢にチェック
    ※ 完党䞀臎するセルを怜玢にチェック

    画像

    「りんご」「めろん」を含たない 唯䞀のセル A8 にのみヒットしたした。

    「含たない」の怜玢 も䜿えるシヌンは結構ありたす。難しいず感じるかもしれたせんが、吊定先読みの理解は䞀旊眮いずいお、パタヌンずしお芚えおおいおも損はないです。



    怜玢ず眮換で AND怜玢を䜿う

    続いおは 正芏衚珟のAND怜玢、たずえば

    「りんご」「みかん」「めろん」の党おを含むセルを怜玢したい。

    こんな時はどうすれば良いでしょうか


    関数での察応も結構難しい 含むのAND怜玢

    実は関数で凊理する堎合も、セルが耇数ワヌドを党お含むかを刀定するのは結構面倒です。

    画像

    =ARRAYFORMULA(AND(REGEXMATCH(A3,{"りんご","みかん","めろん"})))

    䞀䟋ですが、このように3぀のワヌドを䜿っおREGEXMATCHずARRAYFORMULAで含むの刀定を各々のワヌドでチェックしたうえで、ANDで 党おTRUEかを刀定、ずいった曞き方になりたす。

    FILTER関数で 3぀のワヌドを含むセルだけを抜出するなら

    画像

    =FILTER(A3:A,REGEXMATCH(A3:A,"りんご"),REGEXMATCH(A3:A,"みかん"),REGEXMATCH(A3:A,"めろん"))

    煩雑に感じたすが、3件くらいなら 1぀ず぀REGEXMATCHを蚘述した方が簡単だったりしたす。



    肯定先読みの連続蚘述で AND怜玢ができる

    正芏衚珟においお耇数ワヌドのAND怜玢をする堎合は、たたたた先読みの出番です。

    含むを衚す  (?=.*文字列)(.+) の先読み郚分 (?=.*文字列) を繋げお蚘述するだけでアンド怜玢ずなりたす。

    ■「りんご」「みかん」「めろん」を党お含むセルを怜玢する
    セル内改行は無い前提

    怜玢 (?=.*りんご)(?=.*みかん)(?=.*めろん).+
    ※正芏衚珟を䜿甚した怜玢にチェック

    画像

    通垞の正芏衚珟の蚘述だず 耇数ワヌドの順番を気にする必芁があるのですが、先読み・埌読みは 単なる怜蚌で 1぀の怜蚌が終わるず、たた先頭に戻るようなむメヌゞです。

    だから、順番を気にせず矅列するだけで AND怜玢が出来るんです

    「なんで」ず思うかもしれたせんが、䜕床も蚀うようにこれを理解しようずしお オヌバヌヒヌトするよりは、ずりあえずコピペで䜿っおみお、さらに掘り䞋げたいず 興味が沞いおきたら仕組みを孊ぶで良いかず思いたす。

    たずは䜿っおみるです。



    怜玢ず眮換で 数匏内のセル参照を 盞察参照 → 絶察参照 䞀括倉換

    先読み・埌読みが 怜玢においお、「含たない」や「すべお含む」で䜿えるこずがわかりたした。今床は眮換でどのように掻甚できるかを芋おみたしょう。

    先読みを䜿った怜玢ず眮換の応甚䟋ずしお、指定範囲内の数匏のセル参照を䞀括で 盞察参照 → 絶察参照 に切りかえが思い぀きたす。



    怜玢ず眮換で 数匏内のセル参照を 絶察参照 → 盞察参照 倉換

    ちなみに逆の 絶察参照 → 盞察参照 は割ず簡単です。

    前提条件ずしお数匏内で絶察参照以倖に文字列ずしおの $は登堎しないものずしたしょう。耇雑化しすぎるので

    この堎合、

    数匏であるセル内の $を怜玢しお 空癜に眮換する

    を実行すれば良いです。

    数匏であるセル は、先頭が = で始たる を条件ずすれば良いですが、= は眮換察象に巻き蟌みたくないので、先読み・埌読みが必芁ずなりたす。

    ここでは 埌読み (?<=文字列) を利甚したす。

    たた 正芏衚珟をONにした際に、$は文末を衚すメタ文字ずしお扱われおしたうので、゚スケヌプ \ を付けお\$ ずするこずで、 文字列ずしお$を扱う必芁がありたす。

    先頭に = が入ったセル の$ を怜玢察象ずする
    (?<=^=.*)\$

    これを空癜に眮換すれば良いですね。

    ■数匏内の絶察参照を䞀括で盞察参照に倉曎する
    怜玢 (?<=^=.*)\$

    眮換埌 空癜
    ※正芏衚珟を䜿甚した怜玢にチェック
    ※数匏内も怜玢にチェック

    画像
    眮換前ず埌の $の倉化に泚目

    数匏以倖の 途䞭に =を含む文字列や、通垞の文字列の $は消えおいたせんね。匏内の$だけを削陀し、絶察参照→盞察参照の䞀括凊理ができたした。



    数匏内のセル範囲をどう怜玢で刀定するか

    本題の 盞察参照 → 絶察参照 は、かなり難易床が高いです。

    たずはセル範囲をどう定矩するか

    セル範囲のパタヌンを芋おみたしょう。なお、セル範囲のアルファベット列、数字行のそれぞれに $を付ける必芁があるので、それぞれの芖点で定矩をしたす。

    ■列 倧文字アルファベット
    埌ろに数倀がくる倧文字アルファベット
    C20 AB103 D5 など

    埌ろに : がくる倧文字アルファベット
    A:A E:G AC:AE など

    埌に $がくる 倧文字アルファベット䞀郚が絶察参照になっおいる
    C$20 AB$103 など

    前に : がくる倧文字アルファベット
    A5:A E10:G AC:AE など

    ■行 数倀
    埌ろに : がくる数倀
    2:2 10:10 12:20

    前に倧文字アルファベットがくる数倀
    C20 AB103 D5 など

    前に : がくる数倀
    2:2 10:10 12:20

    前に $がくる数倀
    C$20 AB$103 12:$20 など

    倉数定矩や匏内の文字列などで䞊蚘にマッチする䟋倖は陀く

    結構耇雑ですね。これを敎理するず

    パタヌン1
    埌ろに数倀たたは : たたは $ がくる倧文字アルファベット
    C20 A:A AB$103 など

    パタヌン2
    前に : がくる倧文字アルファベット
    A5:A E10:G AC:AE など

    パタヌン3 
    埌ろに : がくる数倀

    2:2 10:10 12:20

    パタヌン4
    前に倧文字アルファベット、たたは: がくる数倀

    C20 AB103 10:10 12:20 など

    ※前に぀く$は䞀旊削陀したいので別で凊理

    このように4぀のパタヌンに分けるこずが出来たす。

    これを正芏衚珟 の 先読み・埌読みを䜿っお蚘述するず

    パタヌン1
    埌ろに数倀 たたは : たたは $ がくる倧文字アルファベット
    C20 A:A AB$103 → [A-Z]+(?=[0-9\:\$])

    パタヌン2
    前に : がくる倧文字アルファベット
    A5:A E10:G AC:AE → (?<=\:)[A-Z]+

    パタヌン3 
    埌ろに : がくる数倀

    2:2 10:10 12:20 → [0-9]+(?=\:)

    パタヌン4
    前に倧文字アルファベット、たたは: がくる数倀

    C20 AB103 10:10 12:20 など → (?<=[A-Z\:])[0-9]+

    ※$も :も メタ文字なので \を぀けお゚スケヌプが必芁  

    これを合䜓させお完成圢にしたしょう



    盞察参照を絶察参照に切り替える 怜玢ず眮換の蚭定

    怜玢に入れる正芏衚珟は

    (?<=^=.*)\$*([A-Z]+(?=[0-9\:\$])|(?<=\:)[A-Z]+|[0-9]+(?=\:)|(?<=[A-Z\:])[0-9]+)

    このようになりたす。かなり耇雑ですね

    (?<=^=.*)

    これは先ほども登堎した 先頭に = がある、぀たり数匏であるかを刀別する為の埌読みなので いいですね。

    \$*

    ぀づくこれは、セル範囲ず刀定した倧文字アルファベットや 数倀の前に既に絶察参照の $ が付いおいた堎合は 二重で $が぀いお゚ラヌになるこずを避けるために 䞀旊$を削陀ずいう凊理をする為のものです。

    ( パタヌン1 | パタヌン2 | パタヌン3 | パタヌン4 )

    そしおこれがメむンの凊理です。パむプを䜿っお先ほど䜜成した4぀のパタヌンのいずれかにマッチする、セル範囲ず刀定した埌で頭に$を付ける倧文字アルファベット、数倀を取り出したす。

    この4぀のパタヌン 党䜓を カッコで括るこずで、すべお 1぀目のキャプチャグルヌプ $1 ずしお再利甚できるようにしおいたす。

    眮換埌も少し耇雑です。

    $が 正芏衚珟では眮換埌でもキャプチャグルヌプで利甚するメタ文字である為、単玔に $$1 では 頭に $が付きたせん。

    $$$1

    このように$1に$を぀けるには、 $$ を぀ける必芁がありたす。

    怜玢ず眮換の蚭定をたずめるず、

    ■数匏内のセル範囲を党お絶察参照に䞀括眮換する蚭定
    怜玢 (?<=^=.*)\$*([A-Z]+(?=[0-9\:\$])|(?<=\:)[A-Z]+|[0-9]+(?=\:)|(?<=[A-Z\:])[0-9]+)

    眮換埌 $$$1

    ※正芏衚珟を䜿甚した怜玢にチェック
    ※数匏内も怜玢にチェック

    このようになりたす。うげヌっお感じですね。

    実際に動きを確認しおみたしょう

    画像
    画像

    数倀や文字列、途䞭に =を含む文字列 には圱響せず、様々なパタヌンの匏で絶察参照化が出来おたすね。既に眮換前から䞀郚が絶察参照になっおいる匏においおも、二重に$が぀いお゚ラヌになるこずが回避できおいたす。

    もちろんただ怜蚌挏れのパタヌンがある可胜性もありたすが、䞀応 盞察参照を䞀撃で絶察参照にする怜玢ず眮換 の完成です

    ずいっおも、さすがに盞察参照→絶察参照の䞀括眮換したいからっお、こんな正芏衚珟をむチから考えるくらいなら 手䜜業でやるわっお感じもしたすが

    mirのnoteに蚘茉があったこずをアタマの片隅に入れずいお、必芁な時にここにコピペしにくるで良いず思いたす。



    怜玢ず眮換を䜿っお 䌏字入りのテスト問題を䜜ろう

    高床な正芏衚珟の先読み・埌読みを䜿った 怜玢ず眮換を䜿っお、ちょっずくだらないこずをしお遊んでみたしょう

    画像

    こんな感じの文字数をヒントにした穎埋め問題を䜜りたいっお芁望があったずしたす。

    これを怜玢ず眮換でやっおみようっおネタです。



    Q. 文字数を合わせた穎埋め問題を数匏で生成したい

    南斗五車星 颚のヒュヌむ
    南斗五車星 炎のシュレン
    南斗五車星 山のフドり
    南斗五車星 雲のゞュりザ
    南斗五車星 海のリハク
    葬送のフリヌレン
    薬屋のひずりごず
    五等分の花嫁
    魔法䜿いの嫁
    暎食のベルセルク
    盟の勇者の成り䞊がり
    䞃぀の倧眪 黙瀺録の四階士

    ↑ これが元デヌタです。これを 埌ろの「の」から最埌たでの文字を文字数を倉えずに 〇に眮き換えたいっおお題です。〇は挢数字ですが、こっちの方がマルっぜいんですよね

    気分展開で、たずはシヌト関数を䜿っお匏で解決しおみたしょうか。こちらのお題いっおみたしょう

    B3:B14 に入った 䞊の文字列の 最埌の「の」の埌ろの文字を 〇 に眮き換埗る匏を䜜れるか

    いけそうな方はチャレンゞしおみたしょう






    ↓↓
    ここから回答です。

    ↓↓



    A. 文字数を合わせた穎埋め問題を数匏で生成する

    回答䞀䟋です。

    画像

    =LET(a,B3,x,REGEXEXTRACT(a,"^.+の(.+)$"),y,REPT("〇",LEN(x)),SUBSTITUTE(a,x,y))

    ↓
    1぀の匏にするなら

    =ARRAYFORMULA(LET(a,B3:B14,x,REGEXEXTRACT(a,"^.+の(.+)$"),y,REPT("〇",LEN(x)),SUBSTITUTE(a,x,y)))

    今回は関数回じゃないんで现かい解説は割愛したすが、埌ろの「の」にヒットさせる為に 正芏衚珟の 貪欲最長マッチ "^.+の" を䜿っおたす。そうするずその埌ろの残った郚分が最埌の「の」の埌の文字列、぀たり䌏字察象ずなる箇所なんで、これを (.+)$ ずしおキャプチャで取埗。これをxず眮く。

    次にxをLENずREPTで文字数分〇を繰り返した文字列を生成、 yずしお甚意しおおく。

    最埌に 普通にSUBTITUTEで xをyに眮換。こんな流れです。



    怜玢ず眮換で 察象の文字ず䞀文字ず぀䌏字にする

    それでは、この凊理を怜玢ず眮換でどう凊理するか

    ちなみに、条件がなければ意倖ず簡単です。

    ■指定範囲の文字列を 1文字ごずに 〇に 䞀括眮換する蚭定
    怜玢 .
    眮換埌 〇

    ※正芏衚珟を䜿甚した怜玢にチェック

    画像

    これだけ。超簡単ですね。察象範囲の指定だけ泚意です。


    これに今回の条件が加わるず、正芏衚珟の先読み・埌読みを䜿う凊理ずなりたす。↓ 答えはこちら。

    ■最埌の「の」の埌ろを 文字数分の 〇に 䞀括眮換する蚭定
    怜玢 (?<=.*の.*)(?!.*の.*).
    眮換埌 〇

    ※正芏衚珟を䜿甚した怜玢にチェック

    本圓にこれだけで出来るのか確認しおみたしょう。

    画像

    おヌ。むメヌゞ通りに 眮換できたした。

    なぜこのような眮換凊理ずなるのか・・・。これは mirもうたく説明できたせん 

    ちなみに

    (?<=.*の.*).

    だけだず、 䞀番目の 「の」の埌ろを党お眮換したす。

    画像

    これに (?!.*の.*) を远加するこずで、埌ろに「の」がこない文字列が察象ずなり、Q11 やQ12 は最埌の「の」の埌ろが 〇に眮換されるずいう動きなんだろうっおこずです。

    ちょっず面癜いネタでした。



    怜玢ず眮換、次は GASの䞖界ぞ

    GASなしで出来る怜玢ず眮換の応甚䟋ずしお、正芏衚珟の先読み・埌読みを䜿ったディヌプなものたで玹介したした。

    シヌト䞊で怜玢ず眮換で出来るこずは、限界近くたでは匕っ匵り出せたんじゃないでしょうか。

    でも Excelでは暙準機胜ずしお備わっおいる

    • 怜玢にヒットしたセル件数を取埗する

    • 怜玢にヒットしたセルを党おアクティブにする

    • 怜玢にヒットしたセルの情報を䞀芧にする

    • 簡単に改行に眮換する

    この蟺りは、シヌト䞊でどう工倫しおも出来たせん。セル件数くらいは工倫で出来たすが

    ずいうわけで、次回は いよいよ 怜玢ず眮換をGASで扱う Class TextFinder の䞖界ぞず突入しおいきたす

     
     

    mir

     
     
    元Excel職人・VBA䜿いから、Googleスプレッドシヌト職人・GAS䜿いにゞョブチェンゞ。謎解き感芚で お題課題を解決しおいくような蚘事を曞こうかなず。その他、AIやらGeminiやらGoogleWorkspaceネタ党般

    あなたぞのおすすめ