|
▼ケメ子 さん:
こんにちは
↑で申し上げた懸念も含めて、すこしは解消する構成案です。
1.まず、現在のWorksheet(1)に替えて、あるいは、それとは別に"Layout"というシートを
準備します。このシートのA列に情報名、B列に、その値を記載します。
コードとしてはB列だけを使います。
(ざっと、レイアウト規定に最低限必要な情報をピックアップしましたら29個ありました)
2.これら情報を、処理の最初にVBAに取り込みます。
通常は変数を規定しておいて、セルから変数への入れ込みを29行書くことになりますが
ご提案コードでは、これを1から始まる配列変数 v に入れ込みます。
(つまり、B列の値が v(1)からv(29)に入ります。)
3.コード内で v(1) とか v(29)と記述すると、後で見た人が何の項目かわからなくなりますね。
ですから たとえば POSaPath = 1 といったような宣言をしておいて v(POSaPath)というように
使います。
4.で、これを規定するには
Const POSaPath As Long = 1
Const POSbPath As Long = 2
といったように記述していくのが一般的ですが、今回は(もしかしたらケメ子さんがごらんになったことがない)
Enum を使っています。
Enum 任意の名前
aaaa
bbbb
cccc
End Enum
こうしますと、aaaa=0,bbbb=1,cccc=2 と自動的に値を設定してくれます。
今回は最初の項目を1にしますので、
Enum Rayout 'データシートのレイアウト規定
stLayout
POSaPath '元パス
POSbPath '前月パス
・・
POScPre '今月ファイルの接頭文字列
edLayout
End Enum
といった記述にしています。
stLayoutはあコードでは使っていません。0をふるためのダミーです。
ちなみにPOSaPthから最後のPOScPreまで、先ほど申し上げたとおり29個になりますので
POScPreは29ということになります。
最後の、edLayoutもダミーです。項目数29を取得するために使います。
5.POSaPathからPOScPreの並びはLayoutシートに登録してあるものと同じにします。
Layoutシートのほうは、追加で登録必要になったとき、随時登録可能です。
ただし、それにあわせて、同じ場所に、追加された項目をあらわす変数を追加してください。
Layoutシートの順番を入れ替えることも可能です。ただし、同様に、Enum記述の順番も
それにあわせて変更します。
(前項でPOSaPathに1を与えれば、ダミーのstLayoutは不要ですし、情報数はPOScPreの値
ですからダミーのedLayoutも不要になりますが、記述順を変更した場合もコード修正しなくて
いいようにしてあります)
ご参考までにこちらのレイアウトを以下にコピペします。
ちょっとたての位置が見づらいかもしれませんが、これをコピーして
RayoutシートのA列に「テキスト」で貼付け、以下の分解プロシジャを走らせれば
A列とB列に、それぞれセットされますので、もしよければお使いください。
Sub 分解()
Dim c As Range
Dim s As String
Dim v As Variant
Dim w As Variant
For Each c In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
s = Replace(c.Value, " ", " ")
v = Split(s, " ")
w = v
w(UBound(w)) = ""
Cells(c.Row, "A").Value = Join(w, "")
Cells(c.Row, "B").Value = v(UBound(v))
Next
End Sub
元パス c:\元データ
前月パス c:\前月度提出用
今月パス c:\今月度
シートAのシート名 A
シートBのシート名 B
シートCのシート名 C
シートDのシート名 D
元 データ開始行 16
元 シートAのデータ開始列 C
元 シートBのデータ開始列 F
元 シートCのデータ開始列 M
元 シートDのデータ開始列 E
前月 データ開始行 16
前月 シートAのkeyデータ列 E
前月 シートBのkeyデータ列 H
前月 シートCのkeyデータ列 O
前月 シートDのkeyデータ列 G
前月 シートAのランク列 P
前月 シートBのランク列 O
前月 シートCのランク列 V
前月 シートDのランク列 N
今月 データ開始行 6
今月 データ開始列 B
今月 keyデータ列 D
今月 ランク列 E
今月 式の開始列 F
今月 式の列数 4
元->今月 コピー列数 3
今月ファイルの接頭文字列 【作業】
|
|