![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
エクセルのFunctionプロシージャを使って以下のユーザー定義関数を作りたいのですが上手くいきません。
アドバイスお願いしますm(__)m
やりたいこと
エクセルのA列とB列に複数の(たとえば10行の)数字が並んでいます。
各行ごとに 0.5×[A列の値]×[B列の値の二乗]
を算出し、その合計を求めたいです。
別の列(例えばC列)を使って上記の計算式を入力し、その合計を求めればよいのですが
どうしてもFunctionプロシージャを使って1セルだけを使って求めたいのです。
自分はVBA(エクセルマクロ)はあまり詳しくないのですが
色々ネットで調べた結果、以下のようなプロシージャを書いてみたのですが
上手く計算できません。
Function KE(element As Range)
Dim e As Range
Dim m() As Variant
Dim v() As Variant
Dim ans As Integer
i = 0
j = 0
For Each e In element
If i = j Then
m(i) = e.Value
i = i + 1
Else
m(j) = e.Value
j = j + 1
End If
Next e
k = i
i = 0
j = 0
While i < k + 1
ans = ans + 0.5 * m(i) * v(i) * v(i)
i = i + 1
Wend
KE = ans
End Function
もちろん、この形に拘りません
Functionプロシージャを使ってうまく計算できる方法ありましたらご教示お願いします。
No.1ベストアンサー
- 回答日時:
あまり難しく考えない基本形で、
セル範囲ループ版と二次元配列版、2種。
もしもオーバーフローで困るようなことあれば、あらためて相談で。
' ' =ffKE(A1:B10) ' QNo.8312529
Function ffKE(element As Range)
Dim v As Variant
Dim i As Long
For i = 1 To element.Rows.Count
v = v + element(i, 1) * element(i, 2) ^ 2
Next i
ffKE = 0.5 * v
End Function
' ' =ffKE9(A1:B10) ' QNo.8312529
Function ffKE9(element As Range)
Dim mtxV() As Variant
Dim v As Variant
Dim i As Long
mtxV() = element.Value
For i = 1 To UBound(mtxV)
v = v + mtxV(i, 1) * mtxV(i, 2) ^ 2
Next i
ffKE9 = 0.5 * v
End Function
![「エクセルVBAのFunctionプロシー」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/558092_5497eb26598c8/M.jpg)
ありがとうございます!!
どちらもうまく行きました!
本当にありがとうございます。
二つ目の
MtxV() = element.value
の記述は、この記述で、MtxVという配列に
各セルの値が格納されるという認識でよろしいでしょうか?
もし、お時間ありましたらご教示いただけると幸いです。
No.3
- 回答日時:
#2です、変な沼から抜け出せた嬉しさに(言い訳)推敲不足で投稿してしまいました。
最初のFunctionのbufは使用しておらず、消し損ないのゴミです。申し訳ありません。
Function KE(element As Range)
KE = 0.5 * WorksheetFunction.SumProduct(element.Columns(1).Value, element.Columns(2).Value, element.Columns(2).Value)
End Function
No.2
- 回答日時:
VBAを使うまでもなく、配列数式や、SUMPRODUCTの本来の使用法を用いれば、セル一個で算出できます。
下記は、暇つぶしで実用的な意味はありません。
KE2という関数名にしたら、#REF!のエラーになって、はまってしまいました。数字を含むユーザー定義関数名は使えないのでしょうか?調べてみると、KEEEEEE2と8文字以上なら良いらしいです。ご参考まで。
Function KE(element As Range)
Dim buf As Variant
buf = element.Value
KE = 0.5 * WorksheetFunction.SumProduct(element.Columns(1).Value, element.Columns(2).Value, element.Columns(2).Value)
End Function
VBA中でSUMPRODUCTに基本形以外の事をさせるには、Evaluateを用いる必要があるそうです。
Function KEa(element As Range)
Dim buf As String
buf = "0.5*SumProduct(myformula1,myformula2^2)"
buf = Replace(buf, "myformula1", element.Columns(1).Address)
buf = Replace(buf, "myformula2", element.Columns(2).Address)
KEa = Application.Evaluate(buf)
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipse でBASIC認証するには
-
あせんうぶり言語
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
XML、XSLTの適応エラー(IEから...
-
ルート要素ノードが2個ある場合?
-
WebBrowser1.Document.Body.Inn...
-
同じタグ名の項目取得
-
SNMP リンクダウンとノードダ...
-
XPathで途中に名前空間が設定さ...
-
TreeViewの再表示のちらつきを...
-
変数の宣言について
-
C#のDataGridViewにCheckBox
-
C#で使用中のファイルに別のフ...
-
Excel-VBAでXMLの複数ノードの...
-
TreeViewで複数ノードの選択は...
-
XMLのHTMLへの変換 (初心者)
-
VB.NETで最後フォのフォ...
-
XMLとRDFの違い
-
concat関数内でのシングルクォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
順不同・任意のタグ
-
XMLで主キーを自動的に入力する...
-
Eclipse でBASIC認証するには
-
PHPでXMLデータ生成、スキーマ...
-
エクセルVBAのFunctionプロシー...
-
XMLSchemaのデータ型をインポー...
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
バッチファイルでテキストファ...
-
XMLで要素が記述された順番に意...
-
UTF-8でエンコーディングとはど...
-
あるノードリストに、特定の名...
-
google croud にあるファイルを...
-
XML、XSLTの適応エラー(IEから...
-
XPathで途中に名前空間が設定さ...
-
同じタグ名の項目取得
-
xmlファイルが上手にHTMLに変換...
おすすめ情報