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

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

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

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

Q&A

解決済

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

takFF
takFF

総合スコア14

VBA

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

2回答

0グッド

0クリップ

268閲覧

投稿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に入れられているのではないのでしょうか?

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

ベストアンサー

内容的に、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

総合スコア376

takFF👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

takFF

2022/11/12 00:43

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

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

総合スコア32016

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

takFF

2022/11/12 08:05

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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