エクセルマクロが重い
こんにちは。
ご教授くださいませ。
すでに先方が作っているエクセルのシートがありまして、
そのシートの表組み規則にのっとって入力するユーザーフォーム
を私のほうで作ったのですが、重いです。
selectの多用はだめ!というところまでは調べたのですが
じゃあどうしたらいいかわかりません。
■
'--------------------8時から
If OptionButton1.Value = True Then
ActiveCell.Offset(3, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox1.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox2.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox3.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox4.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox5.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox6.Value
ActiveCell.Offset(3, 0).Range("A1").Select
ActiveCell = UserForm3.TextBox12.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox11.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox10.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox9.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox8.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox7.Value
ActiveCell.Offset(3, 0).Range("A1").Select
ActiveCell = UserForm3.TextBox13.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox14.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox15.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox16.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox17.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox18.Value
ActiveCell.Offset(3, 0).Range("A1").Select
ActiveCell = UserForm3.TextBox24.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox23.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox22.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox21.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox20.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell = UserForm3.TextBox19.Value
ActiveCell.Offset(3, 0).Range("A1").Select
ActiveCell = UserForm3.TextBox25.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox26.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox27.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox28.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox29.Value
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell = UserForm3.TextBox30.Value
'ActiveWorkbook.Save
MsgBox "入力しました。", vbInformation, "確認"
End If
'--------------------8時から(END
■
基本の流れは...
最初にオプションボタン3つのどれか1個の
選択を求め、その条件に応じて
始基点となるセルが変わります。
で、あとは与えられた表組みを縦や横に
移動しながら、対応するテキストボックスの
値を入れる、という
我ながら頭の悪い方法で^^;
.selectではない、スマートな方法があればと思います。
ぜひお知恵を!
補足
nishi6さん、丁寧なご説明ありがとうございます。 つまり、原点A1(または、A1:F1)をOffset(a,b)すると 原点をある意味無効(Offset)して、a行、b列分移動した セルを原点にするという解釈でよろしいでしょうか。 ただ、もう一つ質問があります。僕の場合はA3を選択後 ツール→マクロ→新しいマクロを実行し、質問の1.からの作業を 記録しました。そして、1.の操作はA3:F3を選択しています。 記述としてActiveCell.Range("A3:F3").Select になるならわかるのですが、なぜ、ActiveCell.Range("A1:F1").Select となるのでしょうか ActiveCell.Offset(2, 0).Range("A1").Selectも同様です。 ActiveCell.Offset(2, 0).Range("A3").Selectなら わかります。実際にマクロ実行後はA5がアクティブになります。 ActiveCell.Offset(2, 0).Range("A1").Selectであれば A3がアクティブになるような気がするのですが。 ちんぷんかんぷんな質問だったらすみません。 もし、ご存知であればまた教えて頂けますでしょうかm(__)m