Excel VBA 質問スレッド №2039 (未解決)
UBOUNDエラー
投稿者 : ru 投稿日時 : 2024/10/31(Thu) 12:04:37 OS : Windows 10 EXCEL : 未指定
対象者シートから10列目の番号
年度シートから12列目の番号が一致したら
対象者シートに転記したい
(対象者シートの一致した番号の行に)
対象者シートの10列の番号まで
※のところでエラーが出ます
対象者シートから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にセルをセットしただけで配列になってないから
それは、MyArayにセルをセットしただけで配列になってないから
[返信 2] Re : UBOUNDエラー
投稿者 : ru 投稿日時 : 2024/10/31(Thu) 12:49:00
■[返信 1] らたたたさん(2024-10-31 12:15:40)の記事
> それは、MyArayにセルをセットしただけで配列になってないから
具体的なコードを教えてください。
■[返信 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
のようにセルの数に応じて分岐します
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 '検索ワードに一致したら取得
■[質問] 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)
の形で行う必要が出てきます
セル範囲(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 )