2か月ほど前に弥生会計やマネーフォワードクラウド会計への仕訳インポートを少しだけ楽にしたくて作成したユーザフォームがあるのですが、少し機能を追加したので備忘記録を記事にしておこうと思います。
前回作成したExcelのユーザーフォームはこちらの記事からどうぞ↓
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/05/image-6.png)
ユーザーフォームのチェックボックス機能で日付と勘定科目を固定する機能を追加する
前回作ったユーザーフォームについては自分もちょこちょこと利用しているのですが、実際に使ってみないとわからないというか、使っているうちに「あ、こういった機能があったらいいな。」と思うことがでてきました。
具体的には
- 日付の「月」は毎回同じものを使うので固定しておきたい(
毎回入力するの面倒くさい)。 - 勘定科目は毎回同じものを使うので固定しておきたい(
毎回入力するの面倒くさい)。
といったことです。
例えば一か月分の領収書をこのユーザーフォームを使ってまとめて入力する場合、日付については何月何日の「何日」の入力については領収書によって変更になりますが、「何月」の部分についてはほとんど変わることはありません。
ということは6月の領収書のデータを入力する場合、6月の「月」の入力部分は固定しておいて、「日」の入力部分だけ変えて入力していければマシになります。
勘定科目についても同じ考えかたで、経費を支払った際に常に「現金」や「事業主借」や「役員借入金」などの科目で処理をしている場合には毎回、毎回勘定科目を選ぶ(入力)のは面倒なのではじめに固定しておいてあげると入力が少しはマシになります。
と、いうことで機能を追加したあとのユーザーフォームがこちらになります↓
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-1024x436.png)
前回からどこがかわったというと、この部分↓
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-1-1024x379.png)
チェックボックスを2つ追加して固定するかどうかを自由に選択できるようにしました。
「月を固定する」にチェックを入れると
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-2-1024x447.png)
こんな感じに表示されます。
「貸方科目を固定」にチェックを入れると同様に
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-3.png)
こんな感じで表示されます。
で、実際にはどうなるかというと、データを入力して
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-4-1024x429.png)
「登録」ボタンを押すと、こんな感じになります↓
![](https://www.duty-cant-fail.com/wp-content/uploads/2024/07/image-5.png)
日付の「月」と「貸方科目」についてはデータが消去されずに残り、ほかの項目に関してはクリアされた状態になります。
ユーザーフォームのチェックボックス機能で日付と勘定科目を固定する機能を追加するコード
この動作を実現するためには
- ユーザーフォームにチェックボックスを追加する
- 追加したチェックボックスにチェックが入った場合のマクロのコードを追加する
必要があります。
ユーザーフォームのチェックボックスはチェックが入った時に「true」という状態になる決まりがあり、チェックが入っていない時は「false」という状態になるというルールがありますので、このルールを使ってマクロのコードを作成すればOKです。
過去の記事でもチェックボックスの説明をざっくりしているのでこちらの記事を参考にしていただければと思います↓
![](https://www.duty-cant-fail.com/wp-content/uploads/2021/04/image-34.png)
ということで前回作ったコードに追加を加えたものがこちら、ハイライト表示している部分が今回の追加部分になります↓
Private Sub CommandButton1_Click()
' ■■入力内容を配列に格納してセルに転記する■■
Dim textBoxArray() As String
Dim ctrl As Control
Dim i As Integer
Dim startColumn As Integer
Dim ws As Worksheet
Dim my_month As Long
Dim kasikata As String
Set ws = ThisWorkbook.Worksheets("sheet1")
' テキストボックスの数を取得
Dim numOfTextBoxes As Integer
numOfTextBoxes = 0
' テキストボックスの数を数える
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
numOfTextBoxes = numOfTextBoxes + 1
End If
Next ctrl
' 配列のサイズをテキストボックスの数に合わせる
ReDim textBoxArray(1 To numOfTextBoxes)
' 各テキストボックスの内容を配列に格納
i = 1
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
textBoxArray(i) = ctrl.Text
i = i + 1
End If
Next ctrl
'セルに転記
ws.Activate
Dim lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row + 1
startColumn = 0 ' 開始列(A列)を指定
For i = LBound(textBoxArray) To UBound(textBoxArray)
' データをセルに書き込む
ThisWorkbook.ActiveSheet.Cells(lastrow, startColumn + i).Value = textBoxArray(i)
Next i
' ■■テキストボックスの入力内容を消去する■■
my_month = meTextBoxmonth.Value
kasikata = meTextBoxkasikata.Value
meTextBoxmonth.Text = ""
meTextBoxday.Text = ""
meTextBoxkarikata.Text = ""
meTextBoxkasikata.Text = ""
meTextBoxkingaku.Text = ""
meTextBoxnaiyou.Text = ""
meTextBoxsiharai.Text = ""
' ■■「月を固定する」にチェックがある場合の処理■■
If meCheckBox1.Value = True Then
meTextBoxmonth.Value = my_month
End If
' ■■貸方科目を固定するにチェックがある場合の処理■■
If meCheckBox2.Value = True Then
meTextBoxkasikata.Value = kasikata
End If
' ■■テキストボックスの「月」又は「日」の入力部分を選択する■■
If meCheckBox1.Value = True Then
meTextBoxday.SetFocus
Exit Sub
End If
' ■■テキストボックスの「月」入力部分を選択する■■
meTextBoxmonth.SetFocus
End Sub
ユーザーフォームのチェックボックス機能で日付と勘定科目を固定する機能を追加するコードのざっくり解説
今回機能を追加したコードについてざっくりと説明しておきます。ほんとにざっくりと。
まずはハイライトの11行目と12行目に関して、今回機能を追加するにあたって新しく変数を2つ追加することとしました
my_monthという変数とkasikataという変数をそれぞれ追加しています
この変数、my_monthという変数に対してユーザーフォームで入力した「月」のデータを格納し、kasikataという変数についてはユーザーフォームで入力した「貸方勘定科目」のデータを格納しておきます。
64行目と65行目の部分がその作業になります。
上の画像の例で行くと、my_monthという変数にはユーザーフォームで入力した7月のうち「7」というデータが格納され、kasikataという変数には貸方科目である「事業主借」というデータが格納されることになります。
そして、今回新しくユーザーフォームに追加したチェックボックスにチェックが入っているかどうかを if 式を使って判定させて行きます。
77行目から83行目の部分がその部分になります。
ユーザーフォーム上に追加した「月を固定する」チェックボックスにチェックが入った時。すなわち TRUE の状態になっているのであれば、ユーザーフォームに入力したデータを全部消去した後にユーザーフォームの「月」の入力欄に先ほどmy_monthという変数に格納したデータ(今回の場合は「7」)を入力するように指示をしています。
これによって一旦データは全て消去されるのですが、その後データを消去する前にmy_monthという変数の中に格納していたデータ(今回の場合は「7」)が再度入力されるので、見た目上は消去されずに固定されたように見せることができます。
貸方科目に関しても、同様の考え方でユーザーフォームに追加した「貸方科目を固定」チェックボックスにチェックが入っている場合、すなわち TRUE の状態の場合には、一旦データを消去した後に貸方科目の入力欄に先ほどkasikataという変数の中に格納した貸方勘定科目(今回の場合は「事業主借」)のデータを入力するように指示をしています。
最後の96行目から101行目に関しては、新しいデータを入力する際に入力のカーソルがユーザーフォーム上の「日」の部分からスタートするように指示をしています。
月を固定しているので、新しくデータを入力する際にユーザーフォームを上の「月」の欄にカーソルが移動すると面倒なので、あらかじめ「日」の欄にカーソルが移動するように指示している部分になります。
まとめ
弥生会計やマネーフォワードクラウド会計への仕訳インポートを少しだけ楽にしたくて作成したユーザフォームに機能を追加して「特定の項目を固定する機能」を追加する個人的方法を記事にしました。
何か参考になれば幸いです。
【本日の近況報告】
お風呂場の床の黒ずみ汚れや風呂椅子の白っぽくなった汚れ落としに何かいいものはないかと悩んでいたらリンレイの洗剤がいいらしいという広告を見かけたので試しに買ってみました。
我が家の場合は1回目で完璧に汚れが綺麗になることはなかたのですが、2回、3回と使っていくとどんどん汚れが綺麗になったので満足です。
スプレーして3分くらい放置してスポンジなどで擦ると汚れがよく取れたような気がします。
風呂汚れに悩まれている方は一度試してもいいかもしれません。
【本日の1曲】
Lucky Kilimanjaro/次の朝
ラジオから流れてきたのをなんとなく聴いていたら耳が反応した1曲。ラッキーキリマンジャロという日本のバンドの曲で、名前は聞いたことがあるけど曲を聴いたことがありませんでした。
スーパーカーとかサカナクションみたいなダンスロックチューン。かっこいい。