• ベストアンサー

vba初心者

VBA初心者ですが、ご質問があります。 以下の処理内容で困っております。 1.チェックボックスは全部で四つありエクセルのシート上にあります。 <例> checkbox1 checkbox2 checkbox3 checkbox4 ←四つあります。 ここでいうチェックボックスは、マクロの「コントロールツールボックス」のチェックボックスになります。 2.チェックボックスはチェックを入れるとセルA1にそれぞれの値を出力。 <例> checkbox1にチェックをいれたらセルA1にaと出力。 checkbox2にチェックをいれたらセルA1にbと出力。 checkbox3にチェックをいれたらセルA1にcと出力。 checkbox4にチェックをいれたらセルA1にdと出力。 3.1と2は問題なく3から困っております。 <御教授いただきたい内容>  チェックボックスを使用して、checbox1にチェックをいれたらセルA1にaと出力しcheckbox2にチェックをいれたらセルA1にコンマをつけて出力。 <例> checkbox1と2をチェックしているのでセルA1の出力は、「a、b」となる。 同様にチェックをつけたらつけただけ出力。 <例> checkbox1から4全部つけた場合、セルA1の出力は、「a、b、c、d」となる。 初心者でかなり困っております。 どなた様か御教授をお願い致します。

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

こんにちは、 Public Sub f() Dim cc As String Dim i As Integer Dim c As String cc = "" c = "" If Sheet1.CheckBox1 = True Then cc = cc + "a" End If If Sheet1.CheckBox2.Value = True Then cc = cc + "b" End If If Sheet1.CheckBox3.Value = True Then cc = cc + "c" End If If Sheet1.CheckBox4.Value = True Then cc = cc + "d" End If If Len(cc) = 0 Then Sheet1.Range("a1") = "" Exit Sub End If If Len(cc) = 1 Then Sheet1.Range("a1").Value = cc Exit Sub End If For i = 1 To Len(cc) c = c + Mid$(cc, i, 1) + "," Next c = Left$(c, Len(c) - 1) Sheet1.Range("a1").Value = c End Sub Private Sub CheckBox1_Click() f End Sub Private Sub CheckBox2_Click() f End Sub Private Sub CheckBox3_Click() f End Sub Private Sub CheckBox4_Click() f End Sub こんな感じかな

hanyu01
質問者

お礼

ありがとうございます。 完璧すぎるご回答感謝致します!!! 構文まで作っていただいてありがとうございました。 ほんと助かりました!!!!!!

その他の回答 (3)

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

質問の意図がよくわからないが、 もう1つコマンドボタンが必要では。そして チェックボックス1-4の状態が確定したときにボタンをクリックする。すると下記クリックイベントプロが走る。 A1セルに、例えば、a,cなどが状態に応じて入る。 Private Sub CommandButton1_Click() Dim s(4) If CheckBox1 = True Then s(1) = "a" End If If CheckBox2 = True Then s(2) = "b" End If If CheckBox3 = True Then s(3) = "c" End If If CheckBox4 = True Then s(4) = "d" End If ss = "" For i = 1 To 4 If s(i) <> "" Then ss = ss & s(i) & "," End If Next i If Right(ss, 1) = "," Then Cells(1, 1) = Left(ss, Len(ss) - 1) Else Cells(1, 1) = s End If End Sub 質問の意図を誤解してたらすみません。

回答No.2

ベタな方法ですがこれを応用して出来ないでしょうか・・・。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then hensuu = "a" End If If CheckBox2.Value = True Then If hensuu = "" Then hensuu = "b" Else hensuu = hensuu & ",b" End If End If MsgBox hensuu End Sub

hanyu01
質問者

お礼

ありがとうございます。 応用してやってみたいと思います。

noname#39970
noname#39970
回答No.1

2の演習によってどのようにしたらセルA1に書き込みができるか判ったと思う。 その書き込みする方法の中で各checkを調べる方法が出ていたと思われる。 3では、その各checkの状態を確認できる方法を確立しなければならない。 今回はcheckが押されたらその専用処理をするのではなく 共通した処理を作成し、どれが押されているのかを確認して押されている物をA1へ出力するという形になる。 まずはカンマ無しで押されている物に対応する文字列を作成できるようにしたら良い →check1と3がcheckedなら「ac」 これができるようになったらカンマを挟む方法を考える

hanyu01
質問者

お礼

ありがとうございます。 さっそく考えてみます。

関連するQ&A

  • 【Excel】チェックボックス情報取得【VBA】

    お疲れ様です。 チェックボックスの現状を取得したいです。 ネットで調べていて色々見つけたのですが、 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_checkbox.html このサイトの方のVBAが参考になるかと思ったのですが、 頭が回らず、良く分からない状態です。 チェックボックスは A B C D E F と6つ作成しており、 その隣に Atext Btext Ctext Dtext Etext Ftext というテキストボックスを作成しています。 ひとつのみチェックがついていた場合と 複数チェックがついていた場合の出力を変更したいと思っています。 例 Aのみにチェックがついていた場合 A1のセルに「a1」と入力 Bのみにチェックがついていた場合 A1のセルに「a2」と入力 A、Bにチェックがついていた場合 Atext~Ftextまでのどこまでデータが入っているかを確かめる A1のセルに「a1100」(Dまで入っていた場合) A1のセルに「a11000」(Eまで入っていた場合) データ出力は、必ず頭に「a」を入力します。 一つだけチェックが入っている場合は、上から順番にAならa1、Bならa2,Cならa3と入力 複数チェックが入っている場合は、テキストボックスに入っているデータの個数を確認し、 「a」と、選択されたデータを「1」テキストボックスに入っているけど選択されていないデータを「0」 とA1セルに表記します。 チェックボックスとテキストボックスの名称は、上から A  AText B  BText C  CText D  DText E  EText F  FText という名称になっています。 ぐちゃぐちゃした文章で大変申し訳ありませんが、回答よろしくお願いいたします。

  • エクセル VBA で 教えてください!

    初めて質問させていただきます 初心者で困っています どなたかご教授よろしくお願いします! A列 ____B列______C列 B_____________________ 123 D______________________ 1 D______________________ 2 B______________________456 D______________________ 1 D______________________ 2 D______________________ 3 B______________________789 D______________________ 1 自分はB列にいます(表現が正しいかもわかりませんが) 同じ行で A列の内容が Bだったら隣のCセルの 内容をBセル(自分のいるセル)にコピー Dだったら上の内容(Bの時コピーした内容)をコピーし          行を下へ繰り返し A列のデータが空白まで繰り返す そうして B列を 埋めたいのですが よろしくお願いしたします!       

  • エクセル VBA初心者です。

    D列のセル1から44までそれぞれのセルに入力規則で商品名(例:A,B,C,D等)ドロップダウンリストを 作成し、Aを選択したら自動的に同一セルで“1”、Bを選択したら“2”と変換させたいのですが、Work sheet changeを使って試してみたのですが、うまくいきません。。。 コードを教えていただけると助かります。 宜しくお願いします。

  • VBA CSV形式で保存したいのですが

    EXCELで、以下のような表を作成してあります。   A       B       C 1 あ,10 2 い,20,100 3 う,30 4 え,40,200,か 5 お,50 A列にカンマを含めたデータが入っており、 1000行程度あります。 このようなデータをCSV形式で保存したいのですが、 単純にVBAを組むとそれぞれのデータが""で囲まれます。 また、上記例の3行目(以降)のデータの終わりに「,」が 出力されてしまいます。 例:   あ,10 い,20,100 う,30, VBAで、 (1) ""で囲まれることなく、 (2) 行内のデータの個数によって,をつける位置を判断させて (3) セルに入っているカンマ区切りのデータをB列等に分離せずに 保存する方法はないでしょうか? ご教授、よろしくお願いします。

  • (EXCEL)チェックボックス,TRUE⇔スピンボタン,MAX+色変化

    お世話になります。質問させていただきます。 表題件ですが、先ず説明しやすくするために、 シート1のA列複数行にチェックボックス、B列複数行にMAX100(%)のスピンボタンが縦に並んでいると仮定させていただきます。 例えば、 (1)A4のチェックボックスにチェックを入れるとB4のスピンボタンが連動して自動的にMAX値100(%)となり、さらにA4とB4のセルの色が赤くなる。 また (2)B4のスピンボタンをMAX値100(%)とすると、連動して自動的にA4のチェックボックスにチェックが入り、さらにA4とB4のセルの色が赤くなる。 上記のようにするにはいかがするのでしょうか? 以下にイメージを記載します。 (コンマは、セル区切りを意味します。) A,B, checkbox(未check),70% →色変化なし checkbox(check入れた),100%(に自動変化) →A2B2が赤く  checkbox(自動的にcheck),100%(に設定) →A3B3が赤く  関数やVBAにお詳しい方がおられましたら、何卒アドバイスを頂戴したく存じます。 *なお、スピンボタンはフォーム、コントロールツールボックス、 どちらが適しているのか、恥ずかしながら、存じませんので、 そちらもアドバイスいただけましたら、大変に光栄に存じます。 よろしくお願い申し上げます。

  • vba初心者です。どなたか教えて下さい。

      独学でエクセルVBAを勉強している熟年おじさんです。  色んな参考例を見ながらヒントになる事例を探していますが、中々、似た例が見つからず  困っています。手がかりでも掴めたらと思います。どなたかご指導下さい。   同一BOOK内の2つのシートに同じ行と列に同じ項目内容が入っています。その一枚目のシートの行と列を検索して同じ行と列に該当するデータを、二枚目のシートの同じ行列のセルにコピーするのです。   それだけのことですが、もうひとつの条件は、一枚目のシートには毎日新しいデータが入ってきて  その二枚目シートのデータを日単位で色分けしたいのです。従って、二枚目のシートには、日単位で 空いているセルにデータが蓄積されていき、空白セルが埋め尽くされていきます。   この場合、各シートのデータが同一セルにダブルことは絶対にありません。 一枚目シート                 二枚目シート     行⇒ A B C D E F G          行⇒ A B C D E F G 列 A1 2 6 1 9 23 7 90          列A1 2 6 1 9 23 7 90     B5 11 8 18 34 67 9 34          B5 11 8 18 34 67 9 34    C9                       C9   U9                        U9  ・・・翌日データ追加・・・    P5                        P5        上記はシートイメージですが、行は品名で列は工程名で、中のデータは測定値です。    2枚のシートには全く同じ品名と工程名が入っていて、毎日、入ってくる一枚目シートには    その日のデータしか入ってきません。それを、二枚目のシートの空いたセルにコピーして    いきます。データは毎日追加すのですが、同一セルにダブルことはありません。    以上よろしくお願いします。

  • エクセルVBAのヒントをください

    エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す  ・行挿入   ・最初のカンマの位置を調べる   ・先頭からカンマまでを切り取る   ・上記の値をセルに入力  ・行挿入   ・2番目のカンマの位置を調べる   ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る   ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。

  • VBAについて

    VBA初心者です。 ダブルクリックをしたセルの、右隣セル3つに入っている値を、A1・B1・C1に反映させるVBAを教えて下さい。 例/F1でダブルクリックをしたら、G1とH1とI1の値をA1とB1とC1に反映させる。 ※ダブルクリックをするセルF列のどれかで、反映させる先のセルはA1とB1とC1です。 初心者の為、質問内容が分かりにくいかもしれませんが、ご回答頂けると幸いです。

  • エクセル VBA 初心者で困っております!

    いつもありがとうございます。VBA初心者です。 データベース(sheet2)のデータをセルA1(sheet1)の値をオートフィルタ-に反映させて抽出し、 その後、セルB1(sheet1)に入力した値と貼り付けた別のシート(sheet3)で数値1×数値2(B1で入力した値)を掛け算し、数値3に出すのが目的です。 sheet1 セルA1【製品名を入力】例、【製品A】を入力 セルB1【数値を入力】例、5を入力 コマンドボタン1を押すと実行 sheet2(データベース)      製品名      数値1    数値2   数値3 1 製品C       2           2 製品A       2 3 製品A       1 4 製品B       4 5 製品D       3 6 製品D       5 sheet3(貼付先) 実行結果   製品名      数値1    数値2   数値3         1 製品A       2        5     10 2 製品A       1        5      5 当初、リストボックスを選択出来るようにし、その値を別のシートに貼り付け、演算処理を行うの方法を模索しておりましたが、 shee2のデータベース、A1・B1(検索値・値)も毎回変わるため、1回ずつの作業を行うように考えなおしたところ、 いきずまってしましました。 時間がないためによろしくお願い致します。

  • "VBAの繰り返し"についてお尋ねします。VBA初心者です。

    "VBAの繰り返し"についてお尋ねします。VBA初心者です。 例えば「A列の最後のセルに何か入れば、その行のB列、C列・・・の一つ上のセルに入っている計算式を繰り返しコピーする」と言うコードを教えていただけたらと思います。A列の最後のセルに何か入ってくれば、その行の一つ上のセルに入っている計算式を繰り返しコピーするというコードです。コード記述の例を教えていただけたらと思います。よろしくお願いします。

専門家に質問してみよう