『配列への取り込み』(びき)
お世話になります
セル範囲を配列に取り込んで処理しコピーシート名前を付ける処理をしたく下記のように取り込みしていますが、結果が違うので、arrの書き方など調べているところです。なにかアドバイスいただければありがたく存じます
Dim arr() As Variant
Set 明細 = ThisWorkbook.Worksheets("明細")
With 明細
xlLastRow = Cells(Rows.Count, 1).Row 'Excelの最終行
LastRowh = Cells(xlLastRow, 1).End(xlUp).Row
' For i = 0 To LastRowh
arr = .Range(.Cells(xlLastRow, 1).End(xlUp), .Cells(1, 19))
Sn = arr(2, 1)
End With
2010でも使用
< 使用 Excel:Excel2019、使用 OS:unknown >
> 結果が違う どのように違うか説明して下さい。 エラーが出るなら、 ・どの行でエラーが発生するのか ・エラーメッセージは何か(省略せずに書いて下さい)
エラーは出ないが想定と違うなら、 想定は何で、しかし実際はこんなことになってしまう という説明をしてください。
# 想像はつきますけど、きちんとした説明が欲しいところです。 (xyz) 2026/05/09(土) 12:53:19
サンプルを作ってみましたが、
私は、私の想定した通りの結果が返ってきています。
(匿名) 2026/05/09(土) 12:56:23
明細の最終行が75まであっても35から40行で終わる
たまに最終まで処理できることがあります
arr = .Range(.Cells(xlLastRow, 1).End(xlUp), .Cells(1, 19)) レンジ範囲の書き方がおかしいのかと思いました .valueの有無とか
LastRowh = Cells(xlLastRow, 1).End(xlUp).Row取得して、
arr に取り込み方がいいのかとか考えたのです
(びき) 2026/05/09(土) 13:41:03
>arr = .Range(.Cells(xlLastRow, 1).End(xlUp), .Cells(1, 19)) >レンジ範囲の書き方がおかしいのかと思いました
想定と違う結果になったときに、 .Cells(xlLastRow, 1).End(xlUp).Addressなどを調べて、 データがある最終行になっているかを確認することです。
各列でデータがある最終行が同じであれば、A列で代表させるのは適切です。 違う場合に、単にA列だけを見ていると異なることになります。
最終行が各列で違う場合に、それらの最大値を求めるには、検索を使った方法があります。
Columns("A:S").Find("*", , xlValues, xlPart, xlByRows , xlPrevious).Row
とするとよいでしょう。
(xyz) 2026/05/09(土) 14:08:54
最終行は同じはずですが、確認します
またいきづまりましたら、お伺いします
(びき) 2026/05/09(土) 14:20:51
急ぎませんが、結果を知らせて下さい。 (xyz) 2026/05/09(土) 14:26:02
>明細の最終行が75まであっても35から40行で終わる
上記が事実ならA列の75行目にデータは存在せず、ようやく40行目にデータがあった、
ということになりませんか。
「最終行は同じはず」が事実であるなら、見えているコードだけではありえませんが、
変数 xlLastRow に35とか40が代入されているとか。
xyzさんの回答にあるコードを試されるのが解決の早道でしょう。
追記 21:05
「見えているコードだけではありえませんが」は誤りです。
お詫びして訂正いたします。
(´・ω・`)さんの回答の通り、
明細シート以外のシートがアクティブな状態でコードを実行した場合、
想定外の値が代入される可能性があります。
(くま) 2026/05/09(土) 16:58:34
xlLastRow = Cells(Rows.Count, 1).Row 'Excelの最終行
LastRowh = Cells(xlLastRow, 1).End(xlUp).Row
これはアクティブシートを対象にしています。 明細シートを対象にするなら
xlLastRow = .Cells(Rows.Count, 1).Row 'Excelの最終行
LastRowh = .Cells(xlLastRow, 1).End(xlUp).Row
↑この . が大事
(´・ω・`) 2026/05/09(土) 18:34:45
With 明細
xlLastRow = .Cells(Rows.Count, 1).Row 'Excelの最終行
LastRowh = .Cells(xlLastRow, 1).End(xlUp).Row
arr() = .Range(.Cells(1, 1), .Cells(LastRowh, 19)).Value
(xyz)様
ありがとうございます。
arrの中を確認しようとしてたのですが範囲もですね
19列目は1列目と同数行で、他の行には、最後が空白のところもありました。
(´・ω・`)様
「.」 が大事なんですね 違いを気にしておりませんでした
ありがとうございます
くま様
xlLastRow = Cells(Rows.Count, 1).Row 'Excelのバージョンが違ってもEnd(xlUp).Rowで同じ結果のはずと思ってました (びき) 2026/05/09(土) 21:34:21
arr() = .Range(.Cells(1, 1), .Cells(LastRowh, 19)).Value
arr = .Range(.Cells(1, 1), .Cells(LastRowh, 19))
この書き方はどちらでも問題ないと思ってよいでしょうか
(びき) 2026/05/09(土) 21:45:41
>arr() = .Range(.Cells(1, 1), .Cells(LastRowh, 19)).Value >arr = .Range(.Cells(1, 1), .Cells(LastRowh, 19)) >この書き方はどちらでも問題ないと思ってよいでしょうか
質問のポイントが今一つ分からないのですが、 そもそも、2つ目は「型不一致エラー」になりませんでしたか? 私はエラーになりましたけど。 ※arrは配列変数として定義されている、と言う前提ですよね?
あと、ちょっと気になったのですが、 これって無意味なことやってないですか? ↓ >xlLastRow = Cells(Rows.Count, 1).Row 'Excelの最終行 xlLastRow = Rows.Count でいいハズですから。
(半平太) 2026/05/10(日) 12:59:30
>この書き方はどちらでも問題ないと思ってよいでしょうか arrという変数の宣言方法にも依るかと思います。
ワークシート上のセル範囲の値を取得する場合は、どちらかと言えば、 単に Dim arr (As Variant) と宣言することのほうが多いように思います。 そのうえで、 arr = セル範囲 とか arr = セル範囲.Value としても全く問題ありません。
参考記事: http://officetanaka.net/excel/vba/variable/09.htm これは対象がワークシート起源ではないので、幾分ポイントがズレているかもしれませんが。
(xyz) 2026/05/10(日) 15:27:12
「配列の取り込み」というタイトルからして、 arrが想定と違っていて、その原因を知りたいという話かと思ったら、 まるで違う話だったのですか?
LastRowh = Cells(xlLastRow, 1).End(xlUp).Row
' For i = 0 To LastRowh
の繰り返しが途中で終わってしまう、ということなんですか?
そう言う話だったら、どうしてその行をコメント扱いにしてしまっているんですかね。
コメントにしているということは実行に関係ないものだと解釈されるのが普通です。
私だけではなく、他のかたも同じようにarrの内容を問題としていました。 普通は、そう受け止めますよ。
今後は、質問は相手に伝わるように、明確に書いてください。
また、デバッグということをご自分でしてから、それも踏まえて質問して下さい。 ・ステップ実行したり、 ・LastRowhという変数に何がセットされ、それは想定したものかどうか、 基本的なデバッグの方法をきちんと学習すれば、 簡単に確認できるはずの話です。 (xyz) 2026/05/11(月) 22:15:28
いろいろ書いてわかりずらくなって削ったら、違うことになってしまったと思います
配列がわかってないためと思い込んだのもあります。
.Value
エラーになって消した記憶もありますが、どんなエラーだったか、数日たって再開した時には忘れていたりもします。
エクセルの.Value2というのを取得できたりするのかと思ったりしています
すみませんでした
(びき) 2026/05/16(土) 21:09:56
>すみませんでした
質問は解決したのですか? (取り下げ?) それともまだ続いているのですか?
※続いている場合は、論点を再整理していただけませんか? 何かポイントなのか曖昧で論議しにくいのですが・・
(半平太) 2026/05/16(土) 22:17:00
論点がわからないとのことのお詫びです
ちまちま作業しておりますが、何がわからないかわかれば自分で解決出来そうなきもします
(びき) 2026/05/16(土) 23:13:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.