三流君 ken3のmemo置き場

メモ置き場、保管庫として利用。まとまっていませんがヨロシク

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


広告:


[記事一覧、バックナンバーを見る]

○○さんへ QA20100602 Excel ユーザーフォーム オプションボタンの処理

メールで、

>入力フォームを書籍からコピーして
>色々な本を広げていますがこれ以上は進みません
>EXCELのフォームでAccessフォームの様なレコード移動ボタンを付けたフォームを
>作っています
>
>問題はオプションボタンの結果の処理をG列に反映させることと

と、質問を受けたので、挑戦してみました。

実行可能なファイルは :
http://www.ken3.org/vba/zip/qa20100602.html
↑にExcel2003ですが、置いてあります。使ってみて小細工を笑ってください。

G列に
入院形態
○任意入院
医療保護入院
措置入院
○応急入院
○緊急措置
をセットする感じでテストしてみました。

データセット処理

グローバル変数 DestRow で現在の行数をカウントしているみたいだったので、
単純にデータのセットは、

Private Sub OptionButton1_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton1.Caption
End Sub

Private Sub OptionButton2_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton2.Caption
End Sub

みたいに、押された_Clickのイベントで、.Captionをセットしただけです。

オプションボタンの結果の処理をG列に転記させるそんなテスト動画。
テストの動画: http://www.youtube.com/watch?v=3imcxqHdoZg

↑これだけだと、
オプションボタンをクリックでデータ(値)は書き込めたけど、
データの移動処理で何もリンクしていないので、
×選択値がそのまま
×移動した値がフォームに選択されない
そんな 移動後の処理が必要だと気が付いた・・・

データ移動時のオプションボタン処理

Excel UserForm側でデータを移動したときに、
移動先のG列とオプションボタンをつなげる(On/Offをコントロール)

グローバル変数 DestRow で現在の行数をカウントしているので、
初めに全てのボタンをOFFにしてから、G列の値を比べてONにしてみました。

    'G列の値で オプションボタンをチェック
        '全てOFFにする
        OptionButton1.Value = False
        OptionButton2.Value = False
        OptionButton3.Value = False
        OptionButton4.Value = False
        OptionButton5.Value = False
    '元々あるGの値をチェックする
    strRang = "G" & DestRow
    If OptionButton1.Caption = Range(strRang) Then OptionButton1.Value = True
    If OptionButton2.Caption = Range(strRang) Then OptionButton2.Value = True
    If OptionButton3.Caption = Range(strRang) Then OptionButton3.Value = True
    If OptionButton4.Caption = Range(strRang) Then OptionButton4.Value = True
    If OptionButton5.Caption = Range(strRang) Then OptionButton5.Value = True

↑特に工夫もなく、縦に並べただけです・・・(ぉぃぉぃ)

テストの動画: http://www.youtube.com/watch?v=y1KMsJTihLg

ソース全体

実行可能なファイルは :
http://www.ken3.org/vba/zip/qa20100602.html
↑にExcel2003ですが、置いてあります。使ってみて小細工を笑ってください。


Option Explicit

Dim FirstRow As Long
Dim LastRow As Long
Dim DestRow As Long

'オプションボタンがクリックされたら単純にG列にそのボタンの.Captionをセットする
Private Sub OptionButton1_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton1.Caption
End Sub

Private Sub OptionButton2_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton2.Caption
End Sub

Private Sub OptionButton3_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton3.Caption
End Sub

Private Sub OptionButton4_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton4.Caption
End Sub
Private Sub OptionButton5_Click()
    Dim strRang As String
    strRang = "G" & DestRow
    Range(strRang) = Me.OptionButton5.Caption
End Sub

Private Sub 削除_Click()

    Dim strRang As String

    strRang = "A" & DestRow & ":ZZ" & DestRow

    If MsgBox(Range("C" & DestRow).Value & " 様を削除します。", vbYesNo) = vbNo Then
        Exit Sub  'NOの時削除中止(Ken3蛇足で勝手に追加)
    End If

    Rows(DestRow).Delete '行削除

    DestRow = DestRow - 1

    LastRow = LastRow - 1

    LinkCell

End Sub


Private Sub UserForm_Initialize()

    Worksheets("会員リスト").Select

    FirstRow = Range("A1").CurrentRegion.Row + 1

    LastRow = Range("A1").CurrentRegion.Rows.Count

    DestRow = FirstRow

    LinkCell

End Sub

Private Sub 先頭_Click()

    DestRow = FirstRow

    LinkCell

End Sub


Private Sub 前_Click()

    If DestRow > FirstRow Then

        DestRow = DestRow - 1

        LinkCell

    End If

End Sub

Private Sub 後_Click()

    If DestRow < LastRow Then

        DestRow = DestRow + 1

        LinkCell

    End If

End Sub


Private Sub 最後_Click()

    DestRow = LastRow

    LinkCell

End Sub

Private Sub 新規_Click()

    LastRow = LastRow + 1

    DestRow = LastRow

    LinkCell

End Sub

Sub LinkCell()

    Dim strRang As String

    Rows(DestRow).Select  '行選択、蛇足で追加 Ken3

    strRang = "A" & DestRow

    TextBox1.ControlSource = strRang

    strRang = "B" & DestRow

    TextBox2.ControlSource = strRang

    strRang = "C" & DestRow

    TextBox3.ControlSource = strRang

    strRang = "D" & DestRow

    TextBox4.ControlSource = strRang

    strRang = "E" & DestRow

    TextBox5.ControlSource = strRang

    strRang = "F" & DestRow

    TextBox6.ControlSource = strRang


    'G列の値で オプションボタンをチェック
        '全てOFFにする
        OptionButton1.Value = False
        OptionButton2.Value = False
        OptionButton3.Value = False
        OptionButton4.Value = False
        OptionButton5.Value = False
    '元々あるGの値をチェックする
    strRang = "G" & DestRow
    If OptionButton1.Caption = Range(strRang) Then OptionButton1.Value = True
    If OptionButton2.Caption = Range(strRang) Then OptionButton2.Value = True
    If OptionButton3.Caption = Range(strRang) Then OptionButton3.Value = True
    If OptionButton4.Caption = Range(strRang) Then OptionButton4.Value = True
    If OptionButton5.Caption = Range(strRang) Then OptionButton5.Value = True
   
    
    Label1.Caption = DestRow - 1 & "  /  " & LastRow - 1

End Sub



三流君へ メッセージを送る

全ての質問に答えることはできませんが、
ダメもとで、気軽に質問、感想、メッセージを送ってくださいね・・・

感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)
例:[XXXXさんへ回答例]←みたいに回答していたり...


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)