Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10228 / 13644 ツリー ←次へ | 前へ→

【23003】テキストの各行に別々のセルを対応させる 仔牛 05/3/9(水) 19:29 質問[未読]
【23006】Re:テキストの各行に別々のセルを対応させる G-Luck 05/3/9(水) 19:44 発言[未読]
【23009】Re:テキストの各行に別々のセルを対応させる 仔牛 05/3/9(水) 19:52 質問[未読]
【23008】Re:テキストの各行に別々のセルを対応させる ichinose 05/3/9(水) 19:52 発言[未読]
【23010】ichinoseさんご回答有難うございます。 仔牛 05/3/9(水) 20:31 質問[未読]
【23011】Re:ichinoseさんご回答有難うございます。 ichinose 05/3/9(水) 21:25 発言[未読]
【23014】有難うございました。 仔牛 05/3/9(水) 21:44 お礼[未読]

【23003】テキストの各行に別々のセルを対応させる
質問  仔牛  - 05/3/9(水) 19:29 -

引用なし
パスワード
   題名のとおり、テキストボックスにスクロールバーをつけ、その各行に別々のセル(リスト状)を対応させた物を作りたいのですが、どのようにすればよろしいのでしょうか?
もし可能であれば、ご指南のほどよろしくお願いします。

【23006】Re:テキストの各行に別々のセルを対応さ...
発言  G-Luck  - 05/3/9(水) 19:44 -

引用なし
パスワード
   ▼仔牛 さん:
リストボックスのことですか?

【23008】Re:テキストの各行に別々のセルを対応さ...
発言  ichinose  - 05/3/9(水) 19:52 -

引用なし
パスワード
   ▼仔牛 さん:
こんばんは。

>題名のとおり、テキストボックスにスクロールバーをつけ、その各行に別々のセル(リスト状)を対応させた物を作りたいのですが、どのようにすればよろしいのでしょうか?
>もし可能であれば、ご指南のほどよろしくお願いします。
新規ブックにユーザーフォーム(Userform1)にテキストボックスを一つ設定して下さい(半角の英字が5文字分ぐらい入るセル幅にして・・。Textbox1)。

Userform1のモジュールに

'==============================================================
Private Sub UserForm_Initialize()
  Dim rng As Range
  Set rng = mk_sample_data 'アクティブシートにサンプル作成
  With TextBox1
   .ScrollBars = fmScrollBarsVertical 'スクロールを設定
   .MultiLine = True 'マルチライン設定
   .Text = rng.Cells(1)
   For idx = 2 To rng.Count
    .Text = .Text & vbCrLf & rng.Cells(idx)
    Next
   .SelStart = 0
   End With
End Sub
'=======================================================
Function mk_sample_data() As Range
  Dim data As Variant
  data = Array("a", "b", "c", "d", "e", "f", "g", "h")
  For idx = LBound(data) To UBound(data)
   Cells(idx + 1, 1).Value = String(5, data(idx))
   Next
  Set mk_sample_data = Range(Cells(LBound(data) + 1, 1), Cells(UBound(data) + 1, 1))
End Function

こんなイメージでしょうか?
スクロールやマルチラインは、プロパティウインドウで事前設定が
可能です(私が実際するなら、事前設定しておきます)。

【23009】Re:テキストの各行に別々のセルを対応さ...
質問  仔牛  - 05/3/9(水) 19:52 -

引用なし
パスワード
   リストボックスに、文字を入力できるようにしたようなものを、と考えているのですが、可能なのでしょうか?

【23010】ichinoseさんご回答有難うございます。
質問  仔牛  - 05/3/9(水) 20:31 -

引用なし
パスワード
    ご回答有難うございます。
概観のイメージは、まさにこの状態なのですが、テキストボックスのチェンジに対応させて、その変更がすぐに反映されるようにするには、どのようにすればいいのでしょうか?
 また、サンプルとして入力された文字列をあらかじめ入力し(対象となる範囲を作成して)、事前設定をすませておいた場合だと、どのような形にすればよろしいのでしょうか。

 いろいろと確かめて、調べて見るのが一番いいのはわかっているのですが、今まで使ったことのない、関数がいくつか使われていることと、私がまだVBA自体を深く理解できていないので、どうか教えていただけないでしょうか

【23011】Re:ichinoseさんご回答有難うございます。
発言  ichinose  - 05/3/9(水) 21:25 -

引用なし
パスワード
   ▼仔牛 さん:
> ご回答有難うございます。
>概観のイメージは、まさにこの状態なのですが、テキストボックスのチェンジに対応させて、その変更がすぐに反映されるようにするには、どのようにすればいいのでしょうか?

メンバ数が少ないならば、前回のコードをちょっと訂正・追加して

Private rng As Range
Private evflg As Boolean
'==============================================
Private Sub UserForm_Initialize()
  Set rng = mk_sample_data
  evflg = False
  With TextBox1
   .ScrollBars = fmScrollBarsVertical
   .MultiLine = True
   .Text = rng.Cells(1)
   For idx = 2 To rng.Count
    .Text = .Text & vbCrLf & rng.Cells(idx)
    Next
   .SelStart = 0
   End With
  evflg = True
End Sub
'=====================================================
Private Sub TextBox1_Change()
  If evflg = True Then
   With TextBox1
    rng.Value = Application.Transpose(Split(.Text, vbCrLf))
    End With
   End If
End Sub
'=================================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'新しい改行を禁止する
  If Shift = 1 And KeyCode = 13 Then KeyCode = 0
End Sub
'===========================================
Function mk_sample_data() As Range
  Dim data As Variant
  data = Array("a", "b", "c", "d", "e", "f", "g", "h")
  For idx = LBound(data) To UBound(data)
   Cells(idx + 1, 1).Value = String(5, data(idx))
   Next
  Set mk_sample_data = Range(Cells(LBound(data) + 1, 1), Cells(UBound(data) + 1, 1))
End Function

こんな方法で可能ですが、コマンドボタンのクリックでセルに反映の方が
よいのかもしれませんよ!!

> また、サンプルとして入力された文字列をあらかじめ入力し(対象となる範囲を作成して)、事前設定をすませておいた場合だと、どのような形にすればよろしいのでしょうか。
テキストボックスの内容の事前設定は止めたほうが良いと思いますよ!!
指定セル範囲が決まっているなら(例えば、A1からA20)

'=======================================================
Private Sub UserForm_Initialize()
  Set rng = range("a1:a20") 'ここで設定して下さい
  evflg = False
  With TextBox1
   .ScrollBars = fmScrollBarsVertical
   .MultiLine = True
   .Text = rng.Cells(1)
   For idx = 2 To rng.Count
    .Text = .Text & vbCrLf & rng.Cells(idx)
    Next
   .SelStart = 0
   End With
  evflg = True
End Sub

【23014】有難うございました。
お礼  仔牛  - 05/3/9(水) 21:44 -

引用なし
パスワード
    お手数にもかかわらず、すぐに実用できるコードまで書いて頂き、有難うございます。まだなぜそうなるのかを、完全にはわかっていないのですが、教えていただいたコードを参考にして、いろいろと試し、今度はゼロから書くことができるように、がんばります。
 本当に有難うございました。

10228 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free