|
>"AN3:BM3"にデータがある場合は
えっと・・それは簡単に言うと「人間中心の発想」なんですね。
「データがあるかないかを調べてから、あればクリアする・・」
は、裏を返すと
「何かの処理をする前に、指定したセル範囲が必ず空白になっている必要がある」
ということだから、データがあろうと無かろうとクリアしてしまう。ということで
良いのです。マクロの処理はアッという間なので、それでも問題にならないのです。
で、提示されているコードを見て感じるのは「一つにまとめられるプローシージャ
を、意味もなく分割している」ということです。実はプロシージャの分割を効果的に
行えるようになるには、かなりの経験が必要なのです。その"勘どころ"が掴めない
うちは、やたらと分割しない方が処理速度の低下を少なくするメリットが大きい、
と思って下さい。
で、いろいろ能書きをたれるのは私の性分ではないので、いつものようにサンプル
コードを提示します。全体を効率よく処理できるように編集すると、このように
なるだろうと思われるコードです。
Sub Main()
Dim Prompt As kt_MsgBoxPromptType
Dim Cnt As Long
Dim MyV1 As String, MyV2 As String
Dim GetV As Variant
Const Pmt1 As String = _
"発注業者1から100のいずれかを入力してください"
Const Pmt2 As String = "、の注文書を作成しますか。 "
Const Pmt3 As String = "工種項目は、"
Const Pmt4 As String = "でよろしいですか"
Const Pmt5 As String = "データがありません !"
Do
Cnt = Application.InputBox(Pmt1, Type:=1)
If Cnt = False Then Exit Sub
Loop While Cnt < 1 Or Cnt > 100
Cnt = Cnt + 7
With Sheets("発注先")
MyV1 = .Range("B" & Cnt).Value
MyV2 = .Range("J" & Cnt).Value
GetV = .Range("A" & Cnt).Resize(, 25).Value
End With
If MsgBox(MyV1 & Pmt2, 36, "発注先は・・・") = 7 Then Exit Sub
If MsgBox(Pmt3 & MyV2 & Pmt4, 36, "発注内容です。") = 7 Then Exit Sub
With Sheets("注文書作成")
.Unprotect
.Range("AN3:BM3").ClearContents
.Range("AN3").Resize(, 25).Value = GetV
.Range("AN3:BL3").Interior.ColorIndex = 11
.Activate
.Protect
.EnableSelection = xlUnlockedCells
If WorksheetFunction _
.CountA(.Range("AO3, AR3, AW3, BL3")) < 4 Then
MsgBox Pmt5, 48: Exit Sub
End If
End With
'以下はそちらで適当に記述すること
'Call ktMsgBoxPromptTypeInit(Prompt)
End Sub
|
|