EXCELのワークシートに埋め込まれた式を分析するために、式の中のセル参照部分を明確化したいと考えています。

(例:"=A1+A2" ⇒"=[A][1]+[A][2]")
VBAの正規表現で、これを行うにはどう書いたらよいでしょうか?

以下のような条件で考えています。(もっと有効なものがあれば変えていただいて構いません)
1.セル参照部分は、=+*-/()^&によって囲まれているものとします。
2.絶対参照の$は無いものとして処理します。("=$A$1" ⇒"=[A][1]")
3.他シートの参照(Sheet2!A1)はとりあえず無視します。(処理しません)

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/03/15 23:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:an_shoku_panman No.1

回答回数14ベストアンサー獲得回数0

ポイント35pt

間違った解釈でしたら済みませんが、以下の感じで如何でしょうか。

Sub 計算式()

A = Range("A1").Value + Range("B1").Value

B = [A1] + [B1]

MsgBox A & " と " & B

End Sub

id:airplant No.2

回答回数220ベストアンサー獲得回数49

ポイント35pt

ポイントは不要です。

分析するために正規表現で変換とのことですが、最終的にはどのような結果になることを要望されていますでしょうか?


例にあったようなことを正確に行うには相当な場合を考えて正規表現での置換えが必要になります。

"=A1+A2" ⇒"=[A][1]+[A][2]"


もし、式をそのまま落としたいのであれば、下記の手順で簡単にできますが、これでは要望の結果になりませんか?

ツール→オプション→表示タブ→ウィンドウオプションの「数式」をチェック

→画面に表示される。又、テキスト出力すれば、そのまま式で出る。


セルの表現を[]で囲んだ後でどのように活用されるのか、その活用方法が分かればもっとアドバイスできると思います。

もし、後でエディタなどで加工されるのであれば、上記をテキストファイルに落として、=の部分のみをチェックすることで代用できるかも知れません。


既にご存知とは思われますが、参照元・参照先をグラフィカルに矢印で表示してくれる機能(トレース機能)が標準で備わっていますので、そちらを活用するのも手と思います。

ツール→ワークシート分析→参照元のトレース など

又は、ツールバー上で右クリックして、「ワークシート分析」のメニューバーを出す

id:threecourse

どうもありがとうございます。

CTRL+SHIFT+@も、ワークシート分析も実はバリバリ使っております。

説明不足ですみません、

列に項目(例:B列に収益A、C列に収益B、D列に費用A、E列に費用B、F列に損益(F3=B3+C3-D3-E3))

行に経過期間があるようなワークシートです。(前の行を参照したりします。)

大きいものでは70列*200行程度で、式ももう少し複雑です。

上記のようなワークシートを理解・カスタマイズしなくてはいけない機会が時々あるのですが、

その作業を簡略化できればと思っています。

置換した後、さらに[B]=収益A、[C]=収益Bと置換してテキスト化し、理解しやすくすることが第一の目標です。

さらには、そのままVBAに組み替えて、高速化やカスタマイズを行うことが次の目標です。

当然、SALINGERさんがおっしゃるような例外もあり、簡単にはいかないと思っていますので、

ある程度の手作業はやむなしですが。。

ちなみに、For文で式を取得→決め打ち的に置換して分析、のように行ってみたことがあるのですが、

正規表現を使えば一般化できるかなと思って、質問させていただきました。

2009/03/11 22:17:56
  • id:SALINGER
    セルの参照の場合上記の記号以外に、=A1:B1のように「:」もあります。
    =Sheet2!A1は「!」を記号に含めないことで、除外できますが、
    「:」を含めるとSheet2!A1:B1の後の部分だけがマッチしてしまうことになります。
    また、セル参照は英字と数字の組み合わせだけではなく、A:Aとか8:8のようなものも存在します。
    そこらへんが難しくしてるところです。
  • id:airplant
    レスポンス見ました。
    ワークシート分析は既にご存知だったようで失礼しました。

    今回の作業にピッタリなのが「名前」と思います。
    拙作ですが、下記にサンプルがありますので、ご覧下さい。
    http://d.hatena.ne.jp/airplant/20070808


    例えば、B列に収益A、C列に収益B、以下同様・・・
    F列の何行目でも「=収益A+収益B-費用A-費用B」と書いておくだけで、あら不思議、簡単にやりたいことができてしまいます。
    列の場所が変わったら、名前の指す場所を変えるだけです(当然、挿入や削除のときには、何も触らなくても自動で変わります)。
    また、行にも名前が付けられるので、「行の名前 列の名前」で好きに参照できます。
    これで、要望のことができるか試してみるといいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません