○第131回目 計算式作成のお手伝い(一般的な計算式、究極モドキ2)
今回のテーマは、以下のコーディングに関することです。
1.座標を入力する際に、1回で複数の座標を演算子でつないでいれることができる(この入力内容は計算式としての要件を備えている必要がある)。
2.計算式の途中に、座標を入れることが出来る。途中の座標を修正することが出来る。
1.のポイント
セルの設定の際に、Application.InputBox文のタイプ(Type:=0)として、計算式を指定する(既存のマクロを修正したので、変数名は多少ちぐはぐ)。
その結果の受け入れも、計算式として受け入れる。計算式なので、先頭のイコールがついているため、それを取り除いて使用する。
'座標の設定
セル範囲 = Application.InputBox(Prompt:="使用するセルを指定してください。終了はキャンセルキー。", Default:=in_rrcc01, Left:=10, Top:=2, Type:=0)
If セル範囲 = False Then errflag = 0: Exit Do
Range(in_rrcc0).Formula = セル範囲
in_rrcc2 = Range(in_rrcc0).Formula
in_rrcc2 = Mid(in_rrcc2, 2) =⇒これが入力された座標等の情報
この複数座標等の情報から、次回の基点となる座標を抜出す。これは単独の場合と、コロンがあり範囲指定の場合の二つに分けています。
【単独の場合】
'計算式の入力は必ず座標で終わり、その直前は四則演算子のみとする。これ以外はエラーとする。
p1 = InStrRev(in_rrcc2, "+")
p2 = InStrRev(in_rrcc2, "-")
p3 = InStrRev(in_rrcc2, "*")
p4 = InStrRev(in_rrcc2, "/")
If p1 + p2 + p3 + p4 = 0 Then
in_rrcc01 = in_rrcc2
ElseIf p1 > p2 And p1 > p3 And p1 > p4 Then
in_rrcc01 = Mid$(in_rrcc2, p1 + 1)
ElseIf p2 > p3 And p2 > p4 Then
in_rrcc01 = Mid$(in_rrcc2, p2 + 1)
ElseIf p3 > p4 Then
in_rrcc01 = Mid$(in_rrcc2, p3 + 1)
Else
in_rrcc01 = Mid$(in_rrcc2, p4 + 1)
End If
【範囲指定の場合】
'コロンと最後のカッコを考慮し、座標を切り出す
p1 = InStrRev(in_rrcc01, ":")
If p1 <> 0 Then in_rrcc01 = Mid$(in_rrcc01, p1 + 1)
p2 = InStrRev(in_rrcc01, ")")
If p2 <> 0 Then in_rrcc01 = Left$(in_rrcc01, p2 - 1)
in_rrcc01が次回の基点となるセルの座標です。
2.のポイント
既存の計算式に特殊記号("..")がある場合は、それを入力値に置き換えます。
'..がある場合は、そこを置き換える。
p0 = 0
p1 = InStr(keisansiki, "..")
If p1 = 0 Then
keisansiki = keisansiki & in_rrcc2 =⇒in_rrcc2は入力された座標等の情報
Else
Do While 1 置換え箇所が複数あることがあります
keisansiki = Left$(keisansiki, p1 - 1) & in_rrcc2 & Mid$(keisansiki, p1 + 2)
p1 = InStr(keisansiki, "..")
If p1 = 0 Then Exit Do
Loop
End If
注意点;このマクロで追加・修正した座標は相対座標になっていますので、絶対座標にしたい時は、キーボードによる文字列の追加・修正の際、又は終了後に修正してください。
□質問があります。計算式を修正する時に、計算式が長い場合は、全部が表示できないのではないでしょうか。また、文字数の制限はあるのでしょうか。
=⇒inputboxでの制限文字数は256バイトのようです。それより長いと駄目です。また、ご指摘のとおり、表示幅が小さいため、一覧できない場合があります。
□このマクロは、複雑な計算式の場合に力を発揮するというものだと思いますが、表示できる長さに制約があるということですと、うまくいかないのではないでしょうか。
=⇒確かにご指摘のとおりのことが起こります。その対応として、ヒント的なものをつかんでいます。
□それを早く教えてください。このままではアイデアはいいが…、ということになってしまうのではないでしょうか。
=⇒ご指摘のとおりだと思います。早めに提示できるようにします。
2010年1月2日土曜日
登録:
コメントの投稿 (Atom)

0 件のコメント:
コメントを投稿