質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

885閲覧

Excelの選択範囲から、配列を得る方法

takFF

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/11/11 15:04

VBAです

エクセルから配列を取得したい。
(それをUIpathに送りたい)

発生している問題・エラーメッセージ

エラーメッセージ 実行時エラー'9' インデックスが有効範囲にありません。

該当のソースコード

VBA

1 2Sub Selectionプロパティ01() 3 4 5Dim arr As Variant 6 arr = Selection 7 8For Each Value In arr 9 10Debug.Print Value 11 12Next 13 14MsgBox Selection(1) 15 16MsgBox arr(1) 17 18End Sub 19

試したこと

MsgBox Selection(1)は、きちんと表示されます。 6 などの数字
つぎのところで、下記のエラーが出ます

エラーメッセージ
実行時エラー'9'
インデックスが有効範囲にありません。

内容的に、Selection の配列は、arrに入れられているのではないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

内容的に、Selection の配列は、arrに入れられているのではないのでしょうか?

Selectionだけ指定すると、Selection.Value2が代入されます。

試しにA1,B2,C3と選択範囲を選んでみると、For Each Value In arr でエラーになります。
Selection.Value2がA1のString型になるためです。

A1:C3と範囲で選んだ場合は、arr(3,3)になります。

イメージ説明

範囲がExcel使用者が選んだ部分ではなく、システム側で決まっているようでしたら、Selectionを用いない方法を検討されたほうが面倒にならなくていいと思います。

投稿2022/11/12 00:36

crowmt

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takFF

2022/11/12 00:43

なるほど、ありがとうございます。ご説明の内容について、レベルが高いので全体はよくわかりませんが、arrが二次元の配列になっているというのが分かりました。それでとりあえずの問題は解決しました。またさらに教えて頂いた内容、理解していきたいと思います。
guest

0

SelectionはRangeオブジェクトです。
Selection(1)Selection.Cells(1, 1)の省略表記になります。

arr = Selectionarr = Selection.Value2の省略表記になります。
複数セル範囲を選択していたら、arrは 行数×列数の 二次元配列になります。
MsgBox arr(1, 1) とすればエラーなくSelection(1)と同じ値が表示されます。

単一セルしか選択していない場合は、arrは配列にはならずに値変数になります。よって、For Each の行でエラーになります。

下記のようにすれば、単一セルのみ選択したときも、複数セルを選択たときも二次元配列になり、エラーなく実行されます。

vba

1Sub Selectionプロパティ01() 2 3 Dim arr As Variant 4 5 arr = Selection.value 6 7 If Not IsArray(arr) Then 8 ReDim arr(1 To 1, 1 To 1) 9 arr(1, 1) = Selection.value 10 End If 11 12 Dim value 13 For Each value In arr 14 15 Debug.Print value 16 17 Next 18 19 MsgBox Selection(1) 20 21 MsgBox arr(1, 1) 22 23End Sub

矩形範囲ではなく、とびとびの範囲を選択したときは、最初の選択範囲のみがarrに代入されます。

投稿2022/11/12 01:08

hatena19

総合スコア34343

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takFF

2022/11/12 08:05

大変勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問