質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1568閲覧

Excel VBA 行列の書き出しのための関数が書けません

haruka_1996

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/05/20 09:26

###前提・実現したいこと
整数k,lと1次元配列を入力とし、配列のサイズnを求めた上で、配列に格納されるている値をセル(k,l)からセル(k+n-1,l)まで書き出す関数を実装したいです。
(functionを用います。)

###発生している問題・エラーメッセージ
functionが実際にどのように動いているのか分かりません。
1次元配列をどのように入力すればいいのか分からないです。

###該当のソースコード

Function kadai1(x() As Double) As Double
Dim n, k, l As Integer
Dim i As Integer
Dim a() As Double

n = UBound(x)
ReDim a(1 To n)

For i = 1 To n
a(i) = x(i)
Cells(k + i - 1, l).Value = a(i)
Next i
kadai1 = a

End Function
###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
エクセルVBA
excel vba

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

課題ということでヒントを、、、

  1. functionがどう動いているか

このfunction(関数)は、引数にdouble値の配列が渡されて、戻り値でdouble値の配列を返そうとしています
渡されてきた配列 x を新しい配列 a に入れなおし、a の内容をセルに書きだしています
書き出しが全部終わったら、配列 a を呼び出しもとに戻り値として返しています

(問題点)

・変数 k と l が初期化されていないため、セルに書きだすところでエラーになります
→ k と l に適切な値で初期値を入れましょう

・戻り値が double とされていますが、実際には a という配列を返そうとしているのでエラーになります
→ 配列が戻せるようにfunctionの宣言を修正しましょう

  1. 1次元配列の入力方法

関数 kadai1 の呼び出し方がわからない、ということでしたらこんな感じです

ret = kadai1(x)

これだけでは動きません
x と ret はそれぞれ配列です
その2つの配列をどのように用意すればよいかは考えてください

それではがんばってください

投稿2016/05/20 10:57

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haruka_1996

2016/05/20 12:38

回答ありがとうございます。 functionとはsubを作り、そちらでk,lは初期値を入力しています。 配列を返すのではなく、セルに書き出すことまで出来れば良いと思っています。 考えてもx等の配列の用意の方法が分かりませんでした。(思いついてもfor文とinputboxを用いる方法だけです…) 1次元配列の用意の方法のヒントをもう少し頂けませんでしょうか?
takito

2016/05/20 15:58 編集

つまり・・・呼び出し元の sub で、セルの出力先を指定する k と l 、出力する値の入った配列 x() を用意して、セル出力をするための処理が書かれた関数 Function にそれらを引き渡したい・・・というイメージで、sub側で用意する配列 x() の書き方がわからないということですかね?
haruka_1996

2016/05/21 04:03

おっしゃる通りです。 お教えいただければ幸いです…
haruka_1996

2016/05/21 05:39

解決いたしました。 ありがとうございました。
guest

0

ベストアンサー

整数k,lと1次元配列を入力とし

まずFunctionの引数にkとlと1次元配列(ここでは例示されているx()としましょう)を使う必要がありますね

(functionを用います。)

あとFunctionの戻り値はどうしますか?
結果を例えばBoolean(書き出せたかもしくはエラーで書き出せなかったかなど)で返すようにするのでしょうか?
もし戻り値が不要なら(例えばセルに値(結果)を書き出すだけなら)Subでも済みますから...

例えば上記のような形だと

Function kadai1(ByVal k As Integer, ByVal l As Integer, ByVal x() As Integer) As Boolean 'やりたい処理を書く 'If Errorなら Return False 'Else Return True 'End If End Function

みたいな感じですね

投稿2016/05/20 11:05

編集2016/05/20 11:10
dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haruka_1996

2016/05/20 11:15

回答ありがとうございます。 関数として定義して、他のところで使えるようにするのが目的です。 結果は数字で返します。
dojikko

2016/05/20 11:29

よく理解できていないのですが >結果は数字で返します は何を指しているのですか? この関数は - 指定されたセル(セル範囲)に配列で指示された値を書き出す ものですよね 他のところ(別のワークシートですか?)で使いたいなら、引数で書き出す先のワークシート名を渡してあげる方が、余程良いように思いますが..
haruka_1996

2016/05/20 13:07

結果の部分はこちらの勘違いでした。 大変、申し訳ありません。 先ほどの回答は趣旨にあっております。 戻り値は不要でセルに書き込むだけですが、functionで関数として作らなければなりません。 functionだけでは実行できないので、そのためのsubを作りたいのですが、どのように作れば良いのでしょうか。 k,l,x()をどのように設定すれば良いのかいまいち理解しておりません。 教えていただきたいです…
dojikko

2016/05/20 18:59 編集

FunctionでもSubでも引数の渡し方は一緒です ざっくりと結果を返す必要があるか、ないかと考えてもいいです したがって ``` Sub kadai1の処理(ByVal k As Integer, ByVal l As Integer, ByRef x() As Integer)  Dim i As Integer  i = 0  For Each xItem In x()   Cells(k + i, l).Value = xItem   i = i + 1  Next End Sub Sub kadai1()  Dim x(5) As Integer  x(0) = 3  x(1) = 1  x(2) = 4  x(3) = 9  x(4) = 2  x(5) = 6  Call kadai1の処理(1, 1, x) End Sub ``` な感じでしょうか? あと引数で配列を渡すときはByValではなくByRefでした 失礼しました
haruka_1996

2016/05/21 04:59

回答ありがとうございます。 Sub kadai1() k = 3 l = 3 Dim x(6) As Integer x(1) = 3 x(2) = 1 x(3) = 4 x(4) = 9 x(5) = 2 x(6) = 6 Call kadai10(1, 1, x) End Sub Function kadai10(ByVal k As Integer, ByVal l As Integer, ByRef x() As Integer) As Boolean Dim xItem As Variant Dim i As Integer i = 0 For Each xItem In x() Cells(k + i, l).Value = xItem i = i + 1 Next End Function とやったところ何とか動きました。 しかし、subからfunctionへk,lの値をうまく渡せません。 どうすればいいのでしょうか?
haruka_1996

2016/05/21 05:39

Call kadai10(k, l, x)とすることで出来ました! ありがとうございました♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問