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 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型の配列

なるほどです。

戻り値の型が違っていたのですね。
解決しました。

ごんさん早々のアドバイス誠にありがとうございます。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2026-04-05 10:52:09 )
タイトルとURLをコピーしました