エクセルマクロが重い
こんにちは。
ご教授くださいませ。
すでに先方が作っているエクセルのシートがありまして、
そのシートの表組み規則にのっとって入力するユーザーフォーム
を私のほうで作ったのですが、重いです。
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ではない、スマートな方法があればと思います。
ぜひお知恵を!
お礼
早速かつ何時も有り難うございます。 >論理的に可能な値を計算するだけのことです。 そうかなと思いましたが、 どうコーディングしたらいいかが分かりませんでした。 >.offset(application.max(-.row+1, -2) 初めて見ました。 結果は完璧でしたが、内容は全くです。 勉強して身につけておきます。 お世話になりました。