プロが教える店舗&オフィスのセキュリティ対策術

EXCEL VBAで、ある科目の400人の履修者1人1人にPDFの通知書を作成するという課題で以下のようにVBA埋め込みを行いました。
このVBAはデータ400個の固定値になっていますが、入力されているデータの個数とするにはどの部分をどのように修正したらよいでしょうか。

VBA埋め込み
Windowsの場合

Sub 角丸四角形1_Click()

Dim inputfilename As String '成績ファイル

Dim Gakuseki(400) As String
Dim Seiseki(400) As String
Dim Outfile(400) As String

Dim targetbook As Workbook
Dim cellpoint As Integer
Dim i As Integer

inputfilename = Application.GetOpenFilename("Excel ブック,*.xls?")
If inputfilename = "False" Then Exit Sub
Set targetbook = Workbooks.Open(inputfilename)
With targetbook.ActiveSheet
For i = 0 To 399

cellpoint = i + 3
Gakuseki(i) = .Range("A" & cellpoint).Value
Seiseki(i) = .Range("C" & cellpoint).Value
Outfile(i) = CurDir & "¥save¥" & .Range("A" & cellpoint).Value & ".pdf"

Next
End With
targetbook.Close

Cells(1, 4).Value = Date

For i = 0 To 399
Cells(4, 2).Value = Gakuseki(i)
Cells(4, 4).Value = Seiseki(i)

ActiveSheet.Range("A1:D5").ExportAsFixedFormat Type:=xlTypePDF, filename:=Outfile(i)
Next

MsgBox ("done")

End Sub

上記の
Dim Gakuseki(400) As String
Dim Seiseki(400) As String
Dim Outfile(400) As String
それぞれの(400)を修正するのでしょうか。それ以外にもどこか修正の必要があるのでしょうか。

A 回答 (3件)

こんにちは


>それぞれの(400)を修正するのでしょうか。それ以外にもどこか修正の必要があるのでしょうか。

この400と言うのは配列の大きさを決めていますよね
と言う事は、この配列を扱っている所(代入と取得)を変更する必要があるのではないかと思いますよ。、、ループの部分とか、、定数で設定している部分ですね。

課題と言う事なのでサンプルは控えますが、
Const constant As Long = 400 などを設定して各変更場所を
constantやconstant-1に置き換えると 一か所400を変更すれば、すべてに対応するのですが、、別の話かもですね

>入力されているデータの個数とするにはどの部分をどのように修正したらよいでしょうか。

この場合は定数でなく変数に個数を代入して使用する事になると思いますね

行数がデーター数と仮定すると,、+3なので3行目からデータでしょうか
最終行を取得して-3すれば良さそうかな、、

問題は配列の大きさを設定するタイミングですかね
最終行を取得後にReDimで設定するのか良いのか、、

此の辺も 課題と言う事なので具体例は割愛します。
もし、躓くようでしたら、実際に行った事などを補足してくださいね

constantは仮称です。適時分かり易い名前にしてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/07/26 13:38

#1です


投稿後気が付いたのですが、細かい事で申し訳ないのですが、なぜ399なのでしょう?
Dim Gakuseki(400) であればFor i = 0 To 400 にするべきかと、、
一次配列で最少要素インデックスを設定しない場合、0からだと思いますよ
ま、大は小を兼ねると言う事で、、良いかもですが、課題と言う事なので一応、、
変な指摘を入れてしまったので、配列について学習中として補足します
配列の大きさをちゃんと設定出来れば、ループ終端をubound(Gakuseki)にすることもOKかと
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/07/26 13:39

(400)の部分だけではなく、For~Nextの数字を修正する必要があります。



でもね、こういう場合は400という固定の数ではなく、最初にNinzuなりの数字の変数を設定して、そこに400を代入します。

そうすることにより、1カ所だけの修正で対応できるようになるんですよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/07/26 13:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A