[[20180622103454]] 『変数、ReDimについて』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『変数、ReDimについて』(初心者)

検索してここにたどり着きました。
前任者が残したマクロで、どうしてもわからないところがあり、教えていただきたく書き込み致します。

まず実際の画面(数値は適当です)がこちらです。
A〜Dが料金マスタ、F〜Lが入力画面
I&J&Kの全てをみたしたものの料金を料金マスタから検索して金額へ自動入力しているようです。


コマンドボタンを押したときの動作マクロはこちらです。

============
Private Sub CommandButton1_Click() '料金自動入力

Dim r(), n As Variant, i As Long

 n = Cells(Rows.Count, 1).End(xlUp).Row

ReDim r(n - 1)

For i = 3 To n

 r(i - 1) = Cells(i, 1) & Cells(i, 2) & Cells(i, 3)
 '発送県&送り先県&サイズの指定範囲、1=A、2=B、3=C

Next

For i = 3 To Cells(Rows.Count, 6).End(xlUp).Row
'6行目最終入力行の割り出し(請求入力)

n = Application.Match(Cells(i, 9) & Cells(i, 10) & Cells(i, 11), r, 0)
'9=発送県、10=送り先県、11=サイズが完全に一致するものをrから検索

If Not IsError(n) Then 'エラーじゃない場合
Cells(i, 12) = Format(Cells(n, 4).Value, "#,##0")
'Format〜 セルの書式。 12=金額に入れる数字をn(発送県、送り先県、サイズが一致したところ)の4行目=金額にいれる。"#,##0"は1,000といった表示になるように

Else
Cells(i, 12) = "NG"

End If

Next
End Sub

==============

自分で調べたところなどはコメントを付けているので見にくいかもしれないのですが、1つ調べても理解できていないのが、変数rのことです。

変数nは最終行の取得、その使用なのはわかります。
変数iは3からnまで増える数なのも理解できていますが、
rがわからず…検索の「範囲」で出てくるので、料金表全体を指すのでは?と思ったのですが、そうなると
r(i - 1)
これがわからず……
色々なワードでできる限り調べたのですが、全くわからず、ドツボにはまっています…前任者もよくわかっていないようで聞けず…。
問題なく使用はできているのですが、変更などがあったとき対応できるように理解しておきたいと思い、質問させていただきました。
どうぞよろしくおねがいします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 > ReDim r(n - 1) 

 これは、ベースが0から始まります。

 なので、1個目は r(0) です。(nが100なら、最終は99なので、1引く必要がある)

 ベースを1から始めたいのであれば、

  ReDim r(1 To n)   とする。

 必然的にそれに影響を受けるコードも書き直す必要があります。

(半平太) 2018/06/22(金) 11:08


 >rがわからず
 配列変数と呼ばれるものです。
http://officetanaka.net/excel/vba/variable/07.htm
( seiya) 2018/06/22(金) 11:14

半平太さん、seiyaさんありがとうございます!

配列変数は、「ReDim」を探した時に出てきてたのに、よく理解できていなかったのですが、リンク先の文章で理解ができました…!

Dim r()
これはつまり、rにいくつ配列変数がわからないため()のみ

ReDim r(n - 1)
ここで配列変数が決まる
最終列が100なら100-1=99個+最初の0で r(0)〜r(100)までの変数を使用できる。

r(i - 1) = Cells(i, 1) & Cells(i, 2) & Cells(i, 3)
これはrという配列変数の(i-1)番目ということなんですね…。

検索時にrとすることで、リンク先で言う「アパート全体」を指定しているということで理解はあってますでしょうか??
(初心者) 2018/06/22(金) 11:33


>ReDim r(n - 1)
>ここで配列変数が決まる

ごめんなさい、配列の上限値が決まる、ですね;
(初心者) 2018/06/22(金) 11:35


 Dim r()
 で明確に変数rは配列変数であることを宣言しています。

 ここではシート上の範囲を一括格納、または関数、オブジェクト等より返された場合のことは省きます。

 配列変数で要素(格納すべき値)を格納する際には事前にそのサイズ(いくつ格納するか)を指定する必要があります。

 ReDim (ReDimension)ステートメントが配列のサイズを決定し初期化します。

 こうすることによって初めて配列変数を使用できるようになります。

 >検索時にrとすることで、リンク先で言う「アパート全体」を指定しているということで理解はあってますでし ょうか??

 それでよいと思います。
(seiya ) 2018/06/22(金) 11:46

seiyaさん、重ね重ねありがとうございます。
なるほど、より理解が深まりました……!
自分で使用するレベルにはまだ至ってないと思いますが、次配列変数が出てきても頭を捻らなくて良さそうです!
自分一人では解決できなかったと思います、ありがとうございました!
(初心者) 2018/06/22(金) 11:53

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.