Excel VBA 質問スレッド №2039 (未解決)

UBOUNDエラー

投稿者 : ru     投稿日時 : 2024/10/31(Thu) 12:04:37     OS : Windows 10     EXCEL : 未指定

対象者シートから10列目の番号
年度シートから12列目の番号が一致したら
対象者シートに転記したい
(対象者シートの一致した番号の行に)
対象者シートの10列の番号まで


※のところでエラーが出ます












Sub Sample1()

Dim SearchRange As Range '検索範囲格納
Dim KeyItem     As Range '検索値
Dim MyAray      As Variant '検索範囲の配列
Dim Myitti     As Variant '検索範囲の配列
Dim i As Long

Dim ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = Worksheets("対象者")
    Set ws2 = Worksheets("年度")



Set SearchRange = ws2.Range(ws2.Cells(3, 12), ws2.Cells(Rows.Count, 12).End(xlUp)) '検索範囲
Set KeyItem = ws1.Range(ws1.Cells(3, 10), ws1.Cells(Rows.Count, 10).End(xlUp)) '検索値

MyAray = KeyItem '配列格納
Myitti = SearchRange
For i = LBound(MyAray) To UBound(MyAray) '格納した配列をループ
※ここで ”9”インデックス有効範囲にありません。

    If MyAray(i) = SearchRange Then '検索ワードに一致したら取得
    
      KeyItem.Offset(0, -8) = SearchRange.Offset(0, 10)
    
    End If

Next i


End Sub

スポンサーリンク
[返信 1] Re : UBOUNDエラー
投稿者 : らたたた     投稿日時 : 2024/10/31(Thu) 12:15:40
それは、MyArayにセルをセットしただけで配列になってないから

[返信 2] Re : UBOUNDエラー
投稿者 : ru     投稿日時 : 2024/10/31(Thu) 12:49:00
■[返信 1] らたたたさん(2024-10-31 12:15:40)の記事
> それは、MyArayにセルをセットしただけで配列になってないから

具体的なコードを教えてください。

[返信 3] Re : UBOUNDエラー
投稿者 : ごんぼほり     投稿日時 : 2024/10/31(Thu) 13:03:12
KeyItemセルの数が1の時に配列になりません
MyAray = KeyItem '配列格納
の部分を

If KeyItem.Cells.Count = 1 Then
MyAray = Array(KeyItem.Value)
Else
MyAray = KeyItem.Value
End If

のようにセルの数に応じて分岐します

[返信 4] Re : UBOUNDエラー
投稿者 : jindon     投稿日時 : 2024/10/31(Thu) 13:15:28
■[質問] ruさん(2024-10-31 12:04:37)の記事

> 対象者シートから10列目の番号
> 年度シートから12列目の番号が一致したら
> 対象者シートに転記したい
> (対象者シートの一致した番号の行に)
> 対象者シートの10列の番号まで


> ※のところでエラーが出ます

> Set SearchRange = ws2.Range(ws2.Cells(3, 12), ws2.Cells(Rows.Count, 12).End(xlUp)) '検索範囲
> Set KeyItem = ws1.Range(ws1.Cells(3, 10), ws1.Cells(Rows.Count, 10).End(xlUp)) '検索値

> MyAray = KeyItem '配列格納
> Myitti = SearchRange
> For i = LBound(MyAray) To UBound(MyAray) '格納した配列をループ
> ※ここで ”9”インデックス有効範囲にありません。

常に2次元配列にする手もあります。

1) MyAray = KeyItem.resize(,2).value '配列格納(2次元配列)
2) If MyAray(i, 1) = SearchRange Then '検索ワードに一致したら取得

[返信 5] Re : UBOUNDエラー
投稿者 : dama     投稿日時 : 2024/12/05(Thu) 14:43:01
セル範囲(Range)を取り込んだ場合、以下のような挙動をします
・1列や1行の一次元データの場合でも、二次元配列として取り込まれる
・Rangeが単体の場合は配列にならず、単一の変数となる(今回は関係ないです)

今回のケースでは
UBound(MyAray)
ではなく
UBound(MyAray,1)
の形で行う必要が出てきます

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

ステータス  :

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




( 処理日時 : 2024-12-08 00:02:48 )
タイトルとURLをコピーしました