[[20190803110950]] 『変数名を番号を付加して値を格納する方法について』(リブラ) ページの最後に飛ぶ

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

 

『変数名を番号を付加して値を格納する方法について』(リブラ)

いつもこちらのサイトでは大変お世話になっております。

ループ内で変数に通し番号を付加して、値を格納する方法についてアドバイスをお願いします。

処理の内容は以下のように作成しており、変数に番号を付加する部分でエラーが出ます。

・配列nに格納した日付値を

 n = Array

・シート内にあるカレンダーの日付範囲からFind検索して

 Set m = .Range(.Cells(1, 76), .Cells(1, 106)).Find(What:=DateValue(z), LookIn:=xlFormulas)

・一致した列番号を変数に対して「j」番号を付加して格納

  Key& j = m.Column   '←エラー:定義されていません・・・

変数に検索値を格納するコード部分です

      'Arrayで処理した結果を格納する変数

            Dim Key1 As Long, Key2 As Long, Key3 As Long, Key4 As Long
            Dim Key5 As Long, Key6 As Long, Key7 As Long, Key8 As Long

            Dim n As Variant, z As Variant, j As Long

      '配列に指定セル値を格納(全部で8コ)

            n = Array(.Cells(x + 2, 6), .Cells(x + 3, 6), .Cells(x + 4, 6), .Cells(x + 5, 6) _
              , .Cells(x + 2, 7), .Cells(x + 3, 7), .Cells(x + 4, 7), .Cells(x + 5, 7))

            j = 1'変数に番号付加用
            For Each z In n
        '値のあるセルを処理
                If z <> "" Then
          'カレンダー内に値zを検索
                    Set m = .Range(.Cells(1, 76), .Cells(1, 106)).Find(What:=DateValue(z), LookIn:=xlFormulas)
          '検索値があれば
                    If Not (m Is Nothing) Then

            '変数に対して「j」番号を付加して、列番号を格納

                        Key& j = m.Column

                    End If

                Else
          'セルが空白の場合は、変数&jを""として格納
                    Key& j = ""

                End If

                j = j + 1

            Next z

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


Key& jは変数Keyと変数jの連結であって、Key1といった変数を作れるわけではありません。
こういう場合は、配列変数を使ったらどうでしょうか。
(γ) 2019/08/03(土) 11:43

 >変数に番号を付加する部分でエラーが出ます。 

 >Dim Key1 As Long, Key2 As Long, Key3 As Long, Key4 As Long
 >Dim Key5 As Long, Key6 As Long, Key7 As Long, Key8 As Long
 > :    :
 >j = 1 '変数に番号付加用

 時々、似たような質問があるんですが、
 変数名は文字列じゃないので、合成できません。

 Dim Keys(1 to 8)
  :    :
 j = 1 'Keys配列のIndex管理用

 とし、Key1の代わりにKeys(1) とする。 以下同じ。

(半平太) 2019/08/03(土) 11:55


すでに回答いただいていますが、下記の記事も参考にしてください。
http://officetanaka.net/excel/vba/variable/07.htm
(γ) 2019/08/03(土) 11:58

 ある範囲に31日分の日付があって、任意の日付がその範囲内に存在したとき
 変数に格納する。

 その後の処理にどのような使い方をするのか不明です。
 日付に重複が無く単に変数にするなら、配列変数を用意する、又はDictionary等で代替えする。

 どちらにしても、その後の処理の内容で変わってきませんか?

 ちなみに
 > n = Array(.Cells(x + 2, 6), .Cells(x + 3, 6), .Cells(x + 4, 6),
 Array関数はVariantです。Value プロパティを省略した場合はRangeオブジェクトが格納されています。
 n(0).Value = "xxx"
 とすると、.Cells(x + 2, 6)の値が変わります。
 その辺はきちんと理解したうえでの使用なら問題ないのですが...
(seiya) 2019/08/03(土) 11:59

Yさま
半平太さま

変数を配列に格納する方法をアドバイス頂きありがとうございました。

Dim Keys(1 To 8)
Keys(j) = m.Column

→配列内に設置した変数リストに値を適正に格納できました。

seiyaさま

その後の処理にどのような使い方をするのか不明です。

n = Array(.Cells(x + 2, 6),・・・は

スケジュール内容を8セル分項目ごとに日付を入力できるようにしてあり
それを、当月カレンダー内から該当する日付の列番号を変数Key1〜8に格納し

その後の処理内容は、予め取得しておいた「x行」と「Key列」で転記セルを特定し
Array値に対応する記号(8種類)を転記させています。

説明がわかりにくくてすみません。

皆様のおかげで、コードが半分のサイズに縮小することが出来ました。
感謝申し上げます。

(リブラ) 2019/08/03(土) 13:37


コメント返信:

[ 一覧(最新更新順) ]


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