
VBAで、商と余りを返す整数割算のユーザー定義関数を書こうとしています。セルA1に割られる数、B1に割る数が書いてあり、C1とD1に「=xdiv("A1:B1")」をCtrl+Shift+Enterで入力します。C1に商、D1に余りを返すようにしたいと思ってます。
以下のように書いてみたのですが、戻り値の書き方がどうもよくわかりません…
Function xdiv(ByRef d() As Integer) As Integer
.............
End Function
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんにちは。
Function Xdiv(arg As Variant) As Integer()
'配列出力の方法
Dim Divd As Double '被除数
Dim Divsr As Double '除数
Dim ret(1, 0) As Integer
If TypeName(arg) = "Range" Then
Divd = arg.Cells(1)
Divsr = arg.Cells(2)
ElseIf TypeName(arg) = "Variant()" Then
Divd = arg(1)
Divsr = arg(2)
End If
ret(0, 0) = Divd \ Divsr
ret(1, 0) = Divd Mod Divsr
Xdiv = ret()
End Function
>C1とD1に「=xdiv("A1:B1")」をCtrl+Shift+Enterで入力します。
正確には、この式をC1に入れて、次に、範囲をD1にまで伸ばしてから、Ctrl + Shift + Enter で確定します。念のため、解除の仕方は、同じく範囲を選択してから、F2 を押してから、Ctrl + Enterです。
なお、これは、\, Mod を使っていますから、Long型以上の解は出てきません。また、二つ以上のセルを入れても、最初のセルと次のセルしか引数として使われません。
回答ありがとうございます。
ElseIf TypeName(arg) = "Variant()"
により{=Xdiv({523,3})}という書き方にも対応できるということですね。勉強になりました。
No.2
- 回答日時:
Public Function xdiv(a As Long, b As Long)
Dim ret(2)
Dim q As Long, r As Long
q = Fix(a / b)
r = a - b * q
ret(0) = q
ret(1) = r
xdiv = ret
End Function
'この場合、望むような結果になるのは、横方向です
回答ありがとうございます。
以下の内容で解決することができました。
エクセル側
C1,D1セル {=xdiv(A1:B1)}
VBA側
Public Function xdiv(ar As Variant) As Variant
Dim ret(2) As Variant
xdiv = Array(Int(ar(1) / ar(2)), ar(1) Mod ar(2))
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
Excel 例A(1+9) のように番地の...
-
エクセル オートフィルタで絞...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
excelの特定のセルの隣のセル指...
-
数式を残したまま、別のセルに...
-
エクセルの一つのセルに複数の...
-
対象セル内(複数)が埋まった...
-
Excelでのコメント表示位置
-
複数のセルのいずれかに数字が...
-
Excelで住所を2つ(町名迄と番...
-
EXCEL VBA セルに既に入...
-
エクセルの書式設定の表示形式...
-
【Excel】 セルの色での判断は...
-
EXCELのセルの中の半角カンマの...
-
Excelで数式内の文字色を一部だ...
-
エクセルで、複数の参照範囲を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
excelの特定のセルの隣のセル指...
-
枠に収まらない文字を非表示に...
-
エクセルの書式設定の表示形式...
-
数式を残したまま、別のセルに...
-
【エクセル】IF関数 Aまたは...
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
Excelで、「特定のセル」に入力...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
EXCEL VBA セルに既に入...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excelで数式内の文字色を一部だ...
-
エクセルのセルの枠を超えて文...
-
エクセル オートフィルタで絞...
-
Excelでのコメント表示位置
-
連続しないセルから最小値を引...
おすすめ情報