【広告】

しのちーチャンネル

エクセルマクロで作った透析データベース~透析条件フォーム

透析条件を編集するためのフォームです。透析条件とは透析時間から始まって使う機材の名前や針を刺す場所などの重要なデーターです。

選択して入力できるようにするためにコンボボックスやリストボックスを多用しております。コンボボックスやリストボックスのリスト一覧をエクセルのワークシート テンプレート集 から読み込みます。

患者さんの氏名を検索してその人の透析条件を表示させます。条件を編集したら元のエクセルのワークシートへ転送します。

氏名の検索は以前このブログで取り上げさせていただきました検索窓をすべてのフォーム共通で使っております。

エクセルのワークシートを使ったデータベースです。ワークシートからデーターを読み込みまた変更したものをワークシートへ転送します。

下のフォームは透析条件編集フォームです。

透析条件フォーム


Dim Touseki As Object
Dim Tcolor As Integer
Dim MaxRows As Long
Dim Maxl As Long
Dim ListIdx As Integer
Dim IdxNo As Integer

Private Type MemberData
    Simei1 As String
    Simei4 As String
    TosekiJikan As String
    Ryuryo As String
    BAA As String
    BAV As String
    BAS As String
    Dia As String
    Hepa As String
    LowHepa As String
    PenRes(3) As String
    iro As Integer
    HenkoSwitch As Boolean
End Type

Dim OldMember() As MemberData
Dim YMD(2, 3) As String
Dim ChangeSwitch As Boolean
Dim l As Integer
Dim Ranser As Boolean
Private Sub UserForm_Initialize()
    Set Touseki = Worksheets("透析患者リスト")
    Touseki.Activate
    MaxRows = Touseki.UsedRange.Rows.Count
    ListIdx = 0
    ChangeSwitch = False
   
    Call Member
    透析条件テンプ作成
    OptionButton1.Value = True
End Sub
Private Sub Member()
    ReDim OldMember(MaxRows)
   
    l = 0

        For i = 3 To MaxRows
            With OldMember(l)
                .Simei4 = Touseki.Cells(i, 2)
                .Simei1 = Touseki.Cells(i, 3)
                .TosekiJikan = Touseki.Cells(i, 16)
                .Ryuryo = Touseki.Cells(i, 11)
                .BAA = Touseki.Cells(i, 12)
                .BAV = Touseki.Cells(i, 13)
                .BAS = Touseki.Cells(i, 14)
                .Dia = Touseki.Cells(i, 15)
                .Hepa = Touseki.Cells(i, 9)
                .LowHepa = Touseki.Cells(i, 10)
                .PenRes(0) = Touseki.Cells(i, 100)
                .PenRes(1) = Touseki.Cells(i, 101)
                .PenRes(2) = Touseki.Cells(i, 102)
                .iro = Touseki.Cells(i, 1).Interior.ColorIndex
                .HenkoSwitch = False
            End With
            l = l + 1
        Next
        Maxl = l
End Sub
Private Sub 氏名box()
    Dim CelNo(3) As String
   
    Set Touseki = Worksheets("透析患者リスト")
    ListBox1.Clear
    ListIdx = 0
   
    If OptionButton1.Value = True Then

        l = 0
        Do ‘赤(月水金AM)の処理
            Do While OldMember(l).iro = 3
                Jyouken.ListBox1.AddItem (OldMember(l).Simei1)
                l = l + 1
            Loop
            l = l + 1
        Loop While l < Maxl
       
        l = 0
        Do ‘青(月水金PM)の処理
            Do While OldMember(l).iro = 5
                Jyouken.ListBox1.AddItem (OldMember(l).Simei1)
                l = l + 1
            Loop
            l = l + 1
        Loop While l < Maxl
       
        With Jyouken.ListBox1
            .ListIndex = ListIdx
        End With
    End If
   
    If OptionButton2.Value = True Then
        l = 0
        Do ‘黄(火木土AM)の処理
            Do While OldMember(l).iro = 6
                Jyouken.ListBox1.AddItem (OldMember(l).Simei1)
                l = l + 1
            Loop
            l = l + 1
        Loop While l < Maxl
       
        l = 0
        Do ‘緑(火木土PM)の処理
            Do While OldMember(l).iro = 4
                Jyouken.ListBox1.AddItem (OldMember(l).Simei1)
                l = l + 1
            Loop
            l = l + 1
        Loop While l < Maxl
   
        With Jyouken.ListBox1
            .ListIndex = ListIdx
        End With
       
    End If
End Sub
Private Sub Optionbutton1_Change()
    If OptionButton1.Value = True Then
        If ChangeSwitch = True Then
            保存忘れ防止装置
   &nbsp
;    End If
        ListIdx = 0
        氏名box
    End If
End Sub
Private Sub Optionbutton2_Change()
    If OptionButton2.Value = True Then
        If ChangeSwitch = True Then
            保存忘れ防止装置
        End If
        ListIdx = 0
        氏名box
    End If
End Sub
Private Sub ListBox1_Click()
    If ChangeSwitch = True Then
        保存忘れ防止装置
    End If
    ListIdx = ListBox1.ListIndex
    Namae = ListBox1.List(ListIdx)
    l = Kensaku(ByVal Namae)
                  
    Call 個別へ表示(ByVal l)
End Sub
Private Sub CxBtn_Click()
    If ChangeSwitch = True Then
        保存忘れ防止装置
    End If
    Rtn = MsgBox("転送せずに終了します。それでよければOKを押してください。", vbOKCancel)
    If Rtn = vbOK Then
        Unload Jyouken
        AboutForm.Show
    End If
End Sub
Private Sub ExitBtn_Click()
    If ChangeSwitch = True Then
        保存忘れ防止装置
    End If
    If Ranser = False Then
        Rtn = MsgBox("今まで行った変更を、ワークシートへ転送します。よろしければOKを押してください。", vbOKCancel)
        If Rtn = vbOK Then
            変更を保存して終了
           
            Unload Jyouken
            AboutForm.Show
        End If
       
    End If
    Ranser = False
End Sub
Private Sub CommandButton1_Click()
    Call 個別へ表示(ByVal l)
End Sub
Private Sub CommandButton2_Click()
    Dim Namae As String
    Dim MeNamae As Object
   
    OptionButton1.Value = False
    OptionButton2.Value = False
    Namae = TextBox1.Text
    Set MeNamae = Jyouken
    Call 検索(Namae, MeNamae)
End Sub
Sub 個別へ表示(ByVal l As Integer)
   
    With OldMember(l)
        Label31.Caption = .Simei4
        ComboBox18.Text = .TosekiJikan
        ComboBox10.Text = .Ryuryo
        ComboBox14.Text = .BAA
        ComboBox15.Text = .BAV
        ComboBox16.Text = .BAS
        ComboBox7.Text = .Dia
        ComboBox8.Text = .Hepa
        ComboBox9.Text = .LowHepa
        ComboBox11.Text = .PenRes(0)
        ComboBox12.Text = .PenRes(1)
        ComboBox13.Text = .PenRes(2)
       
        Select Case .iro
            Case 3 ‘赤
                ComboBox17.Text = "月水金AM"
                ComboBox17.BackColor = &HFF&
            Case 5 ‘青
                ComboBox17.Text = "月水金PM"
                ComboBox17.BackColor = &HFF0000
            Case 6 ‘黄
                ComboBox17.Text = "火木土AM"
                ComboBox17.BackColor = &HFFFF&
            Case 4 ‘緑
                ComboBox17.Text = "火木土PM"
                ComboBox17.BackColor = &HFF00&
            Case Else  ‘白、その他
                ComboBox17.Text = "その他"
                ComboBox17.BackColor = &HFFFFFF
        End Select
    End With
    ChangeSwitch = False
   
End Sub
Public Function Kensaku(ByVal Namae As String) As Integer
    Dim kensakuSu As Integer
   
    kensakuSu = 0
    For l = 0 To Maxl
        If OldMember(l).Simei1 = Namae Then
            kensakuSu = kensakuSu + 1
            If kensakuSu > 1 Then
                MsgBox ("透析患者リストの中に、同名で2件以上のデータがあります。不要なデータを削除して下さい。")
                Exit For
            End If
            Kensaku = l
        End If
    Next
End Function
Sub 保存忘れ防止装置()
    If ChangeSwitch = True Then
        ChangeSwitch = False
        Call 透析情報変数の更新(ByVal l)
    End If
End Sub
Sub 変更を保存して終了()
    Dim CelNo(3) As String
    Dim i As Integer
   
    l = 0
   
    Jyouken.Hide
   
    For i = 3 To MaxRows
        With OldMember(l)
&nb
sp;           If .HenkoSwitch = True Then
           
               
                ‘透析クール(色)の転送
                    Touseki.Cells(i, 1).Activate
                    Touseki.Cells(i, 1).Interior.ColorIndex = .iro
                ‘名前(カナ)転送
                    Touseki.Cells(i, 3).Activate
                    Touseki.Cells(i, 3) = .Simei1
                ‘ヘパリンの転送
                    Touseki.Cells(i, 9).Activate
                    Touseki.Cells(i, 9) = .Hepa
                ‘低分子ヘパリンの転送
                    Touseki.Cells(i, 10).Activate
                    Touseki.Cells(i, 10) = .LowHepa
                ‘透析時間の転送
                    Touseki.Cells(i, 16).Activate
                    Touseki.Cells(i, 16) = .TosekiJikan
                ‘血液流量の転送
                    Touseki.Cells(i, 11).Activate
                    Touseki.Cells(i, 11) = .Ryuryo
                ‘ブラッドアクセスの転送
                    Touseki.Cells(i, 12).Activate
                    Touseki.Cells(i, 12) = .BAA
                    Touseki.Cells(i, 13).Activate
                    Touseki.Cells(i, 13) = .BAV
                    Touseki.Cells(i, 14).Activate
                    Touseki.Cells(i, 14) = .BAS
                ‘ダイアライザーの転送
                    Touseki.Cells(i, 15).Activate
                    Touseki.Cells(i, 15) = .Dia
               
                ‘ペンレスの転送
                    Touseki.Cells(i, 100).Activate
                    Touseki.Cells(i, 100) = .PenRes(0)
                    Touseki.Cells(i, 101).Activate
                    Touseki.Cells(i, 101) = .PenRes(1)
                    Touseki.Cells(i, 102).Activate
                    Touseki.Cells(i, 102) = .PenRes(2)
                   
            End If
            l = l + 1
        End With
    Next
   
    MsgBox ("データの転送が終了しました")
   
End Sub
Sub 透析情報変数の更新(ByVal l As Integer)

    With OldMember(l)
        .HenkoSwitch = True
        .TosekiJikan = ComboBox18.Text
        .Ryuryo = ComboBox10.Text
        .BAA = ComboBox14.Text
        .BAV = ComboBox15.Text
        .BAS = ComboBox16.Text
        .Dia = ComboBox7.Text
        .Hepa = ComboBox8.Text
        .LowHepa = ComboBox9.Text
        .PenRes(0) = ComboBox11.Text
        .PenRes(1) = ComboBox12.Text
        .PenRes(2) = ComboBox13.Text
        .iro = Tcolor
    End With
End Sub
Sub 透析条件テンプ作成()
    Dim Tempulist As Object
    Dim Tate As Integer
    Dim Yoko As Integer
   
    Set Tempulist = Worksheets("テンプレート集")
       
    ‘血液流量
    Tate = 3
    Yoko = 6
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox10.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘透析時間
    Tate = 3
    Yoko = 12
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox18.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <&
gt; ""
   
    ‘ブラッドアクセスA
    Tate = 3
    Yoko = 7
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox14.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘ブラッドアクセスV
    Tate = 3
    Yoko = 8
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox15.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘ブラッドアクセスS
    Tate = 3
    Yoko = 9
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox16.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘ダイアライザ
    Tate = 3
    Yoko = 10
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox7.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘ヘパリン
    Tate = 3
    Yoko = 4
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox8.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘低分子ヘパリン
    Tate = 3
    Yoko = 5
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox9.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘ペンレス
    Tate = 3
    Yoko = 11
    Do
        Tempu = Tempulist.Cells(Tate, Yoko)
        ComboBox11.AddItem (Tempu)
        ComboBox12.AddItem (Tempu)
        ComboBox13.AddItem (Tempu)
        Tate = Tate + 1
    Loop While Tempu <> ""
   
    ‘透析クール
    With ComboBox17
        .AddItem ("月水金AM")
        .AddItem ("月水金PM")
        .AddItem ("火木土AM")
        .AddItem ("火木土PM")
        .AddItem ("その他")
    End With
End Sub
Private Sub ComboBox10_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox11_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox12_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox13_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox14_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox15_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox16_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox17_Change()
    ChangeSwitch = True
    Select Case ComboBox17.ListIndex
    Case 0 ‘赤
        Tcolor = 3
        ComboBox17.BackColor = &HFF&
    Case 1 ‘青
        Tcolor = 5
        ComboBox17.BackColor = &HFF0000
    Case 2 ‘黄
        Tcolor = 6
        ComboBox17.BackColor = &HFFFF&
    Case 3 ‘緑
        Tcolor = 4
        ComboBox17.BackColor = &HFF00&
    Case Else  ‘白、その他
        Tcolor = 2
        ComboBox17.BackColor = &HFFFFFF
End Select
End Sub
Private Sub ComboBox18_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox7_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox8_Change()
    ChangeSwitch = True
End Sub
Private Sub ComboBox9_Change()
    ChangeSwitch = True
End Sub

コメント

タイトルとURLをコピーしました