天使と悪魔選手権

フォーム上にチェックボックスが20あります。
チェックすると別のシートに 1 が入るようにしたいです。

A~Hには項目が設定されているので 1 が入るのはIからに。
16行目までは固定のデータが入っていて、17行目から増えていき、
最終行がどの行になるかは未定です。

チェックボックス1   から  チェックボックス20
  I,17       から    AB,17
  I,18       から    AB,18
  I,100       から    AB,100

          

に 順に 1 を入れるにはどうしたらよいのでしょうか。

教えてください。よろしくお願いします。

質問者からの補足コメント

  • tatsu99さん

    I18に1が入るタイミングは、A18からH18にデータが入った時点です。
    データが入る業と1が入る業を一致するようにしたいです。
    AからHにデータを入れるVBAで作成してあります。

    チェックボックスを外した場合、空欄にしたいです。

      補足日時:2016/07/09 23:53
  • tatsu99さん

    もうひとつ教えてください。
    同様のシートが複数ある場合、どうしたらよいですか?

      補足日時:2016/07/10 22:20
  • tatsu99さん

    基本シートがあり、条件によって複数のシートにデータを抽出しています。
    その条件に合うシートのみを対象としたいです。
    基本シートから条件によっての振り分けはselect caseで行っています。

    A条件ならシート1
    B条件ならシート2
    C条件ならシート3

    F条件ならシート6

    となります。

      補足日時:2016/07/10 23:59

A 回答 (4件)

以下のようにしてください


----------------------------------------------
Option Explicit
Private Sub CheckBox1_Click()
Call setCellValue(CheckBox1.Object, 1)
End Sub

Private Sub CheckBox2_Click()
Call setCellValue(CheckBox2.Object, 2)
End Sub
'途中、省略 CheckBox3~CheckBox19も同様につくる

Private Sub CheckBox20_Click()
Call setCellValue(CheckBox20.Object, 20)
End Sub
'チェックボックスに対応するセルの設定
Private Sub setCellValue(ByRef cBox As Object, ByVal colBias As Long)
Dim row As Long
Dim sheetName As String
sheetName = GetSheetName
MsgBox ("sheetname=" & sheetName)
Worksheets(sheetName).Select
row = getRow()
If row = 0 Then
Exit Sub
End If
Cells(row, colBias + 8).Select
If cBox.Value = True Then
Cells(row, colBias + 8).Value = 1
Else
Cells(row, colBias + 8).Value = ""
End If
End Sub
'チェックボックスが設定すべき行を取得する関数
Private Function getRow()
Dim i As Long
Dim colmax As Long
Dim rowmax As Long
'最後の行、列を取得
ActiveCell.SpecialCells(xlLastCell).Select
colmax = ActiveCell.Column
rowmax = ActiveCell.row
'A列に値が設定されている最大の行数を取得する
For i = 1 To rowmax
If Cells(i, 1).Value = "" Then
getRow = i - 1
Exit Function
End If
Next
'最後までA列に値があれば最後の行とする
getRow = rowmax
End Function

'条件に従いシート名を決定する
Private Function GetSheetName()
Dim jyoken As Long
jyoken = 3
Select Case jyoken
Case 1
GetSheetName = "sheet1"
Case 2
GetSheetName = "sheet2"
Case 3
GetSheetName = "sheet3"
Case 4
GetSheetName = "sheet4"
Case 5
GetSheetName = "sheet5"
Case 6
GetSheetName = "sheet6"
End Select
End Function

----------------------------------------------
GetSheetNameで処理対象となるシート名を決定しています。
ここは、あなたの条件を記述してください。
GetSheetNameでどのような場合でもsheet1~sheet6の何れかを返すようにしてください。
シート名が返されたとき、そのシートに対して処理します。
実際に返す名前は、sheet1でなくてもかまいません。(aaaのシートが存在すればaaaなどでもOKです。)
MsgBox ("sheetname=" & sheetName)でシート名を表示しています。不要であればコメントアウトしてください。
    • good
    • 1

>もうひとつ教えてください。


>同様のシートが複数ある場合、どうしたらよいですか?
具体的には、どのように複数あるのですか?
例えば、sheet1,sheet2,sheet3,sheet4とあって、
チェックボックス1をクリックした時、sheet1,sheet2,sheet3,sheet4の全てに同じ動作をするようにしたいのでしょうか?
それとも、ある条件では、sheet1のみを対象にし、別の条件では、sheet2を対象にしたいということでしょうか?
その場合は、その条件を具体的に提示していただかないと、回答できません。
    • good
    • 0

チェックボックス1がチェックされたとき、何行のI列に設定するかをどのように決めるかですが、


とりあえず、A列に値が設定されている最大の行に設定するようにしました。
もし、A,B,C,D,E,F,G,Hの全てに値が設定されている最大の行が望みであれば、その旨補足してください。
プログラムは以下のようになります。
----------------------------------------------------
Option Explicit
Private Sub CheckBox1_Click()
Call setCellValue(CheckBox1.Object, 1)
End Sub

Private Sub CheckBox2_Click()
Call setCellValue(CheckBox2.Object, 2)
End Sub
'途中、省略 CheckBox3~CheckBox19も同様につくる

Private Sub CheckBox20_Click()
Call setCellValue(CheckBox20.Object, 20)
End Sub
'チェックボックスに対応するセルの設定
Private Sub setCellValue(ByRef cBox As Object, ByVal colBias As Long)
Dim row As Long
row = getRow()
If row = 0 Then
Exit Sub
End If
Cells(row, colBias + 8).Select
If cBox.Value = True Then
Cells(row, colBias + 8).Value = 1
Else
Cells(row, colBias + 8).Value = ""
End If
End Sub
'チェックボックスが設定すべき行を取得する関数
Private Function getRow()
Dim i As Long
Dim colmax As Long
Dim rowmax As Long
'最後の行、列を取得
ActiveCell.SpecialCells(xlLastCell).Select
colmax = ActiveCell.Column
rowmax = ActiveCell.row
'A列に値が設定されている最大の行数を取得する
For i = 1 To rowmax
If Cells(i, 1).Value = "" Then
getRow = i - 1
MsgBox ("getRow=" & getRow)
Exit Function
End If
Next
'最後までA列に値があれば最後の行とする
getRow = rowmax
End Function

---------------------------------------------------------------
    • good
    • 0

どのようにしたいのかが、良く判りません。


質問1.チェックボックス1をチェックすると、I17のセルに1を設定しますが、
I18のセルに1を設定するのは、どのタイミングですか?
質問2.チェックボックス1をチェックして、I17のセルに1設定した後、
チェックボックス1のチェックをはずした場合は、どのような結果を期待しますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!