[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルをラジオボタンのようにする方法を教えてください』(hahaha)
Excel2003を使用しています。 下記例のような回答表をBVAを使用し作成したいと思っておりますが、 うまく出来ませんでした。どなたかお力を貸して頂きたく質問致します。
例) 質問項目 @果物はすきですか? □YES □NO Aすきな果物は何ですか? □リンゴ □みかん □ぶどう □その他 ・ ・ ・
このようにいくつか質問項目があり、1つの質問に対して複数ある回答項目から 1つだけ回答をユーザが答えるという表を作成したいと思っております。 選択(□のセルをダブルクリック)をする事で、□が■に変換されるようにしたいです。
この場合の条件として、1つの質問に対して、回答は1つだけ選択が出来るように したい為、もし@で、YESを選択し、やはりNOを選択し直した場合は Excelラジオボタンのように自動的にYESの選択が外れ、NOのみが選択されるように したいのです。 そして、2つ目の条件は質問@とAはそれぞれ1つだけ回答を選択出来るように したいのです。 質問@でYESを選択し、質問Aでリンゴを選んでも質問@のYESの選択は外れない ようにしたいという事です。 そして3つ目の条件は、回答して□が■となっていた際に改めて■を選択すると □へ戻る(何も回答していない状態へ戻す)ようにしたいのです。
1つずつ条件を満たすVBAは作成できたのですが、3つの条件を満たすように出来ず 困っております。
質問項目が多数ある為、ラジオボタンではなくVBAを使用したいと思っております。
質問が長くなり申し訳御座いません。宜しくお願い致します。
選択されたときは同じ質問の他の選択肢を非選択に。 選択解除されたときはその選択肢のみを非選択に。 (r)
質問毎に選択肢の範囲を名前定義でグループ化しておけば、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Error Resume Next If Not Application.Intersect(Range("問01"), Target) Is Nothing Then Cancel = True Change■□ Target, Range("問01") End If If Not Application.Intersect(Range("問02"), Target) Is Nothing Then Cancel = True Change■□ Target, Range("問02") End If
End Sub
Private Sub Change■□(Target As Range, GroupRange As Range) Dim r As Range If Left(Target.Formula, 1) = "□" Then For Each r In GroupRange.Cells r.Formula = Replace(r.Formula, "■", "□") Next Target.Formula = Replace(Target.Formula, "□", "■") ElseIf Left(Target.Formula, 1) = "■" Then Target.Formula = Replace(Target.Formula, "■", "□") End If End Sub
という感じで出来ると思います。
(白茶)
VBAでやるにしてもコントロールを配置して対応はできるけど、「セルで」ということなので。 レイアウトとしては、□ と Yes とか りんご のセルはわけておくコード。(□ の列幅は細めに) もちろん、□ りんご が 1つのセルに同居している形なら、コードを少し変更すればOK。 とりあえず同一行をグルーピングの単位としている。
シートモジュールに
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim tickY As String Dim tickN As String tickY = ChrW(9745) tickN = "□" Cancel = True Select Case Target.Value Case tickN 'Tickなし Target.EntireRow.Replace What:=tickY, Replacement:=tickN, LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Target.Value = tickY Case tickY 'Tickあり Target.Value = tickN '9745に End Select End Sub
ぶらっと立ち寄り
□ りんご 同居なら
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim tickY As String Dim tickN As String Dim c As Range, r As Range Dim flagY As Integer, FlagN As Integer tickY = ChrW(9745) tickN = "□" flagY = InStr(Target.Value, tickY) FlagN = InStr(Target.Value, tickN) Cancel = True If FlagN > 0 Then Set r = Target.EntireRow.SpecialCells(xlCellTypeConstants) For Each c In r If InStr(c.Value, tickY) > 0 Then c.Value = Replace(c.Value, tickY, tickN) Next Target.Value = Replace(Target.Value, tickN, tickY) Set r = Nothing ElseIf flagY > 0 Then Target.Value = Replace(Target.Value, tickY, tickN) End If End Sub
ぶらっと立ち寄り
r様、白茶様、ぶらっと立ち寄り様
素早い対応ありがとうございます。 教えて頂いたVBAを使用させてもらったところ、 イメージ通りの回答表が作成できました。 とても感謝しております。
本当にありがとうございました。
(hahaha)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.