質問: Nothing ' 画面描画更新復帰 Call GP_StartSCUPD End Sub ```
回答: VBA初心者としては上出来だと思いますよ! コメントもVBAの界隈ではこの程度でちょうどいいんじゃないかと。 では、上級者への道として幾つか補足を。 ●シートオブジェクト 「Set objSh = ThisWorkbook.Worksheets(1)」で、 Worksheet型の変数にセットしているのはOKですが、 自分のブックであれば、変数にセットせずに使えますよ~ VBE画面でモジュールの上に「Sheet1」とか見えてると思いますが、 これはシート自体のオブジェクト名で、 プロパティで「Sheet_Main」等と変えることができ、 コードを書く時に直接「Sheet_Main.Cells(1,2)」等と書けるので、 変数が不要になります。 ※確か、Nothing しちゃうとバグると思うので、そこだけ気を付けてください。 ●行、列の定義 「.Rows("2:" & .Rows.Count)」や、 「For IngCol = 0 To 8 」で、 直接「2」等と番号を使ってますが、 別途定義しないと、行・列の変化があった時に コードの調整に非常に多くの時間を割くことになってしまいます。 1つ目の方法は、Constを使って定義する方法があります。 しかし、↓のように定義量が多いと、やはり変化があった時に調整が面倒です。 ``` Public Const Col_Code As Long = 1 '←ここにNo等、新しい列を追加するとなると、↓の定義を+1等と変えなきゃいけなくなる。。。 Public Const Col_Name As Long = 2 Public Const Col_Address As Long = 3 Public Const Col_xxx4 As Long = 4 Public Const Col_xxx5 As Long = 5 Public Const Col_xxx6 As Long = 6 Public Const Col_xxx7 As Long = 7 Public Const Col_xxx8 As Long = 8 ``` 2つ目の方法は、Enumを使って定義する方法があります。 自分は、こちらをオススメします。 ``` Public Enum E_Col_Main Data_S = 2 'データ開始列 Type_ = E_Col_Main.Data_S Module Equal UpDate UserName UserComment UpCount Data_E = E_Col_Main.UpCount 'データ終了列 End Enum ``` Enumは=2等と定義した以降は、自動で1つずつインクリメントしてくれるので、 開始番号だけ定義すれば、以降は番号指定が不要になります。 また、列を途中で追加したい、列を入れ替えたい、という変化に対しても、 定義を1つ追加する、順番を入れ替える、という調整で済むようになります。 上記の例で「Data_S」「Data_E」と定義しているのは、 データの開始列、終了列、を定義していて、 「「For IngCol = 0 To 8 」のように 「全列に対して処理する」という場合に使用する為です。 変数名をみれば、全列に対して処理しようとしているのか、 それとも一部に対して処理したいのか、 という事が分かりやすくなると思います。 ※開始列、最終列に定義を追加する場合には、 定義を修正する必要があるので、そこだけは気を付けてください。