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)を修正するのでしょうか。それ以外にもどこか修正の必要があるのでしょうか。
No.1ベストアンサー
- 回答日時:
こんにちは
>それぞれの(400)を修正するのでしょうか。それ以外にもどこか修正の必要があるのでしょうか。
この400と言うのは配列の大きさを決めていますよね
と言う事は、この配列を扱っている所(代入と取得)を変更する必要があるのではないかと思いますよ。、、ループの部分とか、、定数で設定している部分ですね。
課題と言う事なのでサンプルは控えますが、
Const constant As Long = 400 などを設定して各変更場所を
constantやconstant-1に置き換えると 一か所400を変更すれば、すべてに対応するのですが、、別の話かもですね
>入力されているデータの個数とするにはどの部分をどのように修正したらよいでしょうか。
この場合は定数でなく変数に個数を代入して使用する事になると思いますね
行数がデーター数と仮定すると,、+3なので3行目からデータでしょうか
最終行を取得して-3すれば良さそうかな、、
問題は配列の大きさを設定するタイミングですかね
最終行を取得後にReDimで設定するのか良いのか、、
此の辺も 課題と言う事なので具体例は割愛します。
もし、躓くようでしたら、実際に行った事などを補足してくださいね
constantは仮称です。適時分かり易い名前にしてください。
No.3
- 回答日時:
#1です
投稿後気が付いたのですが、細かい事で申し訳ないのですが、なぜ399なのでしょう?
Dim Gakuseki(400) であればFor i = 0 To 400 にするべきかと、、
一次配列で最少要素インデックスを設定しない場合、0からだと思いますよ
ま、大は小を兼ねると言う事で、、良いかもですが、課題と言う事なので一応、、
変な指摘を入れてしまったので、配列について学習中として補足します
配列の大きさをちゃんと設定出来れば、ループ終端をubound(Gakuseki)にすることもOKかと
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
CheckBoxの配列化
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
VBAでMODE関数をつくる
-
Dir関数で読み取り順を操作でき...
-
VBA ReDim と ReDim Preserve ...
-
VB6のメモリ解放に関して
-
excel vbaの配列なんですが・・・
-
C#でbyte配列から画像を表示さ...
-
複数のtextboxの処理を一括で行...
-
配列のペースト出力結果の書式...
-
構造体配列内の文字列検索のよ...
-
.NET 文字コードの変換
-
VB6からの移行したいけど、VB.N...
-
countif/sumifのようなVBA関数
-
EXCEL VBA 配列デー...
-
テキストボックの文字を一行ず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報