[[20181023222847]] 『エクセルの文字列をチェック項目に反映させる』(アニ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルの文字列をチェック項目に反映させる』(アニ)

お世話になります。

いろんな方々の解説を参考に試行錯誤でユーザーフォームの
チェックボックスを組み立てております。
今回、選択したセルの文字列をチェックボックスの該当する項目に
反映させるという動作について行き詰っています。。

〇行いたい動作〇
1)A1… 犬
     猫
     鳥
     魚
     虫
      など文字列が改行で入力されている。

2)A1を選択しながらワークシート上にあるボタンを押す。
 
3)ユーザーフォームが立ち上がり、選択しているセルA1に記入されている
  文字列と同じ項目のチェックボックスにチェックを入れる。

※A2を選択したらA2の内容がチェックボックスに反映する、
 といったように選択するセルは1か所だけではありません。

いろいろと参考にさせていただき、下記を組み立ててみたのですが、
どうしてもうまく動作してくれません。。

 Private Sub CommandButton1_Click()

 UserForm1.Show

 Dim v, i As Long
 v = Split(ActiveCell.Vallue, vbLf)
 For i = 1 To 8
 If InStr(UserForm1.Controls("CheckBox" & i).Caption, v(i - 1))_
 > 0 Then UserForm1.Controls("CheckBox" & i) = True
 Next i

 End Sub

エラーで「インデックスが有効範囲にありません。」と出てしまいます。

つたない文章ですみません。。
初心者のためとんちんかなところでつまづいているかもしれませんが、
ご教示いただけますでしょうか。
よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 v = Split("1,2,3,4,5,6", ",")
 MsgBox "最少添え字 " & LBound(v, 1)
 MsgBox "最大添え字 " & UBound(v, 1)

 因みに、
 UserForm1.Show した時点で、コード進行は止まるけどそれでいいのかな?
 つまり、フォームを閉じないと、フォームのチェックボックスは、チェックされない。

 比較確認用

 Dim v(5 To 10)
 MsgBox "最少添え字 " & LBound(v, 1)
 MsgBox "最大添え字 " & UBound(v, 1)

 単純にこんな感じでもいいけど、なんか・・・。 
 LBound(v)
(BJ) 2018/10/24(水) 01:39

早速にご回答ありがとうございます!

提示いただいたもので修整してみましたが、メッセージボックスが表示されるだけで
チェックボックスの方には特に変化がありませんでした…
また、セルに記入されている文字列は数もセルによって変動します。
知識不足で申し訳ありませんが、どのように編集すればよいか
指示いただけますでしょうか(´;ω;`)

>UserForm1.Show した時点で、コード進行は止まるけどそれでいいのかな?
 つまり、フォームを閉じないと、フォームのチェックボックスは、チェックされない。

こちらに関してはフォーム内にボタンを用意してるので大丈夫です!
ありがとうございます。
(アニ) 2018/10/24(水) 10:56


 配列の要素数とCheckBoxの数に問題があると思っただけで、違うなら無視して結構。

 >提示いただいたもので修整してみましたが、メッセージボックスが表示されるだけで 
 >チェックボックスの方には特に変化がありませんでした… 

 そういう意味ではないので・・・。
https://wa3.i-3-i.info/word11927.html
https://uxmilk.jp/49369
http://officetanaka.net/excel/vba/function/UBound.htm
(BJ) 2018/10/24(水) 12:54

 こんな感じではどうでしょうか。
 Private Sub CommandButton1_Click()
    Dim v, i As Long
    Dim Ob
    v = Split(ActiveCell.Value, vbLf)
    For Each Ob In UserForm1.Controls
        If InStr(Ob.Name, "CheckBox") > 0 Then
            For i = 0 To UBound(v)
                If InStr(Ob.Caption, v(i)) > 0 Then Ob.Value = 1
            Next i
        End If
    Next Ob
    UserForm1.Show
 End Sub
(ろっくん) 2018/10/24(水) 13:13

>BJ様
変数について常にこんがらがっているので、
教えていただいたサイトで勉強します!
ありがとうございます!!

>ろっくん様
理想通りに動作しました!
ありがとうございます!!

その上でもう一つお伺いしたいことが出てきまして、
チェックボックスに反映される文字列を完全一致にさせることは可能でしょうか。。?
例えば“犬”という文字が含まれているチェックボックスの項目が“犬小屋”“子犬”“お犬様”
のように複数あり、“犬”という単語がセルに記入されていると全ての“犬”にチェックが
入る状況になっています。
これを“犬”は“犬”単独のみの項目にのみチェックが入るように設定することは可能でしょうか?
つまり
“犬”→“犬”のみにチェック
“犬”→“犬小屋”“子犬”“お犬様”にはチェックが入らない

重ね重ね申し訳ありません。
もし手立てがあればご教示いただけますでしょうか。
よろしくお願いします。
(アニ) 2018/10/25(木) 10:17


お世話になります。

もし上記の完全一致について解決策がありましたら
ご教授いただけませんでしょうか?
よろしくお願いいたします。
(アニ) 2018/10/29(月) 16:26


元コードでも使用していますが、
InStrの意味を理解していますか。

(マナ) 2018/10/29(月) 20:18


 追加質問を完全に見落としてました。

 元のコードはアニさんが作られたものですか?
 ここまで作られた方ならどこを変えたら良いかは
 たやすくわかると思うのですが…

 If文の中の論理式、
 InStr(Ob.Caption, v(i)) > 0
 の部分、Ob.Captionとv(i)を等式で結ぶように
 するだけです。
(ろっくん) 2018/10/29(月) 21:26

>ろっくん様

ご回答ありがとうございます!
等式でいろいろ試してみたのですが上手く作用してくれませんでした…
本当に無知で申し訳ありません。

元のコードは見本になるものを作成されてる方がいたので
それを利用して自分に必要な内容へ部分的に修整しただけでしたので、
恥ずかしながら完璧には理解しきれておりませんでした。。
イチから勉強頑張りたいと思います。
(アニ) 2018/10/30(火) 12:02


 作成された方に聞くのが早かったと思いますが、
 下記に書いておきますね。 

 Private Sub CommandButton1_Click()
    Dim v, i As Long
    Dim Ob
    v = Split(ActiveCell.Value, vbLf)
    For Each Ob In UserForm1.Controls
        If InStr(Ob.Name, "CheckBox") > 0 Then
            For i = 0 To UBound(v)
                If Ob.Caption = v(i) Then Ob.Value = 1
            Next i
        End If
    Next Ob
    UserForm1.Show
 End Sub
(ろっくん) 2018/10/30(火) 12:44

>ろっくん様

度々ありがとうございます!
完璧な仕上がりになりました!
(アニ) 2018/10/31(水) 10:06


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.