Excel VBA 質問スレッド №992 (解決済)
functionの戻り値に連想配列が入った配列で返却したい
投稿者 : 初心者の極み 投稿日時 : 2022/09/10(Sat) 09:17:24 OS : Windows 10 EXCEL : Excel 2013
初めて質問させていただきます。
掲題の通り、連想配列が格納されているオブジェクトをfunction内にて戻り値にセットしようとしていますが、
Set getNews = newsDatasの箇所で「コンパイルエラー オブジェクトが必要です。」が発生しています。
ローカルウィンドウからnewsDatasの型を確認するとObject(0 to 11)となっており問題ないと思いますがうまくいきません。
(NewsDataの中の1つを返却するとうまくいきます。)
初心者なりに色々調べてみたのですが解決策が見つからず、ご教授いただけると幸いです。
以上です。
よろしくお願いいたします。
初めて質問させていただきます。
掲題の通り、連想配列が格納されているオブジェクトをfunction内にて戻り値にセットしようとしていますが、
Set getNews = newsDatasの箇所で「コンパイルエラー オブジェクトが必要です。」が発生しています。
ローカルウィンドウからnewsDatasの型を確認するとObject(0 to 11)となっており問題ないと思いますがうまくいきません。
(NewsDataの中の1つを返却するとうまくいきます。)
初心者なりに色々調べてみたのですが解決策が見つからず、ご教授いただけると幸いです。
Function getNews() As Object
' お知らせの取得
' お知らせ数
Dim newsCount As Integer
newsCount = 12
' お知らせコンテンツ数(日付、新着、内容、資料リンク)
Dim newsContentsCounst As Integer
newsContentsCounst = 4
' お知らせ項目
Dim contents As Variant
ReDim contents(newsContentsCounst)
contents(0) = "date"
contents(1) = "new"
contents(2) = "contests"
contents(3) = "link"
' お知らせ範囲
Dim addresses As Variant
ReDim addresses(4)
addresses(0) = "B8:B19"
addresses(1) = "C8:C19"
addresses(2) = "D8:D19"
addresses(3) = "E8:E19"
Dim newsDatas() As Object
For i = 1 To newsCount
Dim newsData As Object
Set newsData = CreateObject("Scripting.Dictionary")
Dim count As Integer
For a = 0 To 3
Dim selectData As Range
Dim address As String
Dim ret
' 範囲を取得
Range(addresses(a)).Select
Set selectData = Selection
address = selectData.address(False, False)
' 値の格納
ret = Selection(i)
newsData.Add contents(a), ret
Next
ReDim Preserve newsDatas(count)
Set newsDatas(count) = newsData
count = count + 1
Next
Set getNews = newsDatas
End Function
以上です。
よろしくお願いいたします。
スポンサーリンク
[返信 1] Re : functionの戻り値に連想配列が入った配列で返却したい
投稿者 : ごん 投稿日時 : 2022/09/10(Sat) 09:52:22
Function getNews() As Object と getNewsは Object型ですが、
Dim newsDatas() As Object と newsDatasはObject型の配列です。
型が違うのでエラーになります
こうしないと
Sub sample()
Dim News() As Object
News = getNews
Stop
End Sub
Function getNews() As Object()
Dim newsCount As Integer
Dim newsData As Object
newsCount = 12
Dim newsDatas() As Object
Dim count As Integer
count = 0
For i = 1 To newsCount
Set newsData = CreateObject("Scripting.Dictionary")
ReDim Preserve newsDatas(count)
Set newsDatas(count) = newsData
count = count + 1
Next
getNews = newsDatas
End Function
[返信 2] Re : functionの戻り値に連想配列が入った配列で返却したい
投稿者 : 初心者の極み 投稿日時 : 2022/09/10(Sat) 10:16:59
>>Object型の配列
なるほどです。
戻り値の型が違っていたのですね。
解決しました。
ごんさん早々のアドバイス誠にありがとうございます。
>>Object型の配列
なるほどです。
戻り値の型が違っていたのですね。
解決しました。
ごんさん早々のアドバイス誠にありがとうございます。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2026-04-05 10:52:09 )