[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルの文字列をチェック項目に反映させる』(アニ)
お世話になります。
いろんな方々の解説を参考に試行錯誤でユーザーフォームの
チェックボックスを組み立てております。
今回、選択したセルの文字列をチェックボックスの該当する項目に
反映させるという動作について行き詰っています。。
〇行いたい動作〇
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
>ろっくん様
理想通りに動作しました!
ありがとうございます!!
その上でもう一つお伺いしたいことが出てきまして、
チェックボックスに反映される文字列を完全一致にさせることは可能でしょうか。。?
例えば“犬”という文字が含まれているチェックボックスの項目が“犬小屋”“子犬”“お犬様”
のように複数あり、“犬”という単語がセルに記入されていると全ての“犬”にチェックが
入る状況になっています。
これを“犬”は“犬”単独のみの項目にのみチェックが入るように設定することは可能でしょうか?
つまり
“犬”→“犬”のみにチェック
“犬”→“犬小屋”“子犬”“お犬様”にはチェックが入らない
重ね重ね申し訳ありません。
もし手立てがあればご教示いただけますでしょうか。
よろしくお願いします。
(アニ) 2018/10/25(木) 10:17
もし上記の完全一致について解決策がありましたら
ご教授いただけませんでしょうか?
よろしくお願いいたします。
(アニ) 2018/10/29(月) 16:26
(マナ) 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.