• 締切済み

関数の中に後から$を一括で入れる

100列、300行くらいの表に IF(J7="","",IF(OR(AND(J7>=$X$13,J7<=$Y$13),AND(J7>=$X$14,J7<=$Y$14)),"◎","")) というような関数が入っています。この、J7や$X$13、$Y$13、$X$14、$Y$14などは行や列によって参照先が異なります。で、J7にあたる部分を$J7としたい(行や列によっては$M8とか$T13とか変わります)ので、置換で一括変換したいのですが、(カッコ→(カッコ$に置換とやろうとしてもできません。また、,カンマ→,カンマ$に置換もできません。これらを一気に解決する方法はないでしょうか? マクロならできますでしょうか?

みんなの回答

  • Nobu-W
  • ベストアンサー率39% (724/1831)
回答No.4

一括は難しいかと>< ですが・・・ http://www.relief.jp/docs/001990.html 参考になりますか?

参考URL:
http://www.relief.jp/docs/001990.html
  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.3

作ってみました。 アルファベットの後に数字が来ればその前に$を付けるプログラムです。 アルファベットの後の数字を探すのに、正規表現を使いました。いろいろ考えたのですが、これが一番簡単。 但し完全ではありません。 Excel にはLOG10 やHEX2BIN など、アルファベット・数字の混在関数が存在します。これにも$ を付けてしまい、エラーになります。 めったに使わない関数なので使っていないだろうと勝手に想像しました。 使い方ですが、変換したい範囲を指定をしてマクロを実行して下さい。 ' Option Explicit ' Sub Macro1() '   Dim RegExp As Object   Dim IRange As Range   Dim Formula As String   Dim Matches As Object   Dim Idx As Integer   Dim First As Integer '   Set RegExp = CreateObject("VBScript.RegExp")   RegExp.Pattern = "[A-Z]+\d+"   RegExp.Global = True '   For Each IRange In Selection     Formula = IRange.Formula     Set Matches = RegExp.Execute(Formula) '     For Idx = Matches.Count To 1 Step -1       First = Matches(Idx - 1).Firstindex       Formula = Left(Formula, First) & "$" & Mid(Formula, First + 1)     Next Idx     IRange = Replace(Formula, "$$", "$")     DoEvents   Next IRange   Set RegExp = Nothing   Set Matches = Nothing End Sub

honeybeans
質問者

お礼

できました! わざわざ作っていただいてありがとうございました。

回答No.2

> 100列、300行くらいの表 この規模、お好きですね(笑)。 さて。 根本的に式を見直してみてはいかがですか? というのが考えうる最良のアドバイスだと思うのですが・・ そこにある程度の規則性を見いだせれば、 VBAを使ってできないことはないでしょうし、 確固たる規則性があるのであれば、ワークシート関数でも可能でしょう。 ただし、 > 行や列によって参照先が異なります。 > 行や列によっては$M8とか$T13とか変わります ってことは、規則性はほぼない、ということでしょう。 なので、かなり難しいですよ。 そもそも、セルの位置によってコロコロ変わる式なのに 「絶対参照」したいという意味がよくわからなかったりします。 可能性があるとすると、  ・「J」 ⇒ 「$J」 に置換  ・(置換したい列全体を選択して)   「$J」 ⇒ 「$*(お好きな列番号)」  に置換 という2段階での置換でしょうか。 まぁこれも「同一列は同一列を参照」という規則性があるのが前提です。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>J7にあたる部分を$J7としたい(行や列によっては$M8とか$T13とか変わります)ので、置換で一括変換したいのですが、(カッコ→(カッコ$に置換とやろうとしてもできません。 変換対象のセル番地が曖昧なので推測ですが、あなたの考え方は身勝手です。 J7、J8、J9等を$J7、$J8、$J9等に置換することも一括でできません。 何故ならJ7とJA7やJB7を区別してJ7のみを$J7に変換することができないからです。 「=IF(J7="","",IF(OR(AND(J7>=$X$13,J7<=$Y$13),AND(J7>=$X$14,J7<=$Y$14)),"◎",""))」に対して検索する文字列を「(」とし、置換後の文字列を「($」にすると次のような数式に書き換わります。 「=IF($J7="","",IF($OR($AND($J7>=$X$13,J7<=$Y$13),AND($J7>=$X$14,J7<=$Y$14)),"◎",""))」 従って、数式として成り立ちませんのでエラー表示されるでしょう。 >また、,カンマ→,カンマ$に置換もできません。 前述と同じ理由で数式が成り立たないと思います。 >マクロならできますでしょうか? VBAでプログラムすれば可能と思いますが前述のように論理を誤ると同様なエラーになる可能性があります。

関連するQ&A