Excel (一般機能)

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

 
(Windows 10 Pro : Microsoft 365)
計算式が勝手に中括弧で括られてしまいます
投稿日時: 22/12/02 10:24:46
投稿者: アブサン

こんにちは。お世話になります。
 
ある自作アドインを使用しているのですが
アドインの計算式をセルに入れると ={function(1, A1)} のように
勝手に中括弧で括られてしまいます。
 
計算式の戻り値は文字列 String になっています。
計算式は Fx から入れています。
 
中括弧は配列数式を表していると思うのですが
配列数式と判断されるようなことは何もしていないつもりです。
 
結果は正しく返るのですが、旧形式のxlsで保存しようとすると
以下のメッセージが表示されます。
この中括弧が原因ではないかと思うのですが、外す方法がわかりません。
 
「このブック内の一部のセルには、こぼれたか、または今後スピルされる数式が含まれて
います。これらの数式は、レガシ配列式に変換され、以前のバージョンのExcelでは、
ディメンションをスピルしたり変更したりしません。」
 
中括弧が自動でつく理由や、対処方法をお教えいただけると助かります。
よろしくお願いします。

回答
投稿日時: 22/12/02 16:45:42
投稿者: んなっと

例えば
 
  A B
1 41  
2 37  
3 44  
4 31  
5 18  
6 33  
7 25  
 
Function Func(r As Range)
  Dim v()
  Dim i As Long, j As Long
  ReDim v(1 To r.Rows.Count, 1 To r.Columns.Count)
  For i = 1 To r.Rows.Count
    For j = 1 To r.Columns.Count
      Select Case r.Item(i, j).Value
      Case Is < 20
          v(i, j) = "えぇ.."
      Case Is < 30
          v(i, j) = "え?"
      Case Is < 40
          v(i, j) = "え。"
      Case Else
          v(i, j) = "ええ"
      End Select
    Next j
  Next i
  Func = v
End Function
 
として
 
B1
=Func(A1:A7)
とすると動的配列が有効な環境ではspill機能により以下のようになります。
 
  A    B
1 41  ええ
2 37  え。
3 44  ええ
4 31  え。
5 18 えぇ..
6 33  え。
7 25   え?
 
問題はここからです。
上のブックを古いバージョン(期限切れ?)のExcelで開くと、
{=Func(A1:A7)}のように配列数式として表示されてしまいます。
その環境でうっかり保存してしまうと...
その後spill機能がある環境で開いたり保存したりしても
{=Func(A1:A7)}の表示のままで、もとの=Func(A1:A7)には戻らないと思います。
 
その場合の回答
Ctrl+/ 同時押しでB1:B7を選択、Deleteで削除してから再度=Func(A1:A7)と入力しましょう。

回答
投稿日時: 22/12/02 16:50:45
投稿者: 半平太

>以下のメッセージが表示されます。
>この中括弧が原因ではないかと思うのですが、外す方法がわかりません。
 
実験結果では、逆ですけどねぇ。。

{=SUM(A1:A3*1)} とカッコ付きなら警告は出ない。
 =SUM(A1:A3*1)  とカッコ付きだと警告される。

行  _A_  _B_  _C_
 1    1        6 ← 数式セル
 2    2          
 3    3          

 
なので、アドインの計算式が
これに該当する数式と看做されているのでは?
 ↓
>今後スピルされる数式が含まれています。
>これらの数式は、レガシ配列式に変換され、
 
解決策でなくて済みません。

投稿日時: 22/12/02 16:53:01
投稿者: アブサン

んなっと様、ご回答ありがとうございます。
 
謎なのが、引数にも戻り値にも配列になるような指定がないのですよ。。。
こんな↓感じのメソッドです。
 
 Function Func(cd As Integer, data As String) As String
 
ずっと調べていたのですが、つい先ほど「@」を式の先頭につけると旧型式「.xls」でもエラーにならないことがわかりました。
 
  例: =@Func(1, A1)
 
「@」は逆に配列数式指定している気がするのですが。。。
 
んなっと様の方法と、上記方法があることが判明いたしましたので、解決とします。
ありがとうございました!!