[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンボボックスに格納するデータについて』(川野鮎太郎)
みなさん、お疲れ様です。 再びご教示願いたく参りました(^_^;)
表題の件ですが、ComboBoxに表示するリストとして、列名を表したいのです。 Sheetを使えば、ComboBox1.RowSource = "A1:A256"等で出来ると思いますが、
コード内だけで処理する場合は、
Private Sub UserForm_Initialize() ComboBox1.AddItem "A列" ComboBox1.AddItem "B列" ComboBox1.AddItem "C列" ・ ・ 途中略 ・ ComboBox1.AddItem "W列" ComboBox1.AddItem "X列" ComboBox1.AddItem "Y列" ComboBox1.AddItem "Z列" ・ ・ 途中略 ・ ComboBox1.AddItem "IV列" End Sub
として、上記のように全て列記しないとダメなんでしょうか。 よろしくお願いしますm(._.)m ペコッ
For Nextで回したらどうでしょう? Dim i As Integer For i = 65 To 90 ComboBox1.AddItem Chr(i) & "列" Next i こんな感じで。 (ケン)
あ〜IV列までですね。 Dim i As Integer, r As Integer For i = 64 To 73 For r = 65 To 90 If i = 73 And r = 87 Then Exit Sub ElseIf i = 64 Then ComboBox1.AddItem Chr(r) & "列" Else ComboBox1.AddItem Chr(i) & Chr(r) & "列" End If Next r Next i (ケン)
アドレスをそのまま利用したほうが簡単でないかい? Dim i As Long For i = 1 To 26 Me.ComboBox1.AddItem Left(Columns(i).Address(False, False), 1) & "列" Next i For i = 27 To 256 Me.ComboBox1.AddItem Left(Columns(i).Address(False, False), 2) & "列" Next i (みやほりん)
な〜る。 (ケン)
ぉお!!(゚ロ゚屮)屮 ケンさん、みやほりんさんありがとうございます。 ケンさんの書き込みを見て、なるほど文字コードを基にするんだと納得。 実際のデータで確認したところ、 少々問題があって書き込みしようと思ったら、みやほりんさんの別案があって、 そちらも試したところ、ナ・ナ・ナント上手くいきました^^ なぜだか原因は判りませんが、問題があったというのは以下のようなことです。
実際のコードは以下のようになっており、ComboBox1で選択した時ComboBox2が空白なら、 ComboBox2が自動的に入るようにしていました。
Private Sub UserForm_Initialize() ComboBox1.AddItem "A列" ComboBox1.AddItem "B列" ComboBox1.AddItem "C列" ・ ・ 途中略 ・ ComboBox1.AddItem "W列" ComboBox1.AddItem "X列" ComboBox1.AddItem "Y列" ComboBox1.AddItem "Z列"
ComboBox2.AddItem "A列" ComboBox2.AddItem "B列" ComboBox2.AddItem "C列" ・ ・ 途中略 ・ ComboBox2.AddItem "W列" ComboBox2.AddItem "X列" ComboBox2.AddItem "Y列" ComboBox2.AddItem "Z列"
End Sub
Sub ComboBox1_Change() If ComboBox2.Text = "" Then MyC = Array("A", "B", "C", "D", "E", "F", "G", "H", _ "I", "J", "K", "L", "M", "N", "O", "P", "Q", _ "R", "S", "T", "U", "V", "W", "X", "Y", "Z") ComboBox2.ListIndex = ComboBox1.ListIndex + 2 ComboBox2.Text = MyC(ComboBox2.ListIndex) & "列" End If End Sub
そうすると、コード番号でやる方法だと、ComboBox1を選択した時点で、 実行時エラー'380' ListIndexプロパティを設定できません。プロパティの値が不正です。 が発生したのです。
ケンさんの方法と、みやほりんさんの方法で、ComboBox1に出るリスト項目は同じなのに、 なぜComboBox2への代入時にエラーになるのか、いまだにわかりません_/ ̄|○ il||li ※今気付いたんですが、(遅いって(^_^A; Sub ComboBox1_Change()の方もAddressを使えば変数で可能ですね。 試してこようε=ε=ε=ε=('〜'*)ノ イッテキマース♪
(川野鮎太郎)
出来ました!!! Sub ComboBox1_Change() If ComboBox2.Text = "" Then Select Case ComboBox1.ListIndex Case Is < 25 Me.ComboBox2.Text = Left(Columns(ComboBox1.ListIndex + 3). _ Address(False, False), 1) & "列" Case Is < 256 Me.ComboBox2.Text = Left(Columns(ComboBox1.ListIndex + 3). _ Address(False, False), 2) & "列" End Select End If End Sub
上記で希望通りのことが出来ました^^ ありがとうございました(o_ _)o)) ※追伸 Address(False, False)で絶対参照の$を外したセル番地が抜き出せるんですね^^ これも一つ勉強になりました^^ (川野鮎太郎)
こんなのもドゾ。 (ramrun)
Private Sub UserForm_Initialize() Dim i As Object For Each i In Range("1:1") Me.ComboBox1.AddItem Replace(i.Address(False, False), 1, "") & "列" Next i End Sub
おはようございます。m(._.)m ペコッ ramrunさんにも、いつもお世話になっております。 なるほど・・・、1行目のセルを対象に全部のセル番地を繰り返すんですね。_〆\(..;) メモメモ 一般関数でも同じですが、Replace関数が今一理解できてないです_/ ̄|○ il||li 早速ためさせていただいたところ、上手くいきました^^v ありがとうございます。
昨日のケンさんのコードで上手くいかなかった原因が判りました。 σ(^_^;)の記述ミスというか、ループ処理の仕方がまずかったようです。(ノ_・。) というのは、ComboBoxが2つあるのは、上記の通りだったのですが、 Dim i As Integer, r As Integer Dim ii As Integer, rr As Integer For i = 64 To 73 For r = 65 To 90 If i = 73 And r = 87 Then Exit Sub ElseIf i = 64 Then ComboBox1.AddItem Chr(r) & "列" Else ComboBox1.AddItem Chr(i) & Chr(r) & "列" End If Next r Next i For ii = 64 To 73 For rr = 65 To 90 If ii = 73 And rr = 87 Then Exit Sub ElseIf ii = 64 Then ComboBox2.AddItem Chr(rr) & "列" Else ComboBox2.AddItem Chr(ii) & Chr(rr) & "列" End If Next rr Next ii として、ふたつに格納しようとしてたんです。 今朝、F8で1行ずつ見ていったら、ComboBox1側で、IVまで行った時(iが73、rが87)で、 End Ifを通らず、Exit Subで抜けているのに気づきました(^_^;)
そこで、以下のコードに変えてみたところ、バッチリ行きました^^v
Dim i As Integer, r As Integer For i = 64 To 73 For r = 65 To 90 If i = 73 And r = 87 Then Exit Sub ElseIf i = 64 Then ComboBox1.AddItem Chr(r) & "列" ComboBox2.AddItem Chr(r) & "列" Else ComboBox1.AddItem Chr(i) & Chr(r) & "列" ComboBox2.AddItem Chr(i) & Chr(r) & "列" End If Next r Next i ※私のミスでケンさんには、不愉快な思いをさせてしまったことと思って反省しております。 m(._.)m ペコッ いつもは回答している時には、そこはそうじゃないでしょう・・・って思いながら、 自分が質問する側に回ったときは、全体が見えなくなってしまってるみたいです(ノ_<。)
今後ともご指導よろしくお願いします。 (川野鮎太郎)
通勤中にふと考えたら、1を""に置換しているんだから、最初から "列"にすればよかったと(笑)。
あとから気付くことはたくさんありますよ。 成長するにはPDCAをまわすことです。
回答者の気持ちはただ1つ。 クール宅急便まだかな。 (ramrun)
Private Sub UserForm_Initialize() Dim i As Object For Each i In Range("1:1") Me.ComboBox1.AddItem Replace(i.Address(False, False), 1, "列") Next i End Sub
> 成長するにはPDCAをまわすことです。 確かにそうなんですよね(^_^A; しかし会社でPDCAなんか言われたら、ポイ(^_^)ノ・・・...pdcaωコロコロ ってしまう方なんで成長しないんですよね_/ ̄|○ il||li (私の場合P=ポッと、D=出たもの、C=チョット、A=遊ぼうですから)
>回答者の気持ちはただ1つ。 >クール宅急便まだかな。 _(^▽^)ノ☆ ぎゃはは! 会社のデスクの前で吹き出してしまいました。
Me.ComboBox1.AddItem Replace(i.Address(False, False), 1, "列") これでもバッチリ上手くいきました^^v (川野鮎太郎)
Range("1:1")、Replace(i.Address(False, False), 1, "列")・・・ 頭柔らかいですねぇ。 感心します。 (みやほりん)
ぎゃぁぁ かぶってまった でも せっかくつくったんで 乗せときます Dim i As Long For i = 1 To 256 'その1 Me.ComboBox1.AddItem Split(Cells(1, i).Address(False, False), 1)(0) & "列" 'その2 Me.ComboBox1.AddItem Replace(Cells(1, i).Address(False, False), 1, "") & "列" Next i (Null)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.