フォームサンプル8

Private Sub UserForm_Activate()
Me.Repaint '2016-07-10t 追加 フォームの表示を更新
Call 集計
End Sub
Private Sub 集計()
On Error GoTo ErrorHandler
'初期化
Sheets("残高試算表").Range("G14:H112").Value = "" '今期合計クリア
Sheets("残高試算表").Range("k14:l112").Value = "" '決算整理クリア
'2009修正(No.4) 家事関連費の按分率に従い、仕訳帳へ決算仕訳を自動入力
'-----------------------------------------------------------------------
Application.ScreenUpdating = False '画面の更新をオフへ
'仕訳帳のシート保護解除
pss = "aoirohanako08"
Sheets("仕訳帳").Unprotect Password:=pss
Application.EnableEvents = False 'イベントの発生をオフへ
'2016-02-02 バグのため以下削除
'2015-07-09m 仕訳帳に金額(0)で残っている自動仕訳を事前に削除 ※入力後、家事割合0%へ変更された場合
'Set s_siwake = Sheets("仕訳帳")
'Set s_siwake = Nothing
'按分のセルに値が入っているかどうかチェック
'2010修正 0%の場合, 以下の処理はしない
'2011修正(No.22) 2010の修正を元に戻す
For i = 14 To 52 '経費の科目
kanjo_ID = Sheets("残高試算表").Cells(i, 2).Value
If Not (IsNull(Sheets("残高試算表").Cells(i, 4).Value)) And Sheets("残高試算表").Cells(i, 4).Value <> "" And Sheets("残高試算表").Cells(i, 4).Value <> "%" Then
'2010修正 If Not (IsNull(Sheets("残高試算表").Cells(i, 4).Value)) And Sheets("残高試算表").Cells(i, 4).Value <> "" And Sheets("残高試算表").Cells(i, 4).Value <> "%" And Sheets("残高試算表").Cells(i, 4).Value <> "0%" And Sheets("残高試算表").Cells(i, 4).Value <> "0" Then
KANJO_KIN = 0
'2016-04-04m バグの修正 計算式(借方合計×按分率)を(借方合計-貸方合計)×按分率 へ修正
KANJO_KIN_kari = 0 '借方合計
'仕訳帳/借方(G列)を検索
Set myRange = Sheets("仕訳帳").Range("G15:G5015").Find(what:=kanjo_ID, LookIn:=xlValues, LookAt:=xlWhole)
'2013-11m完全一致条件追加(念のため)
'Set myrange = Sheets("仕訳帳").Range("G15:G5014").Find(what:=kanjo_ID, LookIn:=xlValues)
'同じ科目があった場合は、合計値を求める
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
'2016-04-04m 決算仕訳の値は合計しない
If myRange.Offset(, -2) <> "*" Then
KANJO_KIN_kari = KANJO_KIN_kari + myRange.Offset(, 2).Value
End If
'KANJO_KIN = KANJO_KIN + myrange.Offset(, 2).Value
Set myRange = Sheets("仕訳帳").Range("G15:G5015").FindNext(after:=myRange)
Loop Until myRange.Address = myAddress
End If
'2016-04-04m 追加
KANJO_KIN_kashi = 0 '貸方合計
'仕訳帳/貸方(J列)を検索
Set myRange = Sheets("仕訳帳").Range("J15:J5015").Find(what:=kanjo_ID, LookIn:=xlValues, LookAt:=xlWhole)
'同じ科目があった場合は、合計値を求める
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
If myRange.Offset(, -5) <> "*" Then
KANJO_KIN_kashi = KANJO_KIN_kashi + myRange.Offset(, 2).Value
End If
Set myRange = Sheets("仕訳帳").Range("J15:J5015").FindNext(after:=myRange)
Loop Until myRange.Address = myAddress
End If
'自動按分計算の金額=借方合計-貸方合計
KANJO_KIN = KANJO_KIN_kari - KANJO_KIN_kashi
z = 0
'仕訳帳の最終行を取得
end_ro = Sheets("仕訳帳").Range("F5015").End(xlUp).Offset(1).row
'2010追加 end_ro の値が15以下になる場合は、end_ro を15にセットする(仕分帳の最終行)
If end_ro < 15 Then
end_ro = 15
End If
For k = 15 To end_ro
If Sheets("仕訳帳").Cells(k, 3).Value = "12" And Sheets("仕訳帳").Cells(k, 4).Value = "31" And Sheets("仕訳帳").Cells(k, 5).Value = "*" And Sheets("仕訳帳").Cells(k, 6).Value Like "*・家事使用分(自動入力)*" _
And Sheets("仕訳帳").Cells(k, 10).Value = kanjo_ID Then
shiwake_ro = k
z = 1
Exit For
End If
Next k
'仕訳帳に該当行がない場合は、新しい行を最終行に追加する
If z <> 1 Then
shiwake_ro = end_ro
End If
'仕訳帳に反映
'月
Sheets("仕訳帳").Cells(shiwake_ro, 3).Value = "12"
'日
Sheets("仕訳帳").Cells(shiwake_ro, 4).Value = "31"
Sheets("仕訳帳").Cells(shiwake_ro, 5).Value = "*"
'摘要
Sheets("仕訳帳").Cells(shiwake_ro, 6).Value = Sheets("残高試算表").Cells(i, 3) & "・家事使用分(自動入力)"
'借方・番号
Sheets("仕訳帳").Cells(shiwake_ro, 7).Value = "124"
'借方・科目
Sheets("仕訳帳").Cells(shiwake_ro, 8).Value = "事業主貸"
'借方・金額
Sheets("仕訳帳").Cells(shiwake_ro, 9).Value = Application.RoundDown(Sheets("残高試算表").Cells(i, 4).Value * KANJO_KIN, 0)
'貸方・番号
Sheets("仕訳帳").Cells(shiwake_ro, 10).Value = Sheets("残高試算表").Cells(i, 2)
'貸方・科目
Sheets("仕訳帳").Cells(shiwake_ro, 11).Value = Sheets("残高試算表").Cells(i, 3)
'貸方・金額
Sheets("仕訳帳").Cells(shiwake_ro, 12).Value = Application.RoundDown(Sheets("残高試算表").Cells(i, 4).Value * KANJO_KIN, 0)
End If
Next i
'補助科目を持つ科目
gcs = 22 '残高試算表の水道光熱費の開始行
gct = 28 ' 〃 通信費の開始行
gcf = 63 ' 〃 普通預金の開始行
sckr = 9 '仕訳帳 借方金額(I列)
scks = 12 '仕訳帳 貸方金額(L列)
Set range_勘定科目 = Sheets("勘定科目").Range("D16:D19,D22:D26,D35:D40,D44:D50,D55:D59,D68:D70,D73:D75,D78:D101,D104:D110,D116:D139,Q116:Q139")
'仕訳帳の最大行
ShiwakeMaxLine = Sheets("仕訳帳").Range("G5015").End(xlUp).row
'ShiwakeRange = "C15:C" & ShiwakeMaxLine
'借方合計
'----------
For scnt = 15 To ShiwakeMaxLine
kamoku_kari = Sheets("仕訳帳").Cells(scnt, 7).Value
'勘定科目の状態確認
Set krange = range_勘定科目.Find(what:=kamoku_kari, LookAt:=xlWhole)
'Set kRange = Sheets("勘定科目").Range("D16:D19,D22:D26,D35:D40,D44:D50,D55:D59,D68:D70,D73:D75,D78:D101,D104:D110,D116:D139,Q116:Q139").Find(what:=kamoku, LookAt:=xlWhole)
If Not krange Is Nothing Then
kline = krange.row
'kline = Sheets("勘定科目").Range("D16:D19,D22:D26,D35:D40,D44:D50,D55:D59,D68:D70,D73:D75,D78:D101,D104:D110,D116:D139,Q116:Q139").Find(what:=kamoku, LookAt:=xlWhole).Row
'2011.1.5 修正
If Sheets("勘定科目").Cells(kline, 2).Interior.ColorIndex = 45 Or Sheets("勘定科目").Cells(kline, 15).Interior.ColorIndex = 45 Then
Set gRange = Sheets("残高試算表").Range("B14:B112").Find(what:=kamoku_kari, LookAt:=xlWhole)
'今期合計データ(*印なし)
If Not gRange Is Nothing Then
gline = Sheets("残高試算表").Range("B14:B112").Find(what:=kamoku_kari, LookAt:=xlWhole).row
If IsEmpty(Sheets("仕訳帳").Cells(scnt, 5).Value) Then
gl1 = 7 '仕訳帳でE列が空白なら(=決算仕訳でない)、残高試算表の今期合計・借方合計に集計(G列)
Else
gl1 = 11 '仕訳帳でE列が空白でないなら(=決算仕訳、通常「*」「°」が入る)残高試算表の決算整理・借方に集計(K列)
End If
Sheets("残高試算表").Cells(gline, gl1).Value = Sheets("残高試算表").Cells(gline, gl1).Value + Sheets("仕訳帳").Cells(scnt, sckr).Value
'水道光熱費の補助科目の場合、普通預金でも集計
If kamoku_kari = 3091 Or kamoku_kari = 3092 Or kamoku_kari = 3093 Or kamoku_kari = 3094 Then
Sheets("残高試算表").Cells(gcs, gl1).Value = Sheets("残高試算表").Cells(gcs, gl1).Value + Sheets("仕訳帳").Cells(scnt, sckr).Value
End If
'通信費の補助科目の場合、普通預金でも集計
If kamoku_kari = 3111 Or kamoku_kari = 3112 Or kamoku_kari = 3113 Or kamoku_kari = 3114 Or kamoku_kari = 3115 Then
Sheets("残高試算表").Cells(gct, gl1).Value = Sheets("残高試算表").Cells(gct, gl1).Value + Sheets("仕訳帳").Cells(scnt, sckr).Value
End If
'普通預金の補助科目の場合、普通預金でも集計
If kamoku_kari = 1041 Or kamoku_kari = 1042 Or kamoku_kari = 1043 Or kamoku_kari = 1044 Or kamoku_kari = 1045 Then
Sheets("残高試算表").Cells(gcf, gl1).Value = Sheets("残高試算表").Cells(gcf, gl1).Value + Sheets("仕訳帳").Cells(scnt, sckr).Value
End If
End If
End If
End If
DoEvents
Next scnt
'貸方合計
'----------
For scnt = 15 To ShiwakeMaxLine
kamoku_kashi = Sheets("仕訳帳").Cells(scnt, 10).Value
'勘定科目の状態確認
Set krange = range_勘定科目.Find(what:=kamoku_kashi, LookAt:=xlWhole)
'Set krange = Sheets("勘定科目").Range("D16:D19,D22:D26,D35:D40,D44:D50,D55:D59,D68:D70,D73:D75,D78:D101,D104:D110,D116:D139,Q116:Q139").Find(what:=kamoku_kashi, LookAt:=xlWhole)
If Not krange Is Nothing Then
kline = krange.row
'2011.1.5 修正
If Sheets("勘定科目").Cells(kline, 2).Interior.ColorIndex = 45 Or Sheets("勘定科目").Cells(kline, 15).Interior.ColorIndex = 45 Then
Set gRange = Sheets("残高試算表").Range("B14:B112").Find(what:=kamoku_kashi, LookAt:=xlWhole)
If Not gRange Is Nothing Then
gline = Sheets("残高試算表").Range("B14:B112").Find(what:=kamoku_kashi, LookAt:=xlWhole).row
'今期合計データ(*印なし)
If IsEmpty(Sheets("仕訳帳").Cells(scnt, 5).Value) Then
gl2 = 8 '仕訳帳でE列が空白なら(=決算仕訳でない)、残高試算表の今期合計・貸方合計に集計(H列)。
Else
gl2 = 12 '仕訳帳でE列が空白でないなら(=決算仕訳、通常「*」が入る)残高試算表の決算整理・貸方に集計(L列)。
End If
Sheets("残高試算表").Cells(gline, gl2).Value = Sheets("残高試算表").Cells(gline, gl2).Value + Sheets("仕訳帳").Cells(scnt, scks).Value
'水道光熱費の補助科目の場合、普通預金でも集計(最下段の集計行では、補助科目ははずして関数で集計する)
If kamoku_kashi >= 3091 And kamoku_kashi <= 3094 Then
Sheets("残高試算表").Cells(gcs, gl2).Value = Sheets("残高試算表").Cells(gcs, gl2).Value + Sheets("仕訳帳").Cells(scnt, scks).Value
End If
'通信費の補助科目の場合、普通預金でも集計
If kamoku_kashi = 3111 Or kamoku_kashi = 3112 Or kamoku_kashi = 3113 Or kamoku_kashi = 3114 Or kamoku_kashi = 3115 Then
Sheets("残高試算表").Cells(gct, gl2).Value = Sheets("残高試算表").Cells(gct, gl2).Value + Sheets("仕訳帳").Cells(scnt, scks).Value
End If
'普通預金の補助科目の場合、普通預金でも集計
If kamoku_kashi = 1041 Or kamoku_kashi = 1042 Or kamoku_kashi = 1043 Or kamoku_kashi = 1044 Or kamoku_kashi = 1045 Then
Sheets("残高試算表").Cells(gcf, gl2).Value = Sheets("残高試算表").Cells(gcf, gl2).Value + Sheets("仕訳帳").Cells(scnt, scks).Value
End If
End If
End If
End If
DoEvents
Next scnt
'2009修正(No.15) 開業年チェックの処理
'---------------------------------------
i = 15
Dim kamo_No As String
Dim kamo_Range As Range
'V列の「元入金」残高の消去
Sheets("残高試算表").Range("V60:V111").Value = ""
Do While Sheets("仕訳帳").Cells(i, 10).Value <> ""
kamo_No = 0
kamo_kin = 0
If Sheets("仕訳帳").Cells(i, 10).Value = "223" Then
'相手科目の番号を取得
kamo_No = Sheets("仕訳帳").Range("G" & i).Value
'相手科目の金額を取得
kamo_kin = Sheets("仕訳帳").Range("I" & i).Value
Set kamo_Range = Sheets("残高試算表").Range("B60:B111").Find(what:=kamo_No, LookIn:=xlValues)
If Not kamo_Range Is Nothing Then
Sheets("残高試算表").Cells(kamo_Range.row, 22).Value = kamo_kin + Sheets("残高試算表").Cells(kamo_Range.row, 22).Value
End If
End If
i = i + 1
Loop
集計中表示閉じる:
'2012m追加 完了のメッセージを表示
'----------------------------------
Unload frm_集計中
MsgBox "集計が終わりました。 ", vbOKOnly + vbInformation, "完了"
'2013-11m追加 残高試算表のシート保護
Application.ScreenUpdating = True
pss = "aoirohanako08"
Sheets("残高試算表").Protect DrawingObjects:=True, contents:=True, Scenarios:=True, Password:=pss
Application.EnableEvents = True
'2016-06-29m 以下のチェックは、残高試算表の「集計結果を確認チェック」 へ移行する
'2015-07-09m 資産、負債の科目残高(M60:N110の範囲) がマイナスになったらメッセージを表示
'------------------------------------------------------------------------------------------
'※M60:N110の範囲へ条件書式を設定 マイナスの場合はセルの色をオレンジへ変更
'Set ws = Sheets("残高試算表")
'msg = ""
'
'For r = 60 To 110 '資産・負債の科目(元入金を除く)
' If ws.Cells(r, 13 - (r >= 89)).Value < 0 Then 'セルの値がマイナスだったら
' msg = msg & "科目No. " & ws.Cells(r, 2) & " " & ws.Cells(r, 3) & vbNewLine
' End If
'Next r
'
'If msg <> "" Then
' MsgBox "以下の「勘定科目」の残高がマイナスになっています。入力モレ、入力ミスがないか、確認してください。 " & vbNewLine & "" & vbNewLine _
' & msg, vbOKOnly + vbExclamation, "科目残高エラー"
'End If
'Set ws = Nothing
Exit Sub
ErrorHandler:
If Err.Number > 0 Then
MsgBox "予期せぬエラーが発生しました。Excel を再起動してください。 " & vbNewLine & vbNewLine _
& "No." & Err.Number & " " & Err.Description, vbOKOnly + vbExclamation, "残高試算表の集計"
End If
'残高試算表のシート保護
Application.ScreenUpdating = True
pss = "aoirohanako08"
Sheets("残高試算表").Protect DrawingObjects:=True, contents:=True, Scenarios:=True, Password:=pss
Application.EnableEvents = True
'2013-11m追加 エラーで中断した場合、フォームを閉じる
Unload frm_集計中
End Sub
フォームサンプル7

Option Explicit
'**
' 更新ボタン
' CommandButton1_Click
Private Sub CommandButton1_Click()
Dim Flg As Integer: Flg = 0
Dim i As Integer
' For i = 1 To 2
' MsgBox MdCheckCombox(Me("ComboBox" & i))
' Next i
Debug.Print MdCheckComboxs(Me)
' For i = 1 To 5
' flg = flg + MdCheckText(Me("TextBox" & i))
' Next i
' If MdCheckTexts(Me) = True Then
' MsgBox "未入力箇所があります"
' End If
End Sub
'**
' キャンセルボタン
' CommandButton2_Click
Private Sub CommandButton2_Click()
Unload Me
End Sub
'**
' テキストボックス空欄チェック : 単数
' @param {tBox : MSForms.TextBox} テキストボックス
' @return {FmCheckText : Boolean}
Function FmCheckText(tBox As MSForms.TextBox) As Boolean
With tBox
If .Value = "" Or IsNull(.Value) Then
.BackColor = RGB(245, 200, 238)
FmCheckText = True
Exit Function
End If
End With
FmCheckText = False
End Function
'**
' テキストボックス空欄チェック : 複数
' @return {FmCheckTexts : boolean}
Function FmCheckTexts() As Boolean
Dim Flg As Integer: Flg = 0
Dim myControl As Control
For Each myControl In Controls
If TypeName(myControl) = "TextBox" Then
If myControl.Value = "" Or IsNull(myControl.Value) Then
myControl.BackColor = RGB(245, 200, 238)
Flg = Flg + 1
End If
End If
Next myControl
If Flg > 0 Then
CheckText = True
Else
CheckText = False
End If
End Function
'**
' コンボボックス空欄チェック : 単数
' @param {cBox : MSForms.ComboBox} コンボボックス
' @return {FmCheckCombox : Boolean}
Function FmCheckCombox(cBox As MSForms.ComboBox) As Boolean
With cBox
If .Value = "" Or IsNull(.Value) Then
.BackColor = RGB(245, 200, 238)
FmCheckCombox = True
Exit Function
End If
End With
FmCheckCombox = False
End Function
'**
' コンボボックス空欄チェック : 複数
' @return {FmCheckComboxs : boolean}
Function FmCheckComboxs() As Boolean
Dim Flg As Integer: Flg = 0
Dim myControl As Control
For Each myControl In Controls
If TypeName(myControl) = "ComboBox" Then
If myControl.Value = "" Or IsNull(myControl.Value) Then
myControl.BackColor = RGB(245, 200, 238)
Flg = Flg + 1
End If
End If
Next myControl
If Flg > 0 Then
FmCheckComboxs = True
Else
FmCheckComboxs = False
End If
End Function
Private Sub UserForm_Click()
End Sub
フォームサンプル6

Option Explicit
' **
' ユーザーフォーム初期化
'
Private Sub UserForm_Initialize()
Call Sheet7.LoadData
Call LoadIdList
End Sub
' **
' 更新ボタン処理
'
Private Sub CommandButton1_Click()
If CheckFields Then
Dim p As Person: Set p = New Person
p.Name = TextBox1.Text
p.Birthday = TextBox2.Value
p.Gender = "女"
If OptionButton1.Value = True Then p.Gender = "男"
p.Active = CheckBox1.Value
If ComboBox1.Value = "New" Then
p.Id = Sheet7.MaxId + 1
Call Sheet7.AddPerson(p)
Else
p.Id = ComboBox1.Value
Call Sheet7.UpdatePerson(p)
End If
Call LoadFields(p.Id)
Call LoadIdList
End If
End Sub
' **
' ユーザーフォーム閉じる
'
Private Sub CommandButton2_Click()
Unload Me
End Sub
'**
' コンボボックス変更時の処理切り分け
' (Idが選択時、"New"選択時の処理切り分け)
Private Sub ComboBox1_Change()
With ComboBox1
If IsValidId Then
If IsNumeric(.Value) Then
Call LoadFields(.Value)
Else
Call ClearFields
End If
End If
End With
End Sub
' **
' コンボボックスへのテーブルIDリスト読み込み
'
Private Sub LoadIdList()
With Sheet7.ListObjects(1)
If .ListRows.Count > 1 Then
Dim lists As Variant: lists = .ListColumns(1).DataBodyRange
ComboBox1.List = lists
End If
End With
ComboBox1.AddItem "New"
End Sub
' **
' コンボボックスのId値が正しいかどうか
' (Idが1以上かつ最大値以下または"New"かどうか)
' @return {boolean}
Private Property Get IsValidId() As Boolean
IsValidId = False
With ComboBox1
If (.Value > 0 And .Value <= Sheet7.MaxId) Or (.Value = "New") Then
IsValidId = True
End If
End With
End Property
' **
' 指定Idでのレコードデータの呼び出し
' @param {myId:Long} 呼び出すレコードデータのId値
Private Sub LoadFields(ByVal myId As Long)
With Sheet7.Persons(myId)
ComboBox1.Value = myId
TextBox1.Value = .Name
TextBox2.Value = .Birthday
Call SetGender(.Gender)
CheckBox1.Value = .Active
Label5.Caption = .Age
End With
End Sub
' **
' 性別文字列(男、女)をもとにオプションボタンを設定
' @param {myGender:String} 性別文字列
Private Sub SetGender(ByVal myGender As String)
OptionButton2.Value = True
If myGender = "男" Then OptionButton1.Value = True
End Sub
' **
' 各コントロールの値をクリア
'
Private Sub ClearFields()
TextBox1.Value = ""
TextBox2.Value = ""
OptionButton1.Value = True
CheckBox1.Value = True
Label5.Caption = ""
End Sub
' **
' 各コントロール値が正しく入力されているかどうかを判定する
'
' @return {Boolean}
'
Private Function CheckFields() As Boolean
CheckFields = True
If Not IsValidId Then
MsgBox "「ID」は1以上IDの最大値以下の数値または""New""を入力してください", vbInformation
CheckFields = False
End If
If Len(TextBox1.Text) = 0 Then
MsgBox "「名前」に入力してください", vbInformation
CheckFields = False
End If
If IsDate(TextBox2.Value) Then
MsgBox "「誕生日」には日付を入力してください", vbInformation
CheckFields = False
End If
End Function
フォームサンプル5

Option Explicit
'**
' 閉じるボタン
'------------------------------------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub
'**
' チェックボタン
' チェックボタン内容の確認
'------------------------------------------------------------------
Private Sub CommandButton2_Click()
Dim i As Integer
Dim buf As String
For i = 1 To 9
If Controls("OptionButton" & i) = True Then
buf = buf & Controls("OptionButton" & i).Caption & vbCrLf
End If
Next i
'文字列最後からvbCrLf(2文字分)を除いて抽出
MsgBox Mid(buf, 1, Len(buf) - 2)
End Sub
'**
' チェックボタン
' 配列を使用したチェックボタン内容の確認
'------------------------------------------------------------------
Private Sub CommandButton3_Click()
Dim arr As Variant: arr = Array("りんご", "みかん", "バナナ", "和食", "洋食", "中華", "晴れ", "曇り", "雨")
Dim i As Integer
Dim buf As String
For i = 1 To 9
If Controls("OptionButton" & i) = True Then
buf = buf & arr(i - 1) & vbCrLf
End If
Next i
'文字列最後からvbCrLf(2文字分)を除いて抽出
MsgBox Mid(buf, 1, Len(buf) - 2)
End Sub
'**
' フォーム初期化
' オプションボタンへの動的にgroupname設定
'------------------------------------------------------------------
Private Sub UserForm_Initialize()
With Me
.OptionButton1.Value = True
.OptionButton4.Value = True
.OptionButton7.Value = True
' Dim c As Control
' Dim cnt As Integer, i As Integer
' 'オプションボタン数チェック
' For Each c In .Controls
' If TypeName(c) = "OptionButton" Then
' cnt = cnt + 1
' End If
' Next c
' 'グループ名設定
' For i = 1 To cnt
' With .Controls("OptionButton" & i)
' Select Case i
' Case Is < 4
' .GroupName = "gp1"
' Case Is < 7
' .GroupName = "gp2"
' Case Else
' .GroupName = "gp3"
' End Select
' End With
' Next i
End With
End Sub
■

Option Explicit
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
End Sub
Private Sub UserForm_Initialize()
'インデックス番号取得→インデックスより後のシートをコンボボックスに要素追加
With Me.ComboBox1
Dim i As Integer
For i = 1 To Worksheets.Count
If i > SheetIndexCheck("イメージリスト") Then
.AddItem Worksheets(i).Name
End If
Next i
End With
'配列→コンボボックスリスト
With Me.ComboBox2
.List = Array("メニュー1", "メニュー2", "メニュー3", "メニュー4", "メニュー5", "メニュー6", "メニュー7", "メニュー8", "メニュー9", "メニュー10")
End With
'クリア
With Me.ComboBox3
.List = Array("メニュー1", "メニュー2", "メニュー3", "メニュー4", "メニュー5", "メニュー6", "メニュー7", "メニュー8", "メニュー9", "メニュー10")
.Clear
End With
'日付コンボボックス
With Me.ComboBox4
.List = YearArrayCreate()
End With
With Me.ComboBox5
.RowSource = "A2:B13"
End With
End Sub
フォームサンプル3

Option Explicit
'**
' フォーム初期化
'------------------------------------------------------------------
Private Sub UserForm_Initialize()
With Me
.Caption = "サンプルフォーム"
.Width = 300
.Height = 250
End With
End Sub
'**
' 閉じるボタン
'------------------------------------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub
'**
' チェックボタン
' textboxがmultiline設定の場合、「vbCrLf」を置換える
'------------------------------------------------------------------
Private Sub CommandButton2_Click()
With TextBox1
If InStr(.Value, vbLf) > 0 Then
.Text = Replace(.Text, vbCrLf, "")
Else
Debug.Print .Value
End If
End With
End Sub
'**
' フォーカス外れイベント
'------------------------------------------------------------------
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox2
If Len(.Value) < 4 Or Not IsNumeric(.Value) Then
MsgBox "4~8文字の数値を入力してください"
Cancel = True
End If
End With
End Sub
フォームサンプル2

Option Explicit
'**
' フォーム初期化
'------------------------------------------------------------------
Private Sub UserForm_Initialize()
With Me
.Caption = "サンプルフォーム"
.Width = 300
.Height = 250
.CheckBox1.Value = 1
.CheckBox4.Value = 1
End With
End Sub
'**
' 閉じるボタン
'------------------------------------------------------------------
Private Sub CommandButton1_Click()
Unload Me
End Sub
'**
' チェックボタン
'------------------------------------------------------------------
Private Sub CommandButton2_Click()
Dim C As Control
With FormSample2
For Each C In .Controls
If TypeName(C) = "CheckBox" Then
Debug.Print C.Name, C.Value
End If
Next C
Dim i As Integer
For i = 1 To 4
Set C = .Controls("CheckBox" & i)
Debug.Print C.Name, C.Value
Next i
End With
End Sub