Collectionで複数のRangeを返す関数を作ったところ、
戻り値のCollection要素からRange型の変数に取り出す時にエラーとなる為
デバッガで見たところ、Range型そのものではなくRangeの展開された内容と
思しきものが入ってました。おそらく、Addするときに意図しない型変換が
かかってしまったものと思いますが、これを抑制する方法はありますか?
(写真添付)
もし無理なら、
・要素数可変の1次元配列(リスト構造)で複数のRangeを扱える。
・要素番号の指定により目的のRangeを取得する。
ことが出来れば手段は問いません。
No.2ベストアンサー
- 回答日時:
> 関数のカッコの有無は戻り値を使うか否かの為とあり、
> まったくキツネにつままれたようです。
こちらなどは分かりやすいと思いますが。
VBAにおける括弧()の使い方
http://excel-ubara.com/excelvba4/EXCEL244.html
bonaronさん よい情報源ありがとうございます。
この現象にハマった時、値渡してとして、無理やりRangeの中のデータが、Objectの中に展開されてこんな結果になったのだろう、だから強制的に参照にする方法があれば試してみるのに(最悪ポインター使おうかとも思いました)が、まさかカッコにこんな意味があったとは…目から鱗です。他の言語の類推から、おそらく大した意味は無いだろうと、何と無く文法エラーにならない書き方を選んでました。
とても勉強になりました。
No.1
- 回答日時:
画像が見ずらいので、ご質問の趣旨を勘違いしているかもしれませんが
以下では、Rangeオブジェクトを読み出せている様です。
--------------------
Sub test()
Dim c As Collection
Set c = New Collection
'複数のセルを選択したRangeオブジェクトを3つAddする。
c.Add Range("A1,A3,A5"), CStr(1)
c.Add Range("B2,B4,B6"), CStr(2)
c.Add Range("C3,C5,C7"), CStr(3)
' セルB1,B3,B5が選択される。
test1(CStr(2), c).Select
Set c = Nothing
End Sub
' collectionとkeyを引数に与え対応するItemを返す。
Function test1(ByRef key As Long, ByRef rngs As Collection) As Range
Set test1 = rngs.Item(key)
End Function
確認ありがとうございました。
出来るはずのようですので少し粘ってみました。
こちらのコードはサンプルとは逆で呼び出される側で
CollectionにRangeを積んで呼び出した側でとりだしています。
積むときに
Collection変数.Add (Range変数) '・・・NG
と書いていたものを
Collection変数.Add Range変数 '・・・OK
のようにカッコを外すと正常に積めました。
改めてカッコの有無の意味を調べるためにググってみたのですが関数のカッコの有無は戻り値を使うか否かの為とあり、
まったくキツネにつままれたようです。
Excel 2010です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) VBAで列を削除 3 2023/02/01 11:00
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
このQ&Aを見た人はこんなQ&Aも見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
VBA コレクションに2次元配列を追加して取り出す方法
Visual Basic(VBA)
-
collection型を引数にしたファンクションでコンパイルエラー
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで既に開いている別アプリケ...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBScriptでファイルの日時順(降...
-
UserForm1.Showでエラーになり...
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
エクセルVBAで配列内に空白デー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクト変数またはWithブ...
-
VBScriptでCSVファイルのデータ...
-
ExcelVBAでのNZ関数について
-
ExcelでAccessのテーブルにADO...
-
VBScriptでExcelのグラフを貼り...
-
上下の位置揃えについて
-
Excel VBA ”set xx=nothing” ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
Excelでフィルタをかけると警告...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
VBAからPDFファイルにパスワー...
-
PowerPointVBAでスライドマスタ...
-
EXCEL VBA オートシェイプナン...
-
オブジェクトが見つかりません
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ExcelVBAでのNZ関数について
-
上下の位置揃えについて
-
UserForm1.Showでエラーになり...
-
AccessVBAで「dim dbs as datab...
-
findメソッドの変数について
-
VBScriptでファイルの日時順(降...
-
Excel VBAでWordの複数ファイル...
おすすめ情報