Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : その他)
セルに入っている数式を元に、数式の範囲を変更したい
投稿日時: 20/09/29 17:32:48
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
セルに入っている数式を元に、計算範囲を変更したいと思っています。
 
現状、下記の計算式が入っており、範囲の末端は変わらず、末端を含めて3行を計算範囲に変更するといったことを数式が入っている対象セルがどこにあっても、できるようにしたいと思っています。
 
=ROUND(AVERAGE(B$4:B10),2) ←この場合だと=ROUND(AVERAGE(B$8:B10),2) になるようにしたい
 
   ↓任意のセル
Range("**").FormulaR1C1、Range("**").Formulaで該当セルに入っている数式を取得し、leftやmid、instrを使い、絶対参照だった時と相対参照だった時を考慮して・・・といろいろと想定すると手詰まりになってしまった為、こちらに書き込みをした次第です。
(ユーザーが将来的に該当セルの計算式をどのような変更を加えても良いようにです。)
 
どなたかアドバイスをいただけると幸いです。
 
宜しくお願い致します。
       
 

回答
投稿日時: 20/09/29 18:50:29
投稿者: WinArrow
投稿者のウェブサイトに移動

変更の規則性はあるのか?
対象とするセルは、1つなのか?複数なのか?
条件を提示してほしい。
 
1つだけの提示では、回答しようがない。
 
置換というコマンドで対応できると思いますが・・・・

回答
投稿日時: 20/09/30 08:36:35
投稿者: simple

>ユーザーが将来的に該当セルの計算式をどのような変更を加えても良いようにです。
気持ちが分からぬではないですが、
それを汎用的なものとして実現することは、構文解析というジャンルに相当し、
ひとつのアプリケーションを開発する以上の技術を必要とします。
とても、こうした掲示板で簡単に要望にお応えできるようなものではありません。
これは理論的にも、正規表現でも実現できる範囲を超えていることが知られています。
どうしてもということなら、相当の金額を出して外注してください。
 
ご指摘のとおり、むやみに一般化せずに、
文字列(.Formulaプロパティの値)の置換程度にとどめておくことをお薦めします。

投稿日時: 20/09/30 10:17:29
投稿者: Alice87

WinArrow様、simple様
 
早速の回答ありがとうございます。
 
simple様のコメントより、こちらに書き込みをした方法ではかなり難しいことが分かった為、違う方法をとることにしました。
考え方を変える後押しをして下さり、ありがとうございました。無駄に悩まずに済みました。
 
--------------------------------------------
(この掲示板で書き込んだ数式で、参照させているセルを見に行き、そこで計算の範囲開始行を可変にすることにしました。
↓このようなデータが計算元だったので、該当月と該当通貨に合致する行番号と列番号を取得し、取得した変数を元に計算式にあてこみました。)
 
↓このような計算式
Application.WorksheetFunction.Round(Application.WorksheetFunction.Average(Range(Cells(ruikei_kiten_row, currency_col), Cells(quarter_row, currency_col))), 2)
 
ruikei_kiten_rowの部分を別途計算して別の変数にして上記計算式にあてこみ。
 
年/月    US$    EUR    HK.$    
2020/3    108.81    119.52    14.04    
2020/4    106.84    115.99    13.79    
2020/5    107.50    119.07    13.87    
2020/6    107.71    121.02    13.90    
2020/7                                    
2020/8                                    
2020/9