VBAの練習

マクロとかの練習をしています。簡単なものをコピペで作ってます。練習で一番困るのが、題材を何にするかだと思います。自分も練習したいけど、何を作ろうか?って思って、悩むことが多々あります。そんな時に使えるサイトがあるんです。

クラウドワークス(CrowdWorks)です。

クラウドソーシングのサイトになるんですが、ライターを募集したり、サイトの作成を募集したりしているサイトです。できる人だと副業で稼ぐこともできるかもしれません。

このサイトなんですが、VBAを検索すると、こんなの作って欲しいとかがのっているんです。それを題材に練習するんです。契約等はしなくても、募集は見れるので。今回は、題名等を必要な枚数だけシール台紙に印刷するエクセルです。こんな内容って自分だと思いつかないですよね。

作ったのが、これ

簡素ですが、最低限はできると思う(お客様にだせる代物ではないですが)。

今回は、15項目のみにしています。ID、識別番号、シール名、枚数を入力します。そして、ボタンをクリックすると、

別シートに、項目別の枚数が転記されます。ちなみに、募集内容に枚数制限があって、その枚数になると上限を知らせるってことも書いてあったので、メッセージボックスも追加しました。

100枚を超えると、合計枚数に「印刷可能枚数100枚を超えています。」と表示され、ボタンをクリックすると、

印刷できません。表示がでます。

これだけのエクセルシートになります。速攻でできちゃいますけど、けど、練習にはもってこいです。この中には、ワークシートの選択、変数の代入、繰り返し、判定、ポップアップの表示等が入っています。一通り入っているんではないでしょうか?実際、マクロとかって、単純作業を繰り返すのが多いので、変数に代入、別セルに転記っているのがほとんどです。

ちなみに、この内容って、インターネットで探せば、コピペだけでつくれます。今回もそうですので。

VBAを使ってて思うのは、やっぱり自分たちの使いやすいように改変していくことが多い。その場合、コピペではできなくなることが多い。人って不思議なもので、よりつかいやすくしたくなっていくんですよね。

コードは以下の通りです。

Sub test()

Dim a As Variant
Dim b As Integer
Dim c As Integer
Dim num As Integer
Dim ID(15) As Variant
Dim name1(15) As Variant
Dim name2(15) As Variant
Dim maisu(15) As Integer
Dim allnum1 As Integer
Dim allnum2 As Integer

Dim sheet1 As Variant
Dim sheet2 As Variant

sheet1 = "表"
sheet2 = "印刷台紙"
allnum1 = 2
allnum2 = 2

If (Worksheets(sheet1).Cells(2, 5).Value = "印刷可能枚数100枚を超えています。") Then
    MsgBox ("印刷可能枚数100枚を超えていますので、印刷できません")
    GoTo e:

End If

Worksheets(sheet2).Cells.Clear

b = Cells(Rows.Count, "B").End(xlUp).Row

For c = 4 To b
ID(c - 4) = Worksheets(sheet1).Cells(c, 2).Value
name1(c - 4) = Worksheets(sheet1).Cells(c, 3).Value
name2(c - 4) = Worksheets(sheet1).Cells(c, 4).Value
maisu(c - 4) = Worksheets(sheet1).Cells(c, 5).Value

    For num = 1 To maisu(c - 4)
    
    
    Worksheets(sheet2).Cells(allnum1, allnum2).Value = ID(c - 4)
    Worksheets(sheet2).Cells(allnum1 + 1, allnum2).Value = name1(c - 4)
    Worksheets(sheet2).Cells(allnum1 + 2, allnum2).Value = name2(c - 4)
    
    If (allnum2 = 8) Then
        allnum1 = allnum1 + 4
    End If
    
    allnum2 = allnum2 + 3
    
    If (allnum2 > 8) Then
        allnum2 = 2
    End If
    
    Next

Next

e:

End Sub

汚いコードですが、自分になら大丈夫です。人に提供するにはやっぱりプロに習ったほうが良いとおもいますね。コメントの書き方やコードの整理の仕方が重要だと思います。

そんなこんなで、練習台をさがすなら、クラウドワークス等がおすすめです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中