【エクセル】オプションボタンにセルの値を反映させる方法

このQ&Aのポイント
  • エクセルマクロ初心者です。シート2のセルの値がAの場合、シート1上のオプションボタン1をtrueにし、A以外の場合はfalseにするマクロの登録方法を知りたいです。
  • 実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記します。蓄積シートの内容をリストボックスに表示し、選択された内容を呼び出したいのですが、オプションボタンに呼び出せません。お知恵をお借りしたいです。
  • コンボボックスやテキストボックスには呼び出せるが、オプションボタンには呼び出せない問題が発生しています。解決策を教えてください。
回答を見る
  • ベストアンサー

【エクセル】オプションボタンにセルの値を反映させるには

エクセルマクロ初心者です。教えてください。 シート2 の あるセルの値が A のとき シート1上の オプションボタン1がtrueになる。 シート2 の あるセルの値が A以外のとき シート1上の オプションボタン1がfalseになる。 (オプションボタン1はフォームコントロールのオプションボタンです。) という結果になるマクロの登録方法を模索していますがうまくいきません。 実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記(オプションボタンのほかコンボボックスなどの内容を転記します)。シート1上のリストボックスに蓄積シートの内容を表示し、選択するとその内容を呼び出すようにしたいのです。 コンボボックスやテキストボックスに呼び出すところまではなんとか本を見たりしてできたのですが、オプションボタンに呼び出せません。 なんとかお知恵をお借りしたいです。 よろしくおねがいします。 *下記のようにやってみました。 Private Sub commandbutton3_click() Dim n As Integer n = ListBox1.ListIndex If n = -1 Then MsgBox "選択してください" Else ComboBox2.Value = ListBox1.List(n, 0) ComboBox3.Value = ListBox1.List(n, 3) ComboBox4.Value = ListBox1.List(n, 4) ComboBox5.Value = ListBox1.List(n, 8) ComboBox6.Value = ListBox1.List(n, 9) ComboBox7.Value = ListBox1.List(n, 1) ComboBox8.Value = ListBox1.List(n, 2) TextBox3.Value = ListBox1.List(n, 10) End if ***********ここからがうまくいきません******** If Worksheets("入力シート").ListBox1.List(n, 6).Value = "A" Then OptionButton1.Value = True Else OptionButton("A").Value = False End If End Sub

  • myid
  • お礼率75% (3/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

>A1がAならば、オプションボタンがOn >そうでないならば Off     >との設定のはずが、 > >A1がAでも否でもOff >という結果になります。 んん? A1ってA1セルの事ですか? もしそうなら、コードが全然違いますよ? A1セルだったら If .Range("A1").Value = "A" Then ': で良いんですが。 提示してない何処かに .Range("A1").Value = .ListBox1.List(n, 6) なんて書いてあったりするんですか? If .ListBox1.List(n, 6) = "A" Then   .OptionButtons("Option Button 16").Value = xlOn Else ': このコードの意味は、ListBox1で選択した行の7列目の値が A だったら On です。 (ListBoxの列を表す時、一番左が 0 からなので。) ListBox1の、選択した値を確認してください。 >また、複数のoptionbuttonのon off を条件によって替えたいときは、 >ネットで調べたところ、if よりselect case の方がよさそうな記述をみましたがどう思われますか? 良いと思います。 Select Case .ListBox1.List(1, 6)   Case "A"     .OptionButtons("Option Button 16").Value = xlOn   Case "B"     .OptionButtons("Option Button 17").Value = xlOn   Case "C"     .OptionButtons("Option Button 18").Value = xlOn End Select 個人の好みにもよりますが、可読性が良くていいんじゃないでしょうか。

myid
質問者

お礼

いつもありがとうございます。 !!!!できました!!!! なんでもお見通しなんですね。Listboxで選択した行の数え方が 間違っていました・・・。(n,6)でなく(n,5)でした。 こんな始末で全くお恥ずかしい限りです。 言い回しが悪くてすみませんでした。 「A1がAでも」というのは「あるセルがAでも」というつもりで 書いてしまい、「ListBox1(n,6)がAなら・・・」が正しいです。 select case 利用パターンもうまくいきました。 今晩はよく寝られそうです:) 最後まで丁寧に面倒をみていただき本当に感謝です。 ありがとうございました。 これからも地道にがんばります。

その他の回答 (3)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>もし、また気が向くようなことがあれば... 気が向いたので追記しますね :D 『言葉足らず』とは思っていません。 >シート1上の オプションボタン1... >シート1上のリストボックス... と明記してありますし、提示コードを読み取れば凡その把握はできます。 Private Sub commandbutton3_click() という記述から、Sheetに配置したCommandButtonのSheetモジュールに記載したClickイベントのコードだと推し測れます。 コード内容から、Sheetに配置しているのは[コントロールツールボックス]のコントロールだと推測されます。 ただし、ここで日本語の説明と食い違いがあります。 >*以上すべてシート上に貼り付けたフォームです。 コントロール種別の把握が違うのではないでしょうか。 (先にも書きましたが)  ~~~~~~~~~~~~~~~~~~ ツールバー[コントロールツールボックス]のボタンなどはMSForms.Controlです。 ツールバー[フォーム]のボタンなどはExcel.Controlです。 私がおすすめしませんと書いたのは[コントロールツールボックス]のControlです。 貴方のコードを見る限り、 CommandButton と ListBox と ComboBox は [コントロールツールボックス]のControlです。 どちらのコントロールかはっきりしないと、コードの書き方、コントロールの指定の仕方が変わってくるので 動くものも動きません。 [コントロールツールボックス]のControlは、それを配置したシートモジュールのプロシージャの入力では、 Me. とキー入力したあとに Me.ComboBox1   ComboBox2   ComboBox3 などと入力候補が出てきます。 CommandButton1、ListBox1、ComboBox1、というように直接Object名で指定できます。 (Meはそのオブジェクトを示すキーワード) 対して、 >回答のようにやってみましたがエラーが出てしまいました。 >(実行時エラー”1004”アプリケーション定義またはオブジェクト定義のエラー) >私が使っているのは、コントロールでなくフォームだったので、xlOn xlOff の方で試しました。 OptionButtonが[フォーム]のOptionButtonでしたら、その名前を調べてください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ オプションボタンを選択して、数式バー左の[名前Box]で調べてもいいです。 オプション x と表示されているでしょう。(x は数値) または、選択して     ~~~~~~~~ Sub test()   MsgBox Selection.Name End Sub で調べてもいいです。 Option Button x と表示されるでしょう。 [フォーム]のコントロールはその名前で指定できます。 Sub test2()   ActiveSheet.OptionButtons("Option Button 1").Value = xlOn   ActiveSheet.OptionButtons("オプション 1").Value = xlOff End Sub ...という感じになります。 >(実行時エラー”1004”アプリケーション定義またはオブジェクト定義のエラー) 実際にはどのモジュールの、どのコードで実行して、どの行でエラーで止まるのでしょう? 自力で解決できない場合は補足してください。

myid
質問者

補足

毎日、時間を割いていただきありがとうございます。 夕べからチャレンジしていますが、うまくいかずにいます。 教えていただいたようにやった結果、エラーは出なくなり喜んでいましたがオプションボタンの動きが思うようにいきません。 A1がAならば、オプションボタンがOn そうでないならば Off     との設定のはずが、 A1がAでも否でもOff という結果になります。 手動でOnにしておいて、実行(commandbutton3をクリック)するとOffになるので一応命令は聞こえているのだと思います。 >ツールバー[コントロールツールボックス]のボタンなどはMSForms.Controlです。 >ツールバー[フォーム]のボタンなどはExcel.Controlです。 >私がおすすめしませんと書いたのは[コントロールツールボックス]のControlです。 >貴方のコードを見る限り、 >CommandButton と ListBox と ComboBox は [コントロールツールボックス]の>Controlです。 なるほど。そうです そのとおりです。 「コントロールツールボックス」のOptionbuttonと、「フォーム」のOptionButtonでは、書き方が違うということですね。 納得です。私は、commandbutton, listbox, comboBoxはコントロールツールボックスで作りましたが、OptionButtonは、「フォーム」で作りました(グループボックスで囲みたくて)。 「名前Box」で確認しました→「オプション16」とありました Sub test( )もやってみました→「Option Button 16」と出ました。(エクセル2007でやったら出ました。) ということで下記のように書きました。 Private Sub commandbutton3_click() Dim n As Integer With Me n = .ListBox1.ListIndex If n = -1 Then MsgBox "選択してください" Else .ComboBox2.Value = .ListBox1.List(n, 0) .ComboBox3.Value = .ListBox1.List(n, 3) .ComboBox4.Value = .ListBox1.List(n, 4) .ComboBox5.Value = .ListBox1.List(n, 8) .ComboBox6.Value = .ListBox1.List(n, 9) .ComboBox7.Value = .ListBox1.List(n, 1) .ComboBox8.Value = .ListBox1.List(n, 2) .TextBox3.Value = .ListBox1.List(n, 10) If .ListBox1.List(n, 6) = "A" Then .OptionButtons("Option Button 16").Value = xlOn Else .OptionButtons("Option Button 16").Value = xlOff End If End If End With End Sub 上記を何度もスペルを確認したり、少しかえてみたりとトライしてみたのですが・・・。何かアドバイスがあればお願いします。 (また気が向いたらでいいです:)) また、複数のoptionbuttonのon off を条件によって替えたいときは、 ネットで調べたところ、if よりselect case の方がよさそうな記述をみましたがどう思われますか?アドバイスがありましたらお願いしたいです。何度も回答いただき感謝です。なにとぞご負担にならぬよう お願いします。  Select case ????????(←ここはどのようになるのでしょうか) Case .ListBox1.List(n, 6) = "A" .OptionButtons("Option Button 16").Value = xlOn Case .ListBox1.List(n, 6) = "B" .OptionButtons("Option Button 17").Value = xlOn Case .ListBox1.List(n, 6) = "C" .OptionButtons("Option Button 18").Value = xlOn End Select

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

そのコードがSheets("入力シート")のシートモジュールに書いてあるとして、 概ね Dim n As Integer With Me   n = .ListBox1.ListIndex   If n = -1 Then     MsgBox "選択してください"   Else     .ComboBox2.Value = .ListBox1.List(n, 0)     .ComboBox3.Value = .ListBox1.List(n, 3)     .ComboBox4.Value = .ListBox1.List(n, 4)     .ComboBox5.Value = .ListBox1.List(n, 8)     .ComboBox6.Value = .ListBox1.List(n, 9)     .ComboBox7.Value = .ListBox1.List(n, 1)     .ComboBox8.Value = .ListBox1.List(n, 2)     .TextBox3.Value = .ListBox1.List(n, 10)     If .ListBox1.List(n, 6) = "A" Then       .OptionButton1.Value = True     Else       .OptionButton1.Value = False     End If   End If End With こんな感じですが (.ListBox1.List(n, 6).Value とは書けません。Listプロパティをヘルプで確認してください) >(オプションボタン1はフォームコントロールのオプションボタンです。) [コントロールツールボックス]...MSForms.OptionButton の事で良いんですよね? もし [フォーム]...Excel.OptionButton の事でしたら .OptionButtons("Option Button 1").Value = xlOn .OptionButtons("Option Button 1").Value = xlOff やIndex指定で .OptionButtons(1).Value = xlOn など。 #余談 #シート上にMSFormsのControlを多数配置すると結構不具合多く、あまりおすすめしません。

myid
質問者

お礼

早急&丁寧な回答をいただきありがとうございます。言葉足らずのところまでご理解いただき恐縮です。 回答のようにやってみましたがエラーが出てしまいました。 (実行時エラー”1004”アプリケーション定義またはオブジェクト定義のエラー) 私が使っているのは、コントロールでなくフォームだったので、xlOn xlOff の方で試しました。 2番目の回答者のおっしゃるとおり、基本がないままやっているのと シンプルに質問しようと思うあまりの説明不足の結果だと思います。 また、フォームのコントロールを多数配置すると不具合が多いとのアドバイスを受けて、ふりだしからやり直した方がいいか悩み中です。 もし、また気が向くようなことがあればアドバイスをください。 作りたいもの************************** sheet1(=入力シート) 氏名(コンボボックス)出張日(コンボボックス) 用務名(コンボボックス)用務先(コンボボックス) 行き方 A電車(オプションボタン)・・・AとBグループボックスで囲む     B車 (オプションボタン) 入力決定(コマンドボタン) 呼出(コマンドボタン) 登録済みリスト(リストボックス) 表示(コマンドボタン) 修正(コマンドボタン) *以上すべてシート上に貼り付けたフォームです。 *氏名、出張日、用務名、用務先、行き方を選び、「入力決定ボタン」 クリックでsheet2(=蓄積シート)に転記&蓄積されます。 *氏名を選び、「呼出ボタン」クリックで、リストボックスにその人の 出張データが表示されます。(蓄積シートを氏名でオートフィルして 表示) *リストボックス上で選択したデータを「表示ボタン」クリックで、入 力シート上の出張日、用務名・・・のコンボボックス、オプションボタ ンに表示させます。(←ここでつまづいてます) *表示させたデータを修正して再登録します。 ******************************** 実際にやりたいのはグループボックスで囲んだオプションボタンの操作なので質問の内容とは少し違うかもしれませんが、単純な一つのオプションボタンでもできなかったので、質問しました。 どうもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

まずオプションボタンをシート上に貼り付けたのか、UserFormに貼り付けたのか認識がない(質問に書いてない。差が出ることを質問者は知らない)のは問題あり。 ーー オプションボタンのON/OFFはセルの値と連動できる。 プロパティのLinkedCellをE1とかに設定。 E1のセルに式 =A1="A"  と入れる。 (「あるセル」なんて、質問にあいまいな表現はしないこと。A1セルと仮定) これでA1がÅならオプションボタンがON、それ以外ならOFFになって連動する。VBAコードだけでやりたいのだろうが、エクセルの本筋の方を勉強してからにしてほしいのであえて書く。 リストボックス、コンボボックスともLinkedCellがある。 ーーー ListBoxとComboboxを使っているところは何がしたいのか。その仕組みは判りにくい。コードだけ書かないで、説明したら。 あるいは質問に関係ないのかも知れない。 エクセルらしい、エクセルの入力規則(VBA利用)では出来ないのか。

myid
質問者

お礼

回答をありがとうございます。 お見込の通りでユーザーフォームは使ったことがありません。 ツールバーのフォームの進化したものがコントロールだということぐらいしかわからずにやっております。 E1の例:セルに=を2つも使うやり方は初めて知りました。 勉強になりました。LinkedCellはリンクされたセルに表示させるだけかとおもっていましたので目から鱗でした。 ありがとうございました。

関連するQ&A

  • オプションボタンとリストボックスの連動

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン1を選択=リストシートのB列をリストボックスへ表示 ・オプションボタン2を選択=リストシートのC列をリストボックスへ表示 ・リストボックスから一項目を選択、値を入力シートへ入力 Private Sub UserForm2_Initialize() If OptionButton1.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!B3:B" & lastRow End With End If If OptionButton2.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!C3:C" & lastRow End With End If End Sub Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Worksheets("入力!").ActiveCell.Value = ListBox1.Value End Sub 以上

  • エクセルのオプションボタンについて

    エクセルVBAの初心者です。 ブックAのSheet1にコントロールツールボックスよりオプションボタンを使って、OptionButton1にA室、OptionButton2にB室、OptionButton3にC室という名前をつけて作成しました。この3つのオプションボタンの内いずれかを選択した時に、別のブックBのSheet1のセルA1に転記したいのですが、VBAを使って転記をすることはできるでしょうか? 分かりにくい説明で申し訳ありませんが、宜しくお願い致します。

  • オプションボタン選択でコンボボックス有効

    ExcelVBAでユーザーフォームを作成しているのですが、昨日までうまく動作していたことが、突然動かなくなりました。 オプション1を選択 ↓ コンボボックス1有効  ※他のコンボボックスは無効 ↓ オプション2を選択 ↓ コンボボックス2有効  ※コンボボックス1も含め他のコンボボックスは無効 という感じで動作させたいです。 書いたコードはこんな感じです。 Private Sub OptionButton1_Click () Dim i As Long Dim lastRow As Integer lastRow = Cells(Row.Count, 1).End(xlUp).Row If OptionButton1.Value = True Then OptionButton1.Enabled = True With ComboBox1 If ComboBox1 = "" Then For i = 2 To lastRow .AddItem Worksheets("sheet1").Cells(i, 1).Value Next i End If End With ComboBox1.ListIndex = 0 ComboBox2.Enabled = False ComboBox3.Enabled = False End If End Sub コードの間違いや改善点などありましたら教えて下さい。 よろしくお願いします。

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • VBA リストボックスの値をセルに転記

    よろしくお願いします。 したいことは、 ユーザーフォームのリストボックスで複数の値を選んで複数セルに転記する。 ActiveCell.offset(10, 5) ⇐ リストボックスで選んだ1つ目 ActiveCell.offset(11, 5) ⇐ リストボックスで選んだ2つ目 ActiveCell.offset(12, 5) ⇐ リストボックスで選んだ3つ目 下の構文では1つしか転記できません。 Dim n As Integer, s As String For n = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(n) Then s = s & ListBox3.List(n) & vbCrLf ActiveCell.offset(10, 5).Value = s End If Next

  • excel ユーザーフォームでシートごとに転記2

    先日ユーザーフォームへの転記について質問させていただきました。 ご回答いただき、ありがとうございました。 今度はオプションボタンで選択したときに、シートごとに転記する方法を 教えていただけますでしょうか。 ユーザフォーム上で、オプションボタンを選択。 OptionButton1・・・シート1へ転記 OptionButton2・・・シート2へ転記 これをOKボタンを押したときに転記するようにしたいと思っています。 Private Sub OK_Click() Dim CLrow As Long Dim KYrow As Long CLrow = Worksheets("Sheet1").Range("A65536").End(xlUp).Row KYrow = Worksheets("Sheet2").Range("A65536").End(xlUp).Row If OptionButton1.Value = True Then Worksheets("Sheet1").Range("A" & CLrow).Value = .TextBox1.Value ElseIf OptionButton2.Value = True Then Worksheets("Sheet2").Range("A" & KYrow).Value = .TextBox1.Value End With End Sub ここまでやってみたのですが「参照が不正または不完全です」 と出てしまいます。 どなたかご教示願います。 よろしくお願いします。

  • Excel2007 VBA シート上のオプションボタン

    Excel2007のVBAで質問があります。 シート上に複数(90個)のオプションボタンが設置しているシートが有りコマンドボタンが押されたときに どのオプションボタンが選択されているか判断したいのですが、 IF文で一つ一つ下記のように書くと個数が多いたムダに長いロジックになります。 If Worksheets("Sheet1").OptionButton1.Value Then chk_f = 1 end If If Worksheets("Sheet1").OptionButton2.Value Then chk_f = 2 end If         :         : ユーザーフォームに設置しているオプションボタンは、下記のようにFor文で回せるのは判っているのですが、 For i = 1 To 90 If Me.Controls("OptionButton" & i).Value Then chk_f = i exit for End If Next シート上のオプションボタンでも同様の事は可能でしょうか? もしなければオプションボタンとセルをリンクさせてそのセルをFor文で回して確認していく方法が出来るかなと考えています。

  • Excel マクロ リストボックス複数選択

    いろいろ拝見させていただいているのですが 理解が低いのが原因で困っています。 データのシートがあります。 ・B列には、起点となる人の名前が記載(300名ほど) ・データの入っている列は、A:CE データシートでB列にてオートフィルタをかけ 抽出シートに転記したい。 抽出シートでは、ユーザーフォームを組みました。 オプションボタン1 単一選択 オプションボタン2 複数選択 オプションボタン3 拡張選択 リストボックス(2・3に対して) コマンドボタン   終了 とした場合、単一選択はできたのですが 複数選択の場合 該当数が「0」の表記となってしまい、うまくいきません。 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。 Private Sub UserForm_Initialize() ListBox1.ColumnCount = 1 'リストボックスの列は1 ListBox1.BoundColumn = 0 'ListIndexの値(行数)を使用する ListBox1.MultiSelect = 0 '最初は単一選択状態にする ListBox1.RowSource = 'リストのソース ListBox1.ColumnHeads = True '列見出し表示 OptionButton1.Value = -1 'オプションボタン1を選択状態にする End Sub Private Sub OptionButton1_Click() ListBox1.MultiSelect = fmMultiSelectSingle '単一選択状態にする End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = fmMultiSelectMulti '複数選択状態にする End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = fmMultiSelectExtended '拡張(連続)選択状態にする End Sub Private Sub ListBox1_Click() 'リストボックスがクリックされたとき(単一選択) Dim 条件 As String 条件 = UserForm1.ListBox1.Text '氏名 With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End Sub Private Sub CommandButton1_Click() '選択終了ボタンがクリックされたとき(複数・拡張選択) Dim 条件 As String Dim lastRow As Long With ListBox1 If .ListIndex = -1 Then Exit Sub '何も選択されていない For 条件 = 0 To .ListCount - 1 If .Selected(条件) Then '行選択あり With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End If Next End With End Sub Private Sub UserForm_Deactivate() Unload UserForm1 '×ボタンを押したら、ユーザーフォームのunloadをする End Sub

  • 各ボックスの値を、指定セルに転記したいのですが

    エクセル2007で作成 ・入力シートでユーザーフォーム1を呼出す。 B列の最終行をアクティブセルとする ・コンボボックス1にて部署名を選択。 ・コンボボックス2にて個人名を選択。 Sub ComboBox2_Click() Dim lastRow As Long Dim myLlist As String Dim R As Long myLlist = ComboBox2 With UserForm1 Select Case myLlist Case "○○ △△" ’個人名 .ListBox1.RowSource = "○○!B1:B100" ←B100ではなく、最終行に変更したい End Select End With End Sub ・リストボックス1にて作業名を選択(複数可)後、決定コマンドボタンにて確定。  入力シートのアクティブセルにコンボボックス1の値を転記  右隣セルにコンボボックス2の値を転記  さらに右隣にリストボックス1の値を転記 Sub 決定_Click() ActiveSheet.Unprotect Dim 行 As Long Dim 列 As Long Dim i As Integer Dim LB As String With UserForm1 行 = ActiveCell.Row 列 = ActiveCell.Column UserForm1.ComboBox1.Value = Cells(行, 列) UserForm1.ComboBox2.Value = Cells(行, 列 + 1) With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) = True Then LB = LB & .List(i, 0) LB = Cells(行, 列 + 2) ←ココを変更したい End If Next i End With End With End Sub 個人名シートの指定範囲は、最終行までとしたい。 転記後、D列の1セルの中に選択した複数の作業名が入ってしまうので、 作業名単位で行を分けたい。 その時、同一部署なら同名をB列の下の行に、 同一人物なら同名もC列の下の行に転記したい。 以上、行いたい事項です。 方法がわからず困っています。 どなたかご教授頂きますよう、宜しくお願い致します。

  • エクセルVBAマクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

専門家に質問してみよう