[[20041108205903]] 『コンボボックスに格納するデータについて』(川野鮎太郎) ページの最後に飛ぶ

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

 

『コンボボックスに格納するデータについて』(川野鮎太郎)

 みなさん、お疲れ様です。
 再びご教示願いたく参りました(^_^;)

 表題の件ですが、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.