Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8738 / 13644 ツリー ←次へ | 前へ→

【31421】配列(行列)計算をマクロで行いたいのですが… あんこ 05/11/20(日) 10:58 質問[未読]
【31422】Re:配列(行列)計算をマクロで行いたいの... よろずや 05/11/20(日) 11:16 発言[未読]
【31426】Re:配列(行列)計算をマクロで行いたい... とまと 05/11/20(日) 14:50 回答[未読]
【31446】Re:配列(行列)計算をマクロで行いたい... あんこ 05/11/21(月) 16:04 質問[未読]
【31455】Re:配列(行列)計算をマクロで行いたい... kobasan 05/11/21(月) 20:48 発言[未読]
【31463】Re:配列(行列)計算をマクロで行いたい... とまと 05/11/22(火) 8:35 回答[未読]
【31475】Re:配列(行列)計算をマクロで行いたい... あんこ 05/11/22(火) 13:39 お礼[未読]
【31476】Re:配列(行列)計算をマクロで行いたい... あんこ 05/11/22(火) 13:40 お礼[未読]

【31421】配列(行列)計算をマクロで行いたいので...
質問  あんこ  - 05/11/20(日) 10:58 -

引用なし
パスワード
   いつもお世話になっております。

配列(行列)計算のマクロ記述(番地表示)について教えていただけないでしょうか?

例えば、A1からC3までなにか数字が入っていまして、その配列(行列)の逆行列をA5からC7までに表示したいとします。

Sub Macro1()
  Range("A5:C7").Select
  Selection.FormulaArray = "=MINVERSE(R[-4]C:R[-2]C[2])"
End Sub

以上で表示されるのですが、今行いたいことは、この最初の配列の範囲が事前には決まっていないケース(A1から始まって、配列の終わりがC3になるかF6までか決定していない)のマクロ記述です。

最初の配列の範囲は取得できたのですが、それをマクロで記述する際の"=MINVERSE(R[*]C[*]:R[*]C[*])"の記述方法が分かりません。

また、この*に文字などを記入した場合には、.FormulaArrayと相性があわないようでマクロが走ってくれません。

どのようにすればよいか、教えて頂けないでしょうか?
宜しくお願い致します。

【31422】Re:配列(行列)計算をマクロで行いたい...
発言  よろずや  - 05/11/20(日) 11:16 -

引用なし
パスワード
   >また、この*に文字などを記入した場合には、.FormulaArrayと
>相性があわないようでマクロが走ってくれません。

どうやったのか書くと、あなたのレベルが分かりますので
回答が付きやすいですよ。

【31426】Re:配列(行列)計算をマクロで行いたい...
回答  とまと  - 05/11/20(日) 14:50 -

引用なし
パスワード
   こんにちは。逆行列がどんなものか理解してないですけど
関数を貼り付けるならこんな書き方でどうですか?

Sub test()
 
  Dim rowA As Long
  Dim colA As Long
  Dim ad As String
 
  With Range("A1").CurrentRegion
    rowA = .Rows.Count
    colA = .Columns.Count
    ad = Cells(rowA, colA).Address(0, 0)
    .Offset(rowA + 1).FormulaArray = "=MINVERSE(A1:" & ad & ")"
  End With
 
End Sub

【31446】Re:配列(行列)計算をマクロで行いたい...
質問  あんこ  - 05/11/21(月) 16:04 -

引用なし
パスワード
   ▼とまと さん:
ありがとうございます。

教えていただいた内容に関して、再度ご質問させて頂けないでしょうか?

rowA、colAにて参照した配列は、別シート(仮にシート1とします)に表記されていまして、その配列の逆行列をまた違うシート(同じくシート2とします)に出力したいのですが、その場合にシート2の出力結果が1箇所のみとなってしまいます。

出力範囲は、A1からcells(rowA,colA)の範囲になるようにするにはどのようにすればよろしいでしょうか?

毎回質問の仕方が下手でお手数をおかけして申し訳ありません。
宜しくお願い致します。

【31455】Re:配列(行列)計算をマクロで行いたい...
発言  kobasan  - 05/11/21(月) 20:48 -

引用なし
パスワード
   皆さん 今晩は。

>参照した配列は、別シート(仮にシート1とします)に表記されていまして、その配列の逆行列をまた違うシート(同じくシート2とします)に出力したいのですが、

これを、よく理解してないのですが。
別のやり方ですが、こんなのでどうでしょう。

Sub test()
Dim vntA, vntB
Dim n As Integer

  vntA = Range("A1").CurrentRegion.Value
  vntB = Application.MInverse(vntA)
  n = UBound(vntA, 1)
  '
  '---------------ActiveSheet(Sheet1)のA11から貼り付け
  Range("A8").Resize(n, n) = vntB
  '
  '---------------Sheet2のA1から貼り付け
  Sheets("Sheet2").Range("A1").Resize(n, n) = vntB
End Sub

【31463】Re:配列(行列)計算をマクロで行いたい...
回答  とまと  - 05/11/22(火) 8:35 -

引用なし
パスワード
   おはようございます。

関数で貼り付けるならこんな感じかな?


Sub test3()
 
  Dim rowA As Long
  Dim colA As Long
  Dim ad As String

  With Worksheets("sheet1").Range("A1").CurrentRegion
   rowA = .Rows.Count
   colA = .Columns.Count
   ad = .Cells(rowA, colA).Address(0, 0)
   Worksheets("sheet2").Range("A1").Resize(rowA, colA).FormulaArray = _
   "=MINVERSE(Sheet1!A1:" & ad & ")"
  End With
 
End Sub

【31475】Re:配列(行列)計算をマクロで行いたい...
お礼  あんこ  - 05/11/22(火) 13:39 -

引用なし
パスワード
   ▼とまと さん:

ありがとうございます!
無事貼り付けることが出来ました。

これからもお手数をおかけすると思いますが、
ご指導のほど宜しくお願い致します。

【31476】Re:配列(行列)計算をマクロで行いたい...
お礼  あんこ  - 05/11/22(火) 13:40 -

引用なし
パスワード
   ▼kobasan さん:

ありがとうございます!
いつも本当に助かります。

これからも宜しくお願い致します。

8738 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free