1列内の任意の複数セルのデータをチェックする関数を
下記のように作成しましたが、
セルにKANSU(A1:A10)と式を入力するとエラーになります。
セルにKANSU("A1","A10")と入力すると正常に機能します。
しかし、後者の方法で入力したものを別のセルに複写すると
全く同じものが複写されてしまい、汎用性がありません。
例えば、右隣のセルに複写した場合は、KANSU(B1:B10)と
変わって欲しいのです。
EXCELの標準関数のように汎用性を持たせるには、どのように
記述すれば、下記の変数 Hajime, OwariにA1、A10といった
範囲データが入力されるのでしょうか。
記
Function KANSU(Hajime, Owari As String) As String
Application.Volatile
・・・・・・
No.1ベストアンサー
- 回答日時:
Rangeオブジェクトを使って解決します。
RangeオブジェクトのCellsコレクションには、指定した領域に含まれるセルが詰まっていますので、その内容をFor Each ~ Nextを使って取得してやればいいです。
サンプル作ってみました。
指定したセルの合計を求めます。
= vbSum(A1:B200)
ってな感じで使ってみてください。
Public Function vbSum(rngData As Range) As Variant
Dim RNG As Range
Dim vntKotae As Variant
For Each RNG In rngData.Cells
vntKotae = vntKotae + Val(RNG.Value)
Next RNG
vbSum = vntKotae
End Function
蛇足ですが、上記の方法は、例えば
=vbSum(A:A)
のように指定した場合は、馬鹿正直にA1:A65536 の範囲を調べてくれます。
このような無駄極まりない処置を減らすために、下記のような処置を行ったりします。
Public Function vbSum(rngData As Range) As Variant
Dim RNG As Range
Dim vntKotae As Variant
Dim lngMaxRow As Long
'領域の最下行を調べる
lngMaxRow = rngData.Worksheet.UsedRange.Rows(0).Row _
+ rngData.Worksheet.UsedRange.Rows.Count
For Each RNG In rngData.Cells
'領域の最下行に達した場合、抜ける
If RNG.Row > lngMaxRow Then
Exit For
End If
'合計を計算
vntKotae = vntKotae + Val(RNG.Value)
Next RNG
vbSum = vntKotae
End Function
不明点とかあれば、補足にてご質問ください。GW中であれば、同日中に回答可能だと思います。
早速の回答ありがとうございました。何分全くの素人で、Rangeを使うのかなと、色々本やHPを物色し試行錯誤し、教えてよGooに頼ることになりました。
よく考えながら、関数に組み込んでいこうと思います。また、つまずいたら援護を
お願いするかも知れませんが、この連休中には、1仕事完成するかなと一安心しています。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) 複数の同じ様式のエクセルデータの任意セルへの入力について 3 2022/04/27 15:00
- Excel(エクセル) IF関数について 5 2023/06/26 00:46
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
対象セル内(複数)が埋まった...
-
【エクセル】IF関数 Aまたは...
-
Excelでのコメント表示位置
-
Excelで数式内の文字色を一部だ...
-
貼り付けで複数セルに貼り付けたい
-
エクセルの一つのセルに複数の...
-
エクセルのセルの枠を超えて文...
-
EXCEL VBA セルに既に入...
-
excelのCOUNTIF関数で、『範囲=...
-
(Excel)数字記入セルの数値の後...
-
セルをクリック⇒そのセルに入力...
-
【Excel】 セルの色での判断は...
-
エクセル オートフィルタで絞...
-
エクセル 足して割る
-
Excel2003 の『コメント』の編...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセルでオブジェクトを常に...
-
複数のセルのいずれかに数字が...
-
枠に収まらない文字を非表示に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
対象セル内(複数)が埋まった...
-
エクセル 足して割る
-
Excelで数式内の文字色を一部だ...
-
貼り付けで複数セルに貼り付けたい
-
Excelでのコメント表示位置
-
セルをクリック⇒そのセルに入力...
-
EXCEL VBA セルに既に入...
-
excelのCOUNTIF関数で、『範囲=...
-
【Excel】 セルの色での判断は...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
(Excel)数字記入セルの数値の後...
-
Excelで、「特定のセル」に入力...
-
エクセルの一つのセルに複数の...
-
複数のセルのいずれかに数字が...
-
excelの特定のセルの隣のセル指...
-
数式を残したまま、別のセルに...
-
ハイパーリンクの参照セルのズ...
おすすめ情報