Excel VBA質問箱 IV

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

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


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

【46028】ユーザーフォームのリストを検索→転記 yasu 07/1/21(日) 17:02 質問[未読]
【46030】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/21(日) 17:15 発言[未読]
【46031】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/21(日) 17:33 発言[未読]
【46037】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/21(日) 18:43 発言[未読]
【46039】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/21(日) 20:29 発言[未読]
【46043】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/21(日) 20:46 発言[未読]
【46051】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/21(日) 22:51 発言[未読]
【46052】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/21(日) 23:12 発言[未読]
【46057】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/21(日) 23:32 発言[未読]
【46058】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 0:09 発言[未読]
【46060】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 0:21 発言[未読]
【46061】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 7:15 発言[未読]
【46063】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 10:21 発言[未読]
【46064】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 11:35 発言[未読]
【46067】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 12:18 発言[未読]
【46070】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 13:01 発言[未読]
【46071】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 13:09 発言[未読]
【46066】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 12:04 発言[未読]
【46084】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 17:25 発言[未読]
【46085】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 18:06 発言[未読]
【46087】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 18:12 発言[未読]
【46088】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 18:23 発言[未読]
【46086】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 18:07 発言[未読]
【46090】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 18:45 発言[未読]
【46092】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 20:48 発言[未読]
【46098】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 21:48 発言[未読]
【46099】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 22:07 発言[未読]
【46100】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/22(月) 22:44 発言[未読]
【46101】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/22(月) 22:55 発言[未読]
【46106】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 2:51 発言[未読]
【46107】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 3:03 発言[未読]
【46109】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 7:33 発言[未読]
【46114】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 9:28 発言[未読]
【46117】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 11:09 回答[未読]
【46120】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 14:09 発言[未読]
【46121】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 14:42 発言[未読]
【46122】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 15:09 発言[未読]
【46124】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 16:51 回答[未読]
【46129】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 17:33 発言[未読]
【46133】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/23(火) 20:22 発言[未読]
【46134】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/23(火) 20:40 発言[未読]
【46139】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/24(水) 3:58 発言[未読]
【46140】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/24(水) 7:28 発言[未読]
【46157】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/24(水) 20:44 発言[未読]
【46159】Re:ユーザーフォームのリストを検索→転記 かみちゃん 07/1/24(水) 20:51 発言[未読]
【46168】Re:ユーザーフォームのリストを検索→転記 yasu 07/1/25(木) 0:22 お礼[未読]

【46028】ユーザーフォームのリストを検索→転記
質問  yasu  - 07/1/21(日) 17:02 -

引用なし
パスワード
   46003でお世話になりユーザーフォーム1→リスト1表示→転記は
出来るようになったのですがリストが約1000行ぐらいあり、探すのが
大変なのでテキストBOX1に検索値入力コマンドボタンON別のリストボックス2に表示
検索は一部でも一致すれば表示したい。
リストボックス2からセルへ転記
こんな事出来ますか。

よろしくお願いします。

【46030】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん  - 07/1/21(日) 17:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> リストが約1000行ぐらいあり、探すのが大変なのでテキストBOX1に検索値入力コ
> マンドボタンON別のリストボックス2に表示検索は一部でも一致すれば表示したい。
> リストボックス2からセルへ転記

何がしたいのかが今ひとつわかりません。
・どういうリストなのですか?
 テキストファイルになっているのですか?
・TextBox1に検索した意値を入力
  ↓
 CommandButton1をクリック
  ↓
 リスト(テキストファイル)から検索
  ↓
 検索条件(部分一致)に一致したらListBox2にAdd ← Like 演算子でできる?
  ↓
 ListBox2から転記? ←どのタイミングで?
・今どのようなコードになっているのですか?
 [46029]で、「解決ですよ」と言われても、結局どのように解決なさったのかが
 わかりません。

【46031】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/21(日) 17:33 -

引用なし
パスワード
   ▼かみちゃん さん:
またまたすみませんありがとうございます。
では解決の方から説明いたします。
まずユーザーフォームの方ですが
下記コードです。
テキスト.txtはCドライブ直下に置いてあります。

Private Sub ListBox1_MouseUp(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  ActiveCell.Value = Left(ListBox1.Value, 6)
  Unload Me
End Sub
Private Sub UserForm_Initialize()
  Dim FName As String
  FName = ThisWorkbook.Path + "C:\テキスト.txt"
  Const cnsFILENAME = "C:\テキスト.txt"
  Dim intFF As Integer
  Dim strREC As String
  Dim GYO As Long

  intFF = FreeFile
  Open cnsFILENAME For Input As #intFF
  GYO = 1
  Do Until EOF(intFF)
    Line Input #intFF, strREC
    UserForm2.ListBox1.AddItem strREC
  Loop
  
  Me.Left = 150
  Me.Top = 100
End Sub

次にsheet5("発注")モジュールは下記です。
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
 
 If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]
    On Error Resume Next
 If Not Intersect(Target, Range("S8:S107")) Is Nothing Then
    Cancel = True
  UserForm1.Show vbModeless
 Else
  UserForm1.Hide
 End If
 
  If 1 < Target.Count Then Exit Sub
    On Error Resume Next
 If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
    Cancel = True
  UserForm2.Show vbModeless
 Else
  UserForm2.Hide
 End If
End Sub
これで一応テキスト.txt左側6桁の数字をR8からR107のセルに転記
出来るようになりました。
しかし
これから下は今回できなかなというものです。
1.テキスト.txtの行数が1000行前後ありユーザーフォームを表示させても
 探すのが大変一応アイウエオ順に並んでいる。
 依って
2.今のリストBOXに表示された脇にテキストボックス1を配し、ここに
 検索値を記入(あいまい検索一部一致しても表示させたい)
3.その脇にリストBOX2を配しておき上記検索結果を表示
4.リストBOX2からセルR8からR107のいずれかのセルに転記。
5.終了
こんな感じなんですがかみちゃん解りますか?
よろしくお願いします。

>
>> リストが約1000行ぐらいあり、探すのが大変なのでテキストBOX1に検索値入力コ
>> マンドボタンON別のリストボックス2に表示検索は一部でも一致すれば表示したい。
>> リストボックス2からセルへ転記
>
>何がしたいのかが今ひとつわかりません。
>・どういうリストなのですか?
> テキストファイルになっているのですか?
>・TextBox1に検索した意値を入力
>  ↓
> CommandButton1をクリック
>  ↓
> リスト(テキストファイル)から検索
>  ↓
> 検索条件(部分一致)に一致したらListBox2にAdd ← Like 演算子でできる?
>  ↓
> ListBox2から転記? ←どのタイミングで?
>・今どのようなコードになっているのですか?
> [46029]で、「解決ですよ」と言われても、結局どのように解決なさったのかが
> わかりません。

【46037】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん  - 07/1/21(日) 18:43 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>1.テキスト.txtの行数が1000行前後ありユーザーフォームを表示させても
> 探すのが大変一応アイウエオ順に並んでいる。
> 依って
>2.今のリストBOXに表示された脇にテキストボックス1を配し、ここに
> 検索値を記入(あいまい検索一部一致しても表示させたい)
>3.その脇にリストBOX2を配しておき上記検索結果を表示

 UserForm2.ListBox1.AddItem strREC
てはなく、
 If strREC Like "*" & Me.TextBox1.Value & "*" Then
  UserForm2.ListBox2.AddItem strREC
 End If
とすればいかかでしょうか?

あと、少し気になったのですが、
> If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]

結合セルがあるのでしょうか?

【46039】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/21(日) 20:29 -

引用なし
パスワード
   ▼かみちゃん さん:
返事ありがとうございます。
ところでお忙しいのはわかっておりますが
コマンドボタンとリストボックス2にはどのような
コードを書けばいいですかね?
よろしくお願いします。
尚、結合セルはありません。

>
>>1.テキスト.txtの行数が1000行前後ありユーザーフォームを表示させても
>> 探すのが大変一応アイウエオ順に並んでいる。
>> 依って
>>2.今のリストBOXに表示された脇にテキストボックス1を配し、ここに
>> 検索値を記入(あいまい検索一部一致しても表示させたい)
  コマンドボタンON
>>3.その脇にリストBOX2を配しておき上記検索結果を表示
>
> UserForm2.ListBox1.AddItem strREC
>てはなく、
> If strREC Like "*" & Me.TextBox1.Value & "*" Then
>  UserForm2.ListBox2.AddItem strREC
> End If
>とすればいかかでしょうか?
>
>あと、少し気になったのですが、
>> If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]
>
>結合セルがあるのでしょうか?

【46043】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん  - 07/1/21(日) 20:46 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> お忙しいのはわかっておりますが
> コマンドボタンとリストボックス2にはどのような
> コードを書けばいいですかね?

全然忙しくはないのですが(^^;
[46037]でのコメント、かなりとんちんかんなことを書いてしまいました。

Private Sub UserForm_Initialize()
'  Dim FName As String
'  FName = ThisWorkbook.Path + "C:\テキスト.txt"
'  Const cnsFILENAME = "C:\テキスト.txt"
'  Dim intFF As Integer
'  Dim strREC As String
'  Dim GYO As Long
'
'  intFF = FreeFile
'  Open cnsFILENAME For Input As #intFF
'  GYO = 1
'  Do Until EOF(intFF)
'    Line Input #intFF, strREC
'    UserForm2.ListBox1.AddItem strREC
'  Loop
 
  Me.Left = 150
  Me.Top = 100
End Sub

Private Sub CommandButton1_Click()
  Dim FName As String
  FName = ThisWorkbook.Path + "C:\テキスト.txt"
  Const cnsFILENAME = "C:\テキスト.txt"
  Dim intFF As Integer
  Dim strREC As String
  Dim GYO As Long

  intFF = FreeFile
  Open cnsFILENAME For Input As #intFF
  GYO = 1
  Do Until EOF(intFF)
    Line Input #intFF, strREC
    If strREC Like "*" & Me.TextBox1.Value & "*" Then
      UserForm2.ListBox2.AddItem strREC
    End If
  Loop
End Sub

としてみてください。

> リストボックス2からセルへ転記

これは、どのタイミングでするのでしょうか?
複数選択可能なListBoxなのでしょうか?
以下が参考になりますでしょうか?
http://www.geocities.jp/happy_ngi/YNxv9g042.html
(先頭から二文字は(全角になっているので)半角にしてください)

【46051】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/21(日) 22:51 -

引用なし
パスワード
     ▼かみちゃん さん:
ありがとうございます。
テキストBOXに検索値→コマンドボタン→リストボックスに表示
OKです。下に書いてあるように両方のリストボックスから転記できますか
どちらからでも可能でしたらその方が便利です。
それとリストの中にかなりカタカナ名があるのですが
検索時カタカナ 全角/半角関係なく検索できますか。


>こんにちは。かみちゃん です。
>
>> お忙しいのはわかっておりますが
>> コマンドボタンとリストボックス2にはどのような
>> コードを書けばいいですかね?
>
>全然忙しくはないのですが(^^;
>[46037]でのコメント、かなりとんちんかんなことを書いてしまいました。
>
>Private Sub UserForm_Initialize()
>'  Dim FName As String
>'  FName = ThisWorkbook.Path + "C:\テキスト.txt"
>'  Const cnsFILENAME = "C:\テキスト.txt"
>'  Dim intFF As Integer
>'  Dim strREC As String
>'  Dim GYO As Long
>'
>'  intFF = FreeFile
>'  Open cnsFILENAME For Input As #intFF
>'  GYO = 1
>'  Do Until EOF(intFF)
>'    Line Input #intFF, strREC
>'    UserForm2.ListBox1.AddItem strREC
>'  Loop
> 
>  Me.Left = 150
>  Me.Top = 100
>End Sub
>
>Private Sub CommandButton1_Click()
>  Dim FName As String
>  FName = ThisWorkbook.Path + "C:\テキスト.txt"
>  Const cnsFILENAME = "C:\テキスト.txt"
>  Dim intFF As Integer
>  Dim strREC As String
>  Dim GYO As Long
>
>  intFF = FreeFile
>  Open cnsFILENAME For Input As #intFF
>  GYO = 1
>  Do Until EOF(intFF)
>    Line Input #intFF, strREC
>    If strREC Like "*" & Me.TextBox1.Value & "*" Then
>      UserForm2.ListBox2.AddItem strREC
>    End If
>  Loop
>End Sub
>
>としてみてください。
>
>> リストボックス2からセルへ転記
>
>これは、どのタイミングでするのでしょうか?
セルをダブルクリックしテキスト.txtがユーザーフォーム上に表示されますね
その後→テキストボックスに検索値→コマンドボタン→リストボックス2に
検索値が表示→この中に目的とするデータがあれば→データをクリック転記
完了です。
まずカタカナ検索は?
リストボックス1と2どちらからでも転記このあたり
教授下さい。
不出来で申し訳ないのですが
よろしくお願いします。
ちょっと検索してみたのですが違う結果が出た場合コマンドボタン2で
一度リストボックスをクリアしたいのですが
どう書いたらいいですか。
重ね重ねよろしくお願いします。

>複数選択可能なListBoxなのでしょうか?
>以下が参考になりますでしょうか?
>http://www.geocities.jp/happy_ngi/YNxv9g042.html
>(先頭から二文字は(全角になっているので)半角にしてください)

【46052】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/21(日) 23:12 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>セルをダブルクリックしテキスト.txtがユーザーフォーム上に表示されますね
>その後→テキストボックスに検索値→コマンドボタン→リストボックス2に
>検索値が表示→この中に目的とするデータがあれば→データをクリック転記

私は、以下のような処理ということで理解していますが、違っていたら、教えてください。
1.特定のセルをダブルクリック
2.UserFormが表示される
3.TextBox1の値に検索値を入れる
 (カタカナでもOK。全角半角、大文字小文字はとりあえず区別すること)
4.コマンドボタンをクリック
5.テキスト.txtからListBox2に条件が一致するデータのみAddされる
6.ListBox2をクリックしたらセルへ転記?
 この部分が今ひとつわかりません。
 どのタイミングでセルへ転記するのですか?
 ListBoxではなく、ComboBoxではないのですか?

UserFormは、いくつあって、そのUserFormには、どのようなコントロール
(TextBoxや、ListBox)がいくつ配置されているのか(複数のUserFormがあるならばそれぞれ)
教えていただけませんか?
なんとなく、私が勘違いしているような気がするものですから。。。

> 違う結果が出た場合コマンドボタン2で
> 一度リストボックスをクリアしたい

Listbox2.Clear
です。
以下も参考にしてみてください。
http://homepage3.nifty.com/bear/basis/listbox.htm
(先頭から二文字は(全角になっているので)半角にしてください)

【46057】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/21(日) 23:32 -

引用なし
パスワード
   ▼かみちゃん さん:

>>セルをダブルクリックしテキスト.txtがユーザーフォーム上に表示されますね
>>その後→テキストボックスに検索値→コマンドボタン→リストボックス2に
>>検索値が表示→この中に目的とするデータがあれば→データをクリック転記
>
>私は、以下のような処理ということで理解していますが、違っていたら、教えてください。

ほぼOKですが
もう一度簡潔に書きます。UserForm2が1つです。
配してあるツールですが
ListBox1が1つ(始め特定セルをクリックした時---テキスト.txt表示用)
TextBox1が1つ(検索値入力用)
CommandButton1が1つ(検索値入力後クリック)
CommandButton2が1つ(検索の値クリア用)先ほどの問い合わせです。
ListBox2が1つ(検索結果表示用)
以上がユーザーフォームの構成です。

ユーザーフォームは
>1.特定のセルをダブルクリック
ok

>2.UserFormが表示される
ok

>3.TextBox1の値に検索値を入れる
> (カタカナでもOK。全角半角、大文字小文字はとりあえず区別すること)
ちょっと希望
検索時カタカナ 全角半角 大文字小文字はテキスト.txtがまちまちのため
オール対応どちらでも検索結果に表示したいです。

>4.コマンドボタンをクリック
ok

>5.テキスト.txtからListBox2に条件が一致するデータのみAddされる
ok

>6.ListBox2をクリックしたらセルへ転記?
ok
下記のように記述しました。

Private Sub ListBox2_MouseUp(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  ActiveCell.Value = Left(ListBox2.Value, 6)
  Unload Me
End Sub

> この部分が今ひとつわかりません。
> どのタイミングでセルへ転記するのですか?
検索結果を表示後、表示された内容に目的の名前があれば
クリック→転記→終了 なければ再検索あるいは終了し手入力

> ListBoxではなく、ComboBoxではないのですか?
どの部分ですかCombBox?

>
>UserFormは、いくつあって、そのUserFormには、どのようなコントロール
>(TextBoxや、ListBox)がいくつ配置されているのか(複数のUserFormがあるならばそれぞれ)
>教えていただけませんか?
>なんとなく、私が勘違いしているような気がするものですから。。。
>
>> 違う結果が出た場合コマンドボタン2で
>> 一度リストボックスをクリアしたい
>
>Listbox2.Clear
Private Sub CommandButton2_Click()
  UserForm2.ListBox2.Clear
End Sub
↑このようにしました。
>です。
>以下も参考にしてみてください。
>http://homepage3.nifty.com/bear/basis/listbox.htm
>(先頭から二文字は(全角になっているので)半角にしてください)
あとでよく見ます。
以上なんですがかみちゃんさん
理解いただけましたか。。
その上で全角半角・大文字小文字を何とかなりませんか・・・
よろしくお願いします。

【46058】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 0:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ListBox1が1つ(始め特定セルをクリックした時---テキスト.txt表示用)

ここがわかりません。
なぜ、そのようなことがしたいのですか?
先にTextBox1に検索値を入れて、ListBox2に部分一致するデータを表示することではいけないのですか?
ListBox1からTextBox1の検索値に部分一致しない選択肢を消去することもできますけど?
なんとなくListBox1は、意味のないものに感じます。

>>3.TextBox1の値に検索値を入れる
>> (カタカナでもOK。全角半角、大文字小文字はとりあえず区別すること)
>ちょっと希望
>検索時カタカナ 全角半角 大文字小文字はテキスト.txtがまちまちのため
>オール対応どちらでも検索結果に表示したいです。

あとにしませんか?

>>6.ListBox2をクリックしたらセルへ転記?
>ok
>下記のように記述しました。
>
>Private Sub ListBox2_MouseUp(ByVal Button As Integer, _
>    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>  ActiveCell.Value = Left(ListBox2.Value, 6)
>  Unload Me
>End Sub
>
>> この部分が今ひとつわかりません。
>> どのタイミングでセルへ転記するのですか?
>検索結果を表示後、表示された内容に目的の名前があれば
>クリック→転記→終了 なければ再検索あるいは終了し手入力
>
>> ListBoxではなく、ComboBoxではないのですか?
>どの部分ですかComboBox?

なぜ、ListBoxを使うのですか?
選択がひとつだけならば、ComboBoxでいいのでは?
いや、ListBoxでは具合が悪いとかそういう意味ではありません。

>その上で全角半角・大文字小文字を何とかなりませんか・・・

ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
そういうわけにはいきませんか?

【46060】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 0:21 -

引用なし
パスワード
   ▼かみちゃん さん:

>>ListBox1が1つ(始め特定セルをクリックした時---テキスト.txt表示用)
>
>ここがわかりません。
>なぜ、そのようなことがしたいのですか?
>先にTextBox1に検索値を入れて、ListBox2に部分一致するデータを表示することではいけないのですか?
特に問題は無いような気がしますが、
念のため確認用に表示してます。
>ListBox1からTextBox1の検索値に部分一致しない選択肢を消去することもできますけど?
>なんとなくListBox1は、意味のないものに感じます。
>
>>>3.TextBox1の値に検索値を入れる
>>> (カタカナでもOK。全角半角、大文字小文字はとりあえず区別すること)
>>ちょっと希望
>>検索時カタカナ 全角半角 大文字小文字はテキスト.txtがまちまちのため
>>オール対応どちらでも検索結果に表示したいです。
>
>あとにしませんか?

かみちゃんさんからそう言われては
お待ちするしかないですね。
>
>>>6.ListBox2をクリックしたらセルへ転記?
>>ok
>>下記のように記述しました。
>>
>>Private Sub ListBox2_MouseUp(ByVal Button As Integer, _
>>    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
>>  ActiveCell.Value = Left(ListBox2.Value, 6)
>>  Unload Me
>>End Sub
>>
>>> この部分が今ひとつわかりません。
>>> どのタイミングでセルへ転記するのですか?
>>検索結果を表示後、表示された内容に目的の名前があれば
>>クリック→転記→終了 なければ再検索あるいは終了し手入力
>>
>>> ListBoxではなく、ComboBoxではないのですか?
>>どの部分ですかComboBox?
>
>なぜ、ListBoxを使うのですか?
>選択がひとつだけならば、ComboBoxでいいのでは?

会社名のリストなのですが
同じ会社名でも
○○社 東京支店
○○社 名古屋支店
複数店ある場合が多くその店ごとにコードが決められてあり
多い店では5〜10件程度となるためにListBoxを使っております。

>いや、ListBoxでは具合が悪いとかそういう意味ではありません。
>
>>その上で全角半角・大文字小文字を何とかなりませんか・・・
>
>ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
>そういうわけにはいきませんか?
会社の会計専用ソフトのデータを引き出してきていますので
出来ればそのまま使いたいのですが
千数百件もあると見落としもあると思うので・・・
よろしくお願いします。

【46061】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 7:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>ListBox1が1つ(始め特定セルをクリックした時---テキスト.txt表示用)
>>
>>ここがわかりません。
>>なぜ、そのようなことがしたいのですか?
>>先にTextBox1に検索値を入れて、ListBox2に部分一致するデータを表示することではいけないのですか?
>特に問題は無いような気がしますが、
>念のため確認用に表示してます。

テキスト.txtのすべてのデータが反映されるListBox1がなくても、特に問題なく、
念のため確認用に表示するだけのことであれば、実装はしないほうがいいと思い
ます。
なぜなら、その分だけ、コードは余計に作らないといけないですし、その分やや
こしくなると思うからです。

>>>検索結果を表示後、表示された内容に目的の名前があれば
>>>クリック→転記→終了 なければ再検索あるいは終了し手入力
>>>
>>>> ListBoxではなく、ComboBoxではないのですか?
>>>どの部分ですかComboBox?
>>
>>なぜ、ListBoxを使うのですか?
>>選択がひとつだけならば、ComboBoxでいいのでは?
>
>会社名のリストなのですが
>同じ会社名でも
>○○社 東京支店
>○○社 名古屋支店
>複数店ある場合が多くその店ごとにコードが決められてあり
>多い店では5〜10件程度となるためにListBoxを使っております。

選択肢ではなく、クリックするのは、ひとつなのですか?複数あるのですか?
ListBoxのClickイベントを使うと、Clickしたときに動きますので、
ひとつだけ選ぶというのであれば、ComboBoxのほうが簡単です。
ただ、複数をクリックするのであれば、ListBoxしかできません。
ただし、このときClickイベントでいいのかは、少し疑問です。

別に、ListBoxではできないというわけではなく、理解しやすいコードにするには
という意味です。
そうではんくて、動けばいいというのであれば、そういうコードもできます。

>>>その上で全角半角・大文字小文字を何とかなりませんか・・・
>>
>>ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
>>そういうわけにはいきませんか?
>会社の会計専用ソフトのデータを引き出してきていますので
>出来ればそのまま使いたいのですが
>千数百件もあると見落としもあると思うので・・・

見落としはないと思いますよ。
なぜなら、ListBoxに反映させるときに、プログラムが統一処理しますから、別に
yasuさんご自身が元データを修正してくださいというわけではないです。
プログラムで処理する際も、あくまでListBox上の話です。元データはそのままです。
ただ、統一処理をする必要もないのかもしれません。
その代わり、部分一致の判定処理を少し複雑にしないといけなくなりますが・・・

それにしても、会計専用ソフトですか・・・
私も市販の会計ソフトのデータをExcelへ展開するなどの作業はマクロで処理していますね。

【46063】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 10:21 -

引用なし
パスワード
   ▼かみちゃん さん:
詳しい説明ありがとうございます。

>>特に問題は無いような気がしますが、
>>念のため確認用に表示してます。
>
>テキスト.txtのすべてのデータが反映されるListBox1がなくても、特に問題なく、
>念のため確認用に表示するだけのことであれば、実装はしないほうがいいと思い
>ます。
>なぜなら、その分だけ、コードは余計に作らないといけないですし、その分やや
>こしくなると思うからです。
そうですね、説明を聞くと無くてもいいみたいですね


>>>なぜ、ListBoxを使うのですか?
>>>選択がひとつだけならば、ComboBoxでいいのでは?
>>
>>会社名のリストなのですが
>>同じ会社名でも
>>○○社 東京支店
>>○○社 名古屋支店
>>複数店ある場合が多くその店ごとにコードが決められてあり
>>多い店では5〜10件程度となるためにListBoxを使っております。
>
>選択肢ではなく、クリックするのは、ひとつなのですか?複数あるのですか?

クリックするのは1つです。

>ListBoxのClickイベントを使うと、Clickしたときに動きますので、
>ひとつだけ選ぶというのであれば、ComboBoxのほうが簡単です。

ComboBoxは検索したときに一覧表示で出ないのでいかがなものかなと
思います。確かに間違えてクリックはすることはないと思いますが

>ただ、複数をクリックするのであれば、ListBoxしかできません。
>ただし、このときClickイベントでいいのかは、少し疑問です。
>
>別に、ListBoxではできないというわけではなく、理解しやすいコードにするには
>という意味です。
>そうではんくて、動けばいいというのであれば、そういうコードもできます。
>
>>>>その上で全角半角・大文字小文字を何とかなりませんか・・・
>>>
>>>ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
>>>そういうわけにはいきませんか?
>>会社の会計専用ソフトのデータを引き出してきていますので
>>出来ればそのまま使いたいのですが
>>千数百件もあると見落としもあると思うので・・・
>
>見落としはないと思いますよ。
>なぜなら、ListBoxに反映させるときに、プログラムが統一処理しますから、別に
>yasuさんご自身が元データを修正してくださいというわけではないです。
>プログラムで処理する際も、あくまでListBox上の話です。元データはそのままで
>す。

よく解らないのですが専用ソフトからコードと社名のみ出力したデータを
貰うのですがそのデータ自体カタカナ名がの全角だったり、半角だったり
おそらく長い社名に半角入力しているのだと思います。(課が違うので?)
しているのです。

>ただ、統一処理をする必要もないのかもしれません。
>その代わり、部分一致の判定処理を少し複雑にしないといけなくなりますが・・・
>
全角半角・難しいですか?

>それにしても、会計専用ソフトですか・・・
>私も市販の会計ソフトのデータをExcelへ展開するなどの作業はマクロで処理していますね。
かみちゃんさんと違いマクロ処理などできませんね・・・
出来るようになりたいですが少しずつここの掲示板を参考にしながら
徐々にやりたいと考えています。

【46064】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 11:35 -

引用なし
パスワード
   ▼かみちゃん さん:
いつもすみません
仮に今ListBox1に表示させているのは"テキスト.txt"ですが
これを"コード.xls"のA1からC列最終まで表示させるには、
どんなコードにすればいいですか?

Private Sub UserForm_Initialize()
  Dim FName As String
  FName = ThisWorkbook.Path + "C:\コード.xls"★ココを変更
  Const cnsFILENAME = "C:\コード.xls"★ココを変更
  範囲は、どのように指定するのでしょう?
  こういうケースが出てきそうなのでよろしくお願いします。
  Dim intFF As Integer
  Dim strREC As String
  Dim GYO As Long

  intFF = FreeFile
  Open cnsFILENAME For Input As #intFF
  GYO = 1
  Do Until EOF(intFF)
    Line Input #intFF, strREC
  If strREC Like "*" & Me.TextBox1.Value & "*" Then
    UserForm2.ListBox1.AddItem strREC
  End If
'    UserForm2.ListBox1.AddItem strREC
  Loop
  
  Me.Left = 150
  Me.Top = 100
End Sub

【46066】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 12:04 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>ListBoxのClickイベントを使うと、Clickしたときに動きますので、
>>ひとつだけ選ぶというのであれば、ComboBoxのほうが簡単です。
>
>ComboBoxは検索したときに一覧表示で出ないのでいかがなものかな

なるほど。
でも、ListBoxの選択肢がたくさんあると、結局ComboBoxと同じように縦スク
ロールで探さないといけないですよね。
後は、配置したときには、1データ分の縦幅で済みます。選択するときだけ
▼でプルダウン表示すれば一覧は見えますから・・・
複数選択する必要がないのなら、値の取得をするコードも簡単なことから、
ComboBoxがおすすめですけど、それでも、ListBoxにしますか?

>>>>>その上で全角半角・大文字小文字を何とかなりませんか・・・
>>>>
>>>>ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
>>>>そういうわけにはいきませんか?
>>>会社の会計専用ソフトのデータを引き出してきていますので
>>>出来ればそのまま使いたいのですが
>>>千数百件もあると見落としもあると思うので・・・
>>
>>見落としはないと思いますよ。
>>なぜなら、ListBoxに反映させるときに、プログラムが統一処理しますから、別に
>>yasuさんご自身が元データを修正してくださいというわけではないです。
>>プログラムで処理する際も、あくまでListBox上の話です。元データはそのままで
>>す。
>
>よく解らないのですが専用ソフトからコードと社名のみ出力したデータを
>貰うのですがそのデータ自体カタカナ名がの全角だったり、半角だったり

状況は、私のところでも同じなので、よくわかります。
最終的には、全角・半角、大文字・小文字を無視(プログラム内部で統一変換)
して処理することができますから、そのようなコードにすればいいです。

変換処理は、たとえば、以下のような感じです。
例では、英字のサンプルになっていますが、数字やカタカナでも一緒です。
また、変換後のバイト数(全角2バイト、半角1バイト)を確認していただく
ために少々複雑なように見えますが、ポイントは、StrConv関数です。
標準モジュールに貼り付けて確認してみてください。

Sub Sample1()
 Dim strData As String
 
 strData = "ABcd"
 MsgBox _
  "元データ      " & strData & " " & _
   LenB(StrConv(strData, vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "全角に統一     " & StrConv(strData, vbWide) & " " & _
   LenB(StrConv(StrConv(strData, vbWide), vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "半角に統一     " & StrConv(strData, vbNarrow) & " " & _
   LenB(StrConv(StrConv(strData, vbNarrow), vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "小文字に統一    " & StrConv(strData, vbLowerCase) & " " & _
    LenB(StrConv(StrConv(strData, vbLowerCase), vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "大文字に統一    " & StrConv(strData, vbUpperCase) & " " & _
   LenB(StrConv(StrConv(strData, vbUpperCase), vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "全角大文字に統一  " & StrConv(StrConv(strData, vbWide), vbUpperCase) & " " & _
   LenB(StrConv(StrConv(StrConv(strData, vbWide), vbUpperCase), vbFromUnicode)) & _
    "Byte" & vbCrLf & _
  "半角小文字に統一  " & StrConv(StrConv(strData, vbNarrow), vbLowerCase) & " " & _
   LenB(StrConv(StrConv(StrConv(strData, vbNarrow), vbLowerCase), vbFromUnicode)) & _
    "Byte"
End Sub

>>それにしても、会計専用ソフトですか・・・
>>私も市販の会計ソフトのデータをExcelへ展開するなどの作業はマクロで処理していますね。
>かみちゃんさんと違いマクロ処理などできませんね・・・
>出来るようになりたいですが少しずつここの掲示板を参考にしながら
>徐々にやりたいと考えています

私も同じようなことをしていますので、何かのお役に立てるのならば、今後ともよろしく
お願いします。

ところで、後問題として残っているのは、
1.ListBoxに一旦全体のデータを反映させるのか?
2.検索条件に一致したもののListBoxはComboBoxにではいけませんか?
3.全角半角、大文字小文字統一処理は可能か?
4.2.で反映されたListBox(またはComboBox)からセルへの転記は、CommandButtonをClickしたとき?
というところでしょうか?

【46067】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 12:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 仮に今ListBox1に表示させているのは"テキスト.txt"ですが
> これを"コード.xls"のA1からC列最終まで表示させるには、

以下のような感じにすればいいかと思います。
コード.xlsは開いてあるものとし、Sheet1というシートを対象にするものとします。

Private Sub UserForm_Initialize()
 Dim ws As Worksheet
 
 Set ws = Workbooks("コード.xls").Sheets("Sheet1")
 With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
  Me.ListBox1.ColumnCount = .Columns.Count
  Me.ListBox1.ColumnWidths = "20 pt;20 pt;20 pt"
  Me.ListBox1.RowSource = .Address
 End With
End Sub

ただし、Excelシートから定義のようなものを読み込む場合、シート上の情報
は書き換えられるということは懸念されたほうがいいかと思います。
まぁ、txtファイルだから書き換えられないというわけではないのですが・・・

【46070】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 13:01 -

引用なし
パスワード
    ▼かみちゃん さん:
>
>> 仮に今ListBox1に表示させているのは"テキスト.txt"ですが
>> これを"コード.xls"のA1からC列最終まで表示させるには、
>
>以下のような感じにすればいいかと思います。
>コード.xlsは開いてあるものとし、Sheet1というシートを対象にするものとします。

早速またまたありがとうございます。
上記の操作説明ですがダイアログで開けることができないですか
目的の操作をクリックしたときに今回は特定のセルダブルクリックですが
前提条件を忘れることが"開いているものとする"多いと思いますので
よろしくお願いします。

>
>Private Sub UserForm_Initialize()
> Dim ws As Worksheet
> 
> Set ws = Workbooks("コード.xls").Sheets("Sheet1")
> With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
>  Me.ListBox1.ColumnCount = .Columns.Count
>  Me.ListBox1.ColumnWidths = "20 pt;20 pt;20 pt"
>  Me.ListBox1.RowSource = .Address
> End With
>End Sub
>
>ただし、Excelシートから定義のようなものを読み込む場合、シート上の情報
>は書き換えられるということは懸念されたほうがいいかと思います。
>まぁ、txtファイルだから書き換えられないというわけではないのですが・・・
そうですね

【46071】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 13:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>コード.xlsは開いてあるものとし、Sheet1というシートを対象にするものとします。
>
>上記の操作説明ですがダイアログで開けることができないですか

GetOpenFilename メソッドとOpen メソッドを使います。

ヘルプまたは以下を参考にしてみてください。
http://officetanaka.net/excel/vba/file/file02.htm
(先頭から4文字は、全角になっているので半角にしてください。)

【46084】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 17:25 -

引用なし
パスワード
   ▼かみちゃん さん:

>>>ListBoxのClickイベントを使うと、Clickしたときに動きますので、
>>>ひとつだけ選ぶというのであれば、ComboBoxのほうが簡単です。
>>
>>ComboBoxは検索したときに一覧表示で出ないのでいかがなものかな
>
>なるほど。
>でも、ListBoxの選択肢がたくさんあると、結局ComboBoxと同じように縦スク
>ロールで探さないといけないですよね。
>後は、配置したときには、1データ分の縦幅で済みます。選択するときだけ
>▼でプルダウン表示すれば一覧は見えますから・・・
>複数選択する必要がないのなら、値の取得をするコードも簡単なことから、
>ComboBoxがおすすめですけど、それでも、ListBoxにしますか?

かみちゃんのお勧め通りComboBoxでやってみます。

>>>>>>その上で全角半角・大文字小文字を何とかなりませんか・・・
>>>>>
>>>>>ListBox表示するときに、全角・半角、大文字・小文字を統一できたらいいのですが、
>>>>>そういうわけにはいきませんか?
>>>>会社の会計専用ソフトのデータを引き出してきていますので
>>>>出来ればそのまま使いたいのですが
>>>>千数百件もあると見落としもあると思うので・・・
>>>
>>>見落としはないと思いますよ。
>>>なぜなら、ListBoxに反映させるときに、プログラムが統一処理しますから、別に
>>>yasuさんご自身が元データを修正してくださいというわけではないです。
>>>プログラムで処理する際も、あくまでListBox上の話です。元データはそのままで
>>>す。
>>
>>よく解らないのですが専用ソフトからコードと社名のみ出力したデータを
>>貰うのですがそのデータ自体カタカナ名がの全角だったり、半角だったり
>
>状況は、私のところでも同じなので、よくわかります。
>最終的には、全角・半角、大文字・小文字を無視(プログラム内部で統一変換)
>して処理することができますから、そのようなコードにすればいいです。
>
>変換処理は、たとえば、以下のような感じです。
>例では、英字のサンプルになっていますが、数字やカタカナでも一緒です。
>また、変換後のバイト数(全角2バイト、半角1バイト)を確認していただく
>ために少々複雑なように見えますが、ポイントは、StrConv関数です。
>標準モジュールに貼り付けて確認してみてください。
>
>Sub Sample1()
> Dim strData As String
> 
> strData = "ABcd"
> MsgBox _
>  "元データ      " & strData & " " & _
>   LenB(StrConv(strData, vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "全角に統一     " & StrConv(strData, vbWide) & " " & _
>   LenB(StrConv(StrConv(strData, vbWide), vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "半角に統一     " & StrConv(strData, vbNarrow) & " " & _
>   LenB(StrConv(StrConv(strData, vbNarrow), vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "小文字に統一    " & StrConv(strData, vbLowerCase) & " " & _
>    LenB(StrConv(StrConv(strData, vbLowerCase), vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "大文字に統一    " & StrConv(strData, vbUpperCase) & " " & _
>   LenB(StrConv(StrConv(strData, vbUpperCase), vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "全角大文字に統一  " & StrConv(StrConv(strData, vbWide), vbUpperCase) & " " & _
>   LenB(StrConv(StrConv(StrConv(strData, vbWide), vbUpperCase), vbFromUnicode)) & _
>    "Byte" & vbCrLf & _
>  "半角小文字に統一  " & StrConv(StrConv(strData, vbNarrow), vbLowerCase) & " " & _
>   LenB(StrConv(StrConv(StrConv(strData, vbNarrow), vbLowerCase), vbFromUnicode)) & _
>    "Byte"
>End Sub
>
>>>それにしても、会計専用ソフトですか・・・
>>>私も市販の会計ソフトのデータをExcelへ展開するなどの作業はマクロで処理していますね。
>>かみちゃんさんと違いマクロ処理などできませんね・・・
>>出来るようになりたいですが少しずつここの掲示板を参考にしながら
>>徐々にやりたいと考えています
>
>私も同じようなことをしていますので、何かのお役に立てるのならば、今後ともよろしく
>お願いします。
>
>ところで、後問題として残っているのは、

>1.ListBoxに一旦全体のデータを反映させるのか?
これは前にも申し上げたように一応表示させたいです。

>2.検索条件に一致したもののListBoxはComboBoxにではいけませんか?
お勧めでやってみます

>3.全角半角、大文字小文字統一処理は可能か?
上のコードのSub Sample1()実行してみましたが
いまいち使い方が解りませんsample1を実行すると
MsgBoxが表示され元データ 6byte等表示されますが
エクセル上で(テキスト.txt登録前)に変換させるプログラムですか?

>4.2.で反映されたListBox(またはComboBox)からセルへの転記は、CommandButtonをClickしたとき?
ハイそうです。

>というところでしょうか?

かみちゃんさん下記のエクセルからの読込ですが
今現在読みこんでくるのは
操作を行ったsheetのA1からのデータなんですが
コード.xlsを読んでいない
下記間違ってます
Private Sub UserForm_Initialize()
 Dim ws As Worksheet

 Set ws = Workbooks("コード.xls").Sheets("Sheet1")
 With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
  Me.ListBox1.ColumnCount = .Columns.Count
  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
  Me.ListBox1.RowSource = .Address
 End With
End Sub
希望こんな感じです。よろしくお願いします。
紹介いただいたダイアログ今テスト中です。

【46085】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 18:06 -

引用なし
パスワード
   かみちゃんさん
返事遅くなりました ダイアログの件ですが
ダイアログは開いたのですが既にbookが開いている状態では
開く必要ありませんので

UserForm2.Show vbModelessをショーしたいのですが

どう書けばよいですか 下記コードです。

Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
  If 1 < Target.Count Then Exit Sub
    On Error Resume Next
 If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
    Cancel = True
   
  Dim OpenFileName As String
  OpenFileName = Application.GetOpenFilename _
          ("Microsoft Excelブック,*.xls")
  If OpenFileName <> "False" Then
    Workbooks.Open OpenFileName
    Windows("帳票2007.xls").Activate
  End If

  UserForm2.Show vbModeless
 Else
  UserForm2.Hide
 End If
>以下のような感じにすればいいかと思います。
>コード.xlsは開いてあるものとし、Sheet1というシートを対象にするものとしま
>す。
ひとつお聞きしたいのは他のbookの場合開いていないとそのbookの
データは読み込めないのですか。

【46086】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 18:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ところで、後問題として残っているのは、

>>1.ListBoxに一旦全体のデータを反映させるのか?
>これは前にも申し上げたように一応表示させたいです。

やっぱりわかりません。一応というくらいの簡単なコードではないですよ。
無意味(と思われる)コントロールを、UserForm上に配置するのは、スペース
の無駄使いと思うのですが?
私は、表示させる必要はないと思いますし、すでにできていますよね?

それとは、別にTextBox1に検索値を入力し、CommandButtonをClickすると、
ListBox1からではなく、再度、テキスト.txtからListBox2(ComboBoxでも可)
に条件に部分一致するデータだけをAddする形ではいけませんか?

>>2.検索条件に一致したもののListBoxはComboBoxにではいけませんか?
>お勧めでやってみます

決して、押し付けているわけではありませんので、念のため。
私なら、UserForm上での配置スペース、コードの記述の簡単さから、操作上の
制約がない(複数選択はしない)こちから、総合的に判断してComboBoxでいい
のでは?と申し上げています。

>>3.全角半角、大文字小文字統一処理は可能か?
>上のコードのSub Sample1()実行してみましたが
>いまいち使い方が解りませんsample1を実行すると
>MsgBoxが表示され元データ 6byte等表示されますが
>エクセル上で(テキスト.txt登録前)に変換させるプログラムですか?

そうなのですが、いろいろな変換パターンを記述しました。
MsgBox上で等幅フォントでない場合は、表示がわかりづらいかもしれません。
全角・半角、大文字・小文字を検索する場合(今回は、Findメソッド等は使え
ません)何かに統一しないといけないのです。
まず、それをきちんと理解してください。だから、後回しと申し上げました。

>>4.2.で反映されたListBox(またはComboBox)からセルへの転記は、CommandButtonをClickしたとき?
> ハイそうです。

ComboBox1とCommandButton1をUserForm上に配置して、UserFormモジュールに
以下のコードを記述して動作確認してみてください。
ComboBoxから選択して、CommandButtonをClickすると、MsgBoxで選択された
値が表示されると思います。

Private Sub UserForm_Initialize()
 Me.ComboBox1.AddItem "AAA"
 Me.ComboBox1.AddItem "BBB"
End Sub

Private Sub CommandButton1_Click()
 MsgBox Me.ComboBox1.Value
End Sub

>操作を行ったsheetのA1からのデータなんですが
>コード.xlsを読んでいない
>下記間違ってます

すみません。私、間違っていました。
以下のように★の行を追加してください。

Private Sub UserForm_Initialize()
 Dim ws As Worksheet

 Set ws = Workbooks("コード.xls").Sheets("Sheet1")
 With Range("A1", Cells(Rows.Count, 3).End(xlUp))
  Me.ListBox1.ColumnCount = .Columns.Count
  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
  ws.Activate '★
  Me.ListBox1.RowSource = .Address
  ThisWorkbook.Activate '★
 End With
End Sub

【46087】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 18:12 -

引用なし
パスワード
   こんにちは。かみちゃん です。

とりあえず、先にこちらだけコメントさせていただきます。

> 他のbookの場合開いていないとそのbookのデータは読み込めないのですか。

基本的には、読めないと考えてください。
GetObject関数などで、できないことはないのですが、裏技みたいなことはで
きるのですが、まずは基本をしっかり知っていただくことが必要ではないかと
思います。
なお、画面遷移を制御することにより、開いているのを見せないようにするこ
とは可能です。

【46088】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 18:23 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>とりあえず、先にこちらだけコメントさせていただきます。
>
>> 他のbookの場合開いていないとそのbookのデータは読み込めないのですか。
>
>基本的には、読めないと考えてください。
>GetObject関数などで、できないことはないのですが、裏技みたいなことはで
>きるのですが、まずは基本をしっかり知っていただくことが必要ではないかと
>思います。
>なお、画面遷移を制御することにより、開いているのを見せないようにするこ
>とは可能です。
↑これいいですね 教授ください。見えないということは
閉じるときどうするんでしょ・・・

【46090】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 18:45 -

引用なし
パスワード
   ▼かみちゃん さん:


>>>1.ListBoxに一旦全体のデータを反映させるのか?
>>これは前にも申し上げたように一応表示させたいです。
>
>やっぱりわかりません。一応というくらいの簡単なコードではないですよ。
>無意味(と思われる)コントロールを、UserForm上に配置するのは、スペース
>の無駄使いと思うのですが?
>私は、表示させる必要はないと思いますし、すでにできていますよね?

ハイ今現在はテキスト.txtは読み込み出来てます。

>
>それとは、別にTextBox1に検索値を入力し、CommandButtonをClickすると、
>ListBox1からではなく、再度、テキスト.txtからListBox2(ComboBoxでも可)
>に条件に部分一致するデータだけをAddする形ではいけませんか?
上記でいいと思います 現にこれで出来ています。
ただ違うのはかみちゃんさんの言うListBox1に読込をしているところだけです
ListBox1にテキスト.txtを読まない場合はコードがかわるのですか。

>
>>>2.検索条件に一致したもののListBoxはComboBoxにではいけませんか?
>>お勧めでやってみます
>
>決して、押し付けているわけではありませんので、念のため。
>私なら、UserForm上での配置スペース、コードの記述の簡単さから、操作上の
>制約がない(複数選択はしない)こちから、総合的に判断してComboBoxでいい
>のでは?と申し上げています。
>
>>>3.全角半角、大文字小文字統一処理は可能か?
>>上のコードのSub Sample1()実行してみましたが
>>いまいち使い方が解りませんsample1を実行すると
>>MsgBoxが表示され元データ 6byte等表示されますが
>>エクセル上で(テキスト.txt登録前)に変換させるプログラムですか?
>
>そうなのですが、いろいろな変換パターンを記述しました。
>MsgBox上で等幅フォントでない場合は、表示がわかりづらいかもしれません。
>全角・半角、大文字・小文字を検索する場合(今回は、Findメソッド等は使え
>ません)何かに統一しないといけないのです。
>まず、それをきちんと理解してください。だから、後回しと申し上げました。
Findが使えないのでLikeなんですね
わかりました今回は元データの半角カタカナを全角に変更して
利用することのします。
>
>>>4.2.で反映されたListBox(またはComboBox)からセルへの転記は、CommandButtonをClickしたとき?
>> ハイそうです。
>
>ComboBox1とCommandButton1をUserForm上に配置して、UserFormモジュールに
>以下のコードを記述して動作確認してみてください。
>ComboBoxから選択して、CommandButtonをClickすると、MsgBoxで選択された
>値が表示されると思います。
>
>Private Sub UserForm_Initialize()
> Me.ComboBox1.AddItem "AAA"
> Me.ComboBox1.AddItem "BBB"
>End Sub
>
>Private Sub CommandButton1_Click()
> MsgBox Me.ComboBox1.Value
>End Sub
ハイ MsgBoxに表示できました
要領は理解しました。
>
>>操作を行ったsheetのA1からのデータなんですが
>>コード.xlsを読んでいない
>>下記間違ってます
>
>すみません。私、間違っていました。
>以下のように★の行を追加してください。
>
>Private Sub UserForm_Initialize()
> Dim ws As Worksheet
>
> Set ws = Workbooks("コード.xls").Sheets("Sheet1")
> With Range("A1", Cells(Rows.Count, 3).End(xlUp))
>  Me.ListBox1.ColumnCount = .Columns.Count
>  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
>  ws.Activate '★
>  Me.ListBox1.RowSource = .Address
>  ThisWorkbook.Activate '★
> End With
>End Sub
上記確認しましたOKでーす。
下記是非お願いします。
いくつも難題ですみません
返事遅くなりました ダイアログの件ですが
ダイアログは開いたのですが既にbookが開いている状態では
開く必要ありませんので

UserForm2.Show vbModelessをショーしたいのですが

どう書けばよいですか 下記コードです。

Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
  If 1 < Target.Count Then Exit Sub
    On Error Resume Next
 If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
    Cancel = True
   
  Dim OpenFileName As String
  OpenFileName = Application.GetOpenFilename _
          ("Microsoft Excelブック,*.xls")
  If OpenFileName <> "False" Then
    Workbooks.Open OpenFileName
    Windows("帳票2007.xls").Activate
  End If

  UserForm2.Show vbModeless
 Else
  UserForm2.Hide
 End If

【46092】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 20:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

まとめて、こちらにコメントさせていただきます。

>>> 他のbookの場合開いていないとそのbookのデータは読み込めないのですか。
>>
>>基本的には、読めないと考えてください。
>>GetObject関数などで、できないことはないのですが、裏技みたいなことはで
>>きるのですが、まずは基本をしっかり知っていただくことが必要ではないかと
>>思います。
>>なお、画面遷移を制御することにより、開いているのを見せないようにするこ
>>とは可能です。
>↑これいいですね 教授ください。見えないということは
>閉じるときどうするんでしょ・・・

画面遷移を制御することにより、開いているのを見えないようにするだけです
ので、実際には、開いています。
開いているので閉じることもできます。
以下のコードを試してみてください。

Sub Sample3()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 
 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  '画面遷移を抑止する
  Application.ScreenUpdating = False
  Set WB2 = Workbooks.Open(strFileName)
  WB1.Activate
  '画面遷移を再開する
  Application.ScreenUpdating = True
 End If
 MsgBox "現在開いているファイルは" & vbCrLf & _
     WB1.FullName & vbCrLf & _
     WB2.FullName
 WB2.Close '指定したファイルを閉じる
End Sub

>ただ違うのはかみちゃんさんの言うListBox1に読込をしているところだけです
>ListBox1にテキスト.txtを読まない場合はコードがかわるのですか。

私の言うListBox1とは何でしょうか?
私は、ずっとListBox1を使う必要はないと申し上げてきています。
テキスト.txt全体を反映させるListBox1の存在の必要性もわかりませんし、
TestBox1に入力した検索値を条件として部分一致した値を反映させた、
ListBox2については、複数選択することはないということですので、
ComboBoxをお勧めしています。
そして、ComboBoxに値をAddする方法は、[46086]で提示しています。
これをテキスト.txtから条件の部分一致を反映させるのであれば、
If strREC Like "*" & Me.TextBox1.Value & "*" Then
 Me.ComboBox1.AddItem strREC
End If
でできます。
全角・半角、大文字・小文字を統一させるなら、このIf文で
StrConv関数で変換させて比較すればいいのです。

>わかりました今回は元データの半角カタカナを全角に変更して
>利用することのします。

その必要はないのですが・・・
統一処理をするプログラム(StrConv関数で変換して比較する方法)を理解
すればいいと思います。
それがわからないなら、全角・半角、大文字・小文字を区別して検索条件を
指定するか、元データを修正するしかありません。
元データを修正することは、私も好ましくないと考えていますから、条件
指定を区別したらいかがですか?とコメントさせていただきました。

>ダイアログは開いたのですが既にbookが開いている状態では
>開く必要ありませんので

ファイルを開くときにすでに開いているブックをチェックして、開いていない
場合のみ、開く方法は、以下のような感じでできます。

Sub Sample4()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 
 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  Application.ScreenUpdating = False
  'すでに開いているかどうかをチェックする
  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
   MsgBox strFileName & vbCrLf & "を開きます"
   Set WB2 = Workbooks.Open(strFileName)
  Else
   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
  End If
  WB1.Activate
  Application.ScreenUpdating = True
 End If
 MsgBox "現在開いているファイルは" & vbCrLf & _
     WB1.FullName & vbCrLf & _
     WB2.FullName
End Sub

Function ChkWorkbook(strWorkbookName As String) As Boolean
 Dim wb As Workbook
 
 ChkWorkbook = False
 For Each wb In Workbooks
  If wb.Name = strWorkbookName Then
   ChkWorkbook = True
   Exit For
  End If
 Next
End Function

【46098】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 21:48 -

引用なし
パスワード
   ▼かみちゃん さん:

>まとめて、こちらにコメントさせていただきます。

>>>> 他のbookの場合開いていないとそのbookのデータは読み込めないのですか。
>>>
>>>基本的には、読めないと考えてください。
>>>GetObject関数などで、できないことはないのですが、裏技みたいなことはで
>>>きるのですが、まずは基本をしっかり知っていただくことが必要ではないかと
>>>思います。
>>>なお、画面遷移を制御することにより、開いているのを見せないようにするこ
>>>とは可能です。
>>↑これいいですね 教授ください。見えないということは
>>閉じるときどうするんでしょ・・・
>
>画面遷移を制御することにより、開いているのを見えないようにするだけです
>ので、実際には、開いています。
>開いているので閉じることもできます。
>以下のコードを試してみてください。
>
>Sub Sample3()
> Dim WB1 As Workbook
> Dim WB2 As Workbook
> Dim strFileName As String
> 
> Set WB1 = ThisWorkbook
> strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
> If strFileName <> "False" Then
>  '画面遷移を抑止する
>  Application.ScreenUpdating = False
>  Set WB2 = Workbooks.Open(strFileName)
>  WB1.Activate
>  '画面遷移を再開する
>  Application.ScreenUpdating = True
> End If
> MsgBox "現在開いているファイルは" & vbCrLf & _
>     WB1.FullName & vbCrLf & _
>     WB2.FullName
> WB2.Close '指定したファイルを閉じる
>End Sub

ありがとうございます。
これは今回特定のセルクリックと組み合わせない方が
よいのですね?
>
>>ただ違うのはかみちゃんさんの言うListBox1に読込をしているところだけです
>>ListBox1にテキスト.txtを読まない場合はコードがかわるのですか。
>
>私の言うListBox1とは何でしょうか?
>私は、ずっとListBox1を使う必要はないと申し上げてきています。
>テキスト.txt全体を反映させるListBox1の存在の必要性もわかりませんし、
>TestBox1に入力した検索値を条件として部分一致した値を反映させた、
>ListBox2については、複数選択することはないということですので、
>ComboBoxをお勧めしています。
>そして、ComboBoxに値をAddする方法は、[46086]で提示しています。
>これをテキスト.txtから条件の部分一致を反映させるのであれば、
>If strREC Like "*" & Me.TextBox1.Value & "*" Then
> Me.ComboBox1.AddItem strREC
>End If

説明がへたですね
上記のようにListBox1は表示する必要なしですね!了解
ComboBox1をユーザーフォームに配置しました。
クリックミスがなくなります。

>でできます。
>全角・半角、大文字・小文字を統一させるなら、このIf文で
>StrConv関数で変換させて比較すればいいのです。
>
>>わかりました今回は元データの半角カタカナを全角に変更して
>>利用することのします。
>
>その必要はないのですが・・・
>統一処理をするプログラム(StrConv関数で変換して比較する方法)を理解
>すればいいと思います。
この関数も難しそうで、今回の検索では組込難しいということですか?

>それがわからないなら、全角・半角、大文字・小文字を区別して検索条件を
>指定するか、元データを修正するしかありません。
>元データを修正することは、私も好ましくないと考えていますから、条件
>指定を区別したらいかがですか?とコメントさせていただきました。
>
>>ダイアログは開いたのですが既にbookが開いている状態では
>>開く必要ありませんので
>
>ファイルを開くときにすでに開いているブックをチェックして、開いていない
>場合のみ、開く方法は、以下のような感じでできます。
>
>Sub Sample4()
> Dim WB1 As Workbook
> Dim WB2 As Workbook
> Dim strFileName As String
> 
> Set WB1 = ThisWorkbook
> strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
> If strFileName <> "False" Then
>  Application.ScreenUpdating = False
>  'すでに開いているかどうかをチェックする
>  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
>   MsgBox strFileName & vbCrLf & "を開きます"
>   Set WB2 = Workbooks.Open(strFileName)
>  Else
>   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
>  End If
>  WB1.Activate
>  Application.ScreenUpdating = True
> End If
> MsgBox "現在開いているファイルは" & vbCrLf & _
>     WB1.FullName & vbCrLf & _
>     WB2.FullName
>End Sub
>
>Function ChkWorkbook(strWorkbookName As String) As Boolean
> Dim wb As Workbook
> 
> ChkWorkbook = False
> For Each wb In Workbooks
>  If wb.Name = strWorkbookName Then
>   ChkWorkbook = True
>   Exit For
>  End If
> Next
>End Function
了解です。
用は特定セルクリックでなく単独の起動をしたほうがbestとですね。

【46099】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 22:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>これは今回特定のセルクリックと組み合わせない方が
>よいのですね?

そのようなことは一言も申し上げていません。
特定のセルのクリックではなく、ダブルクリックかと思いますが、組み合わ
せていただいても構いません。
[46064]のyasuさんの「こういうケースが出てきそうなので」という要件に
対応しているものです。
したがって、まったく関係ないと思います。

>ComboBox1をユーザーフォームに配置しました。
>クリックミスがなくなります。

仕様を決めるのは、yasuさんなので、他人の私がごちゃごちゃ言って申し訳
ありません。

>>統一処理をするプログラム(StrConv関数で変換して比較する方法)を理解
>>すればいいと思います。
>この関数も難しそうで、今回の検索では組込難しいということですか?

ですから、申し上げたとおりなのです。
StrConv関数で変換して統一したもの同士を比較することが難しいと感じる
ならば、運用で気をつけるしかありません。
決して、組込が難しいわけではないですので、このような感じになりますよ
という意味で[46066]でSample1を提示させていただきました。

>要は特定セルクリックでなく単独の起動をしたほうがbestですね。

そのようなことも、一言も申し上げていません。
なぜそのようにお感じになったのでしょうか?

あと、スレッドが長くなっていて、たしかに要点がまとまっていないのかも
しれませんが、いろいろなSampleコードは提示させていただいたつもりです。
本当にこのコードでできる!というものを提示すればいいのですが、yasuさん
ご自身のためにもなりませんし、ほとんどできていると見えます。
それで今できていないことは、何なのでしょうか?

それと、引用は必要最低限なものにしましょう。
スレッドを見ればわかることですし。
私も人のことは言えませんが(^^;

【46100】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/22(月) 22:44 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>これは今回特定のセルクリックと組み合わせない方が
>>よいのですね?
かみちゃんありがとうございます。いえ私も[46090]で
セルから起動させることは出来ないかなと思いかみちゃんさんに
お願いしたところ別々の起動サンプルが出されたものですから
別々起動がいいのかなと思いました ただダブルクリックで
起動させた場合起動しているとすればその都度MsgBoxで表示させても
うざいかなと思ったものでそういうお考えなのかなと考えました。
それができるのであれば(ダブルクリック起動)でMsgBoxなし
ただし初回は表示されたほうがいいかも 起動済みであれば

すぐにUserForm2.Show vbModelessをショーしたいのですが・・・

>
>そのようなことは一言も申し上げていません。
>特定のセルのクリックではなく、ダブルクリックかと思いますが、組み合わ
>せていただいても構いません。
>[46064]のyasuさんの「こういうケースが出てきそうなので」という要件に
>対応しているものです。
>したがって、まったく関係ないと思います。

>仕様を決めるのは、yasuさんなので、他人の私がごちゃごちゃ言って申し訳
>ありません。
これについてはかみちゃんさんの意見に賛成できます。
bookの容量も少なくて済みますしね

>ですから、申し上げたとおりなのです。
>StrConv関数で変換して統一したもの同士を比較することが難しいと感じる
>ならば、運用で気をつけるしかありません。
ハイ了解
>決して、組込が難しいわけではないですので、このような感じになりますよ
>という意味で[46066]でSample1を提示させていただきました。
>
>>要は特定セルクリックでなく単独の起動をしたほうがbestですね。
>
>そのようなことも、一言も申し上げていません。
>なぜそのようにお感じになったのでしょうか?
>

>それと、引用は必要最低限なものにしましょう。
>スレッドを見ればわかることですし。
>私も人のことは言えませんが(^^;
ハイ話がつながらなくてはいけないと思いつい消さずに起きました。
出来ればダブルクリックでbookを開きたいでsuね

【46101】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/22(月) 22:55 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>別々の起動サンプルが出されたものですから
>別々起動がいいのかなと思いました ただダブルクリックで
>起動させた場合起動しているとすればその都度MsgBoxで表示させても
>うざいかなと思ったものでそういうお考えなのかなと考えました。

それは、違います。
まず、yasuさんご自身がコードを提示されていますし、いきなり、仕様どおり
動くコードを提示しても、yasuさんご自身のためにならないと思いましたので
それぞれのご質問用にあくまでSampleを提示させていただいています。

まさか、動くコードを作って提示してくださいというわけではないですよね?

MsgBoxがうっとしいと感じるのならば、消せばいいだけです。
それこそ、あくまで確認用で、確認さえだきれば必要ではありません。

>それができるのであれば(ダブルクリック起動)でMsgBoxなし
>ただし初回は表示されたほうがいいかも 起動済みであれば
>すぐにUserForm2.Show vbModelessをショーしたいのですが・・・

[46092]のSampleコードは二重オープンを防ぐコードですので、そのコードを
[46085]のコードのオープン部分に組み込めばできるようにしてあるつもりです
が、どのようにしたらいいかわかりませんか?

>出来ればダブルクリックでbookを開きたいでsuね

あと一歩でできるのですが・・・
修正点などの要点はすべて提示しています。
あとは、どう組み込めばいいのかだと思います。

あと一息がんばりましょう♪

【46106】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 2:51 -

引用なし
パスワード
   ▼かみちゃん さん:
いろいろお気遣いありがとうございます。
まず下記コードでListBox1の表示が42行目までしか表示しないのですが

Private Sub UserForm_Initialize()
 Dim ws As Worksheet

 Set ws = Workbooks("コード.xls").Sheets("Sheet1")
 With Range("A1", Cells(Rows.Count, 3).End(xlUp))
  Me.ListBox1.ColumnCount = .Columns.Count '★この辺だと思い
                        いろいろ試しましたが
                        結果は変わりませんでした 
  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
  ws.Activate '★
  Me.ListBox1.RowSource = .Address
  ThisWorkbook.Activate '★
 End With
End Sub
>>別々の起動サンプルが出されたものですから
>>別々起動がいいのかなと思いました ただダブルクリックで
>>起動させた場合起動しているとすればその都度MsgBoxで表示させても
>>うざいかなと思ったものでそういうお考えなのかなと考えました。
>
>それは、違います。
>まず、yasuさんご自身がコードを提示されていますし、いきなり、仕様どおり
>動くコードを提示しても、yasuさんご自身のためにならないと思いましたので
>それぞれのご質問用にあくまでSampleを提示させていただいています。
>
>まさか、動くコードを作って提示してくださいというわけではないですよね?

試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。
ダメだったダメコード貼り付けておきます。

Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
Dim MyDate As Date
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String

 If 1 < Target.Count Then Exit Sub
    On Error Resume Next
 If Not Intersect(Target, Range("S8:S107")) Is Nothing Then
    Cancel = True
  UserForm1.Show vbModeless
 Else
  UserForm1.Hide
 End If
 
 If 1 < Target.Count Then Exit Sub
    On Error Resume Next
 If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
    Cancel = True

 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  '画面遷移を抑止する
  Application.ScreenUpdating = False
  Set WB2 = Workbooks.Open(strFileName)
  WB1.Activate
  '画面遷移を再開する
  Application.ScreenUpdating = True
 End If
 MsgBox "現在開いているファイルは" & vbCrLf & _
     WB1.FullName & vbCrLf & _
     WB2.FullName
 WB2.Close '指定したファイルを閉じる
 End If


  UserForm3.Show vbModeless
 Else
  UserForm3.Hide
 End If

ダイアログがでて"コード.xls"迄いきましたが
UserForm3はショーしません。

それから今回は以前のテキスト.txtから
コード.xlsに変えたのですがこれを表示させるために

UserForm3を前回同様に
ListBox1 ★これが42行目までしか表示しない
これは上のプロシージャ起動でなく単独で
Sub UserForm()
  UserForm3.Show
End Sub
立ち上げで気がつきました。
次にテキストボックス1を1つ(検索値入力用)
同じく検索用コマンドボタン1つ(検索実行用)
同じくコンボボックス1を1つ(選択決定)→終了
作りました。

よく考えたら下記のPrivate Sub CommandButton1_Click()にあたる
コードが無くては検索できないなと思いました。単純に
コード.txt→コード.xlsに変えるだけではダメですよね!


Private Sub ComboBox1_Change()
  ActiveCell.Value = Left(ComboBox1.Value, 6)
  Unload Me
End Sub

Private Sub CommandButton1_Click()
  Dim FName As String
  FName = ThisWorkbook.Path + "C:\コード.txt"
  Const cnsFILENAME = "C:\コード.txt"
  Dim intFF As Integer
  Dim strREC As String
  Dim GYO As Long

  intFF = FreeFile
  Open cnsFILENAME For Input As #intFF
  GYO = 1
  Do Until EOF(intFF)
    Line Input #intFF, strREC
    If strREC Like "*" & Me.TextBox1.Value & "*" Then
      UserForm2.ComboBox1.AddItem strREC
    End If
  Loop
End Sub

Private Sub CommandButton2_Click()
  UserForm2.ComboBox1.Clear
End Sub


>MsgBoxがうっとしいと感じるのならば、消せばいいだけです。
>それこそ、あくまで確認用で、確認さえだきれば必要ではありません。
これも断念そこまでたどり着いていません

>>それができるのであれば(ダブルクリック起動)でMsgBoxなし
>>ただし初回は表示されたほうがいいかも 起動済みであれば
>>すぐにUserForm2.Show vbModelessをショーしたいのですが・・・
>
>[46092]のSampleコードは二重オープンを防ぐコードですので、そのコードを
>[46085]のコードのオープン部分に組み込めばできるようにしてあるつもりです
>が、どのようにしたらいいかわかりませんか?

かみちゃんさんごめんなさい断念!
>>出来ればダブルクリックでbookを開きたいでsuね
>
>あと一歩でできるのですが・・・
>修正点などの要点はすべて提示しています。
>あとは、どう組み込めばいいのかだと思います。
>
>あと一息がんばりましょう♪
私ももう少しと思っておりましたが
やはり基本がよく解らないので・・・(-_-;)
なんとか面倒見てくれませんか。
よろしくお願いします。

【46107】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 3:03 -

引用なし
パスワード
   かみちゃんさん 報告ですが 下のコードの件
コード.xls上で

Sub UserForm()
  UserForm3.Show
End Sub
これを実行すると最終行まで読み込みます
不思議です?


------------------------------------------------------------------------
まず下記コードでListBox1の表示が42行目までしか表示しないのですが
Private Sub UserForm_Initialize()
 Dim ws As Worksheet

 Set ws = Workbooks("コード.xls").Sheets("Sheet1")
 With Range("A1", Cells(Rows.Count, 3).End(xlUp))
  Me.ListBox1.ColumnCount = .Columns.Count '★この辺だと思い
                        いろいろ試しましたが
                        結果は変わりませんでした 
  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
  ws.Activate '★
  Me.ListBox1.RowSource = .Address
  ThisWorkbook.Activate '★
 End With
End Sub
-------------------------------------------------------------------------

【46109】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/23(火) 7:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>下記コードでListBox1の表示が42行目までしか表示しないのですが

コード.xlsのSheet1のC列が42行目までしか値が入っていないからではないでしょうか?
 Me.ListBox1.RowSource = .Address
 MsgBox ActiveSheet.Name & "のセル範囲は" & .Address
とすればどのようにMsgBoxが表示されますでしょうか?
あと、まさか、ListBoxの縦スクロールが出ていて、単純に42行目の値までし
か「見えていない」ということではないですよね?

>  Me.ListBox1.ColumnCount = .Columns.Count '★この辺だと思い

まったく関係ありません。
.Columns.Count
の意味をよく理解してください。行数ではなく、列数を取得しています。

>>まさか、動くコードを作って提示してくださいというわけではないですよね?
>
>試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。

であれば、もう、初めから作るしかないのでしょうか(T_T)
その割には、仕様がなんか変わっていません?
テキスト.txt → コード.xls?
UserForm3の登場?
わからないのはいいのですが、こちらも急に仕様を変えられてもわかりませ
んよ。
変えたなら、きちんと説明してください。
・なぜ、コード.xlsから読み込みをするのか?
・UserForm3とは何か?これでいくつUserFormを用意しているのか?
 それぞれのUserFormには、TextBoxなどコントロールがいくつ配置してい
 るのか?

>ダメだったダメコード貼り付けておきます。

コード全体が無茶苦茶なイメージがあります。
UserForm1

UserForm3
は何ですか?
あと、コードのインデントはきちんと整理したほうがコードが見やすくなる
のですが、そういうことはできませんか?

>次にテキストボックス1を1つ(検索値入力用)
>同じく検索用コマンドボタン1つ(検索実行用)
>同じくコンボボックス1を1つ(選択決定)→終了
>作りました。

これは、UserForm3の説明でしょうか?
UserForm2はどうするのですか?
UserForm1は、何をしているのですか?

>コード.txt→コード.xlsに変えるだけではダメですよね!

だめです。

>  FName = ThisWorkbook.Path + "C:\コード.txt"
>  Const cnsFILENAME = "C:\コード.txt"

そもそも、変数FNameは、何をしているのでしょうか?
フォルダ名 + "C:\"〜 とは?
あと、テキストファイルだから、
Open cnsFILENAME For Input As #intFF
ですが、
これがブックとなると、まったく異なるコードになります。

>>MsgBoxがうっとしいと感じるのならば、消せばいいだけです。
>>それこそ、あくまで確認用で、確認さえだきれば必要ではありません。
>これも断念そこまでたどり着いていません

断念は早すぎます。
そこまでたどり着いてから考えてください。
それまでは「ウザイ」と感じても仕方ないと思います。

>>あと一息がんばりましょう♪
>私ももう少しと思っておりましたが
>やはり基本がよく解らないので・・・(-_-;)
>なんとか面倒見てくれませんか。

かなり、焦りが見えます。
ただ、スレッドが長くなっても仕方ないので、そろそろ動くコードを提示す
る時期が来たのでしょうか。
そのためには、UserForm3とコード.xlsは聞かなかったことにします。
こちらですでにサンプルを作ってしまっているからです。

【46114】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 9:28 -

引用なし
パスワード
   ▼かみちゃん さん:

>>下記コードでListBox1の表示が42行目までしか表示しないのですが
>
>コード.xlsのSheet1のC列が42行目までしか値が入っていないからではないでしょうか?
> Me.ListBox1.RowSource = .Address
> MsgBox ActiveSheet.Name & "のセル範囲は" & .Address
>とすればどのようにMsgBoxが表示されますでしょうか?
>あと、まさか、ListBoxの縦スクロールが出ていて、単純に42行目の値までし
>か「見えていない」ということではないですよね?
sheetにより表示される行数が違います。
これは外部データのコード.xlsを呼び出しているからでしょうか
現在のbookにコード.xlsを取り込んだほうがいいのでしょうか?
コード.xls上でユーザーフォーム3を呼び出した場合は表示されるんですがね

>>試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。
>
>であれば、もう、初めから作るしかないのでしょうか(T_T)
>その割には、仕様がなんか変わっていません?
>テキスト.txt → コード.xls?
>UserForm3の登場?
>わからないのはいいのですが、こちらも急に仕様を変えられてもわかりませ
>んよ。
>変えたなら、きちんと説明してください。
>・なぜ、コード.xlsから読み込みをするのか?
>・UserForm3とは何か?これでいくつUserFormを用意しているのか?
> それぞれのUserFormには、TextBoxなどコントロールがいくつ配置してい
> るのか?

UserForm2はかみちゃんさんの言うとおり完成してます。
ちょっと前のスレで説明したように***.xlsをそのまま使うケースが
多いのでコード.txtをコード.xlsに変更したいのです。

のちのちいろいろな書類に対応できるからです。
このためUserForm3を作成しました。
UserForm3はUserForm2と配置はまるっきり同じ配置です。
ただかみちゃんさんのいうListBox1はいらないだろうと提案の
あるものも配置してありこれがユーザーフォームをショーする
sheetごとに表示される行数が変わるので上で変ですとお聞きしました。


>>ダメだったダメコード貼り付けておきます。
>
>コード全体が無茶苦茶なイメージがあります。
>UserForm1

UserForm1
これはあまり気にしないでください今回の質問には関係ありません

>と
>UserForm3
>は何ですか?
これが上記説明のユーザーフォームのことです
>あと、コードのインデントはきちんと整理したほうがコードが見やすくなる
>のですが、そういうことはできませんか?
はい努力します
>
>>次にテキストボックス1を1つ(検索値入力用)
>>同じく検索用コマンドボタン1つ(検索実行用)
>>同じくコンボボックス1を1つ(選択決定)→終了
>>作りました。
ユーザーフォーム2止まるっきり同様です
ただ思うのは今回は千数百行のデータですが
普段使うのはそんなに多くないので検索の必要は無くなると思います

>これは、UserForm3の説明でしょうか?
>UserForm2はどうするのですか?
このまま使います。

>UserForm1は、何をしているのですか?
今回関係ありません。
>
>>コード.txt→コード.xlsに変えるだけではダメですよね!
>
>だめです。
>
>>  FName = ThisWorkbook.Path + "C:\コード.txt"
>>  Const cnsFILENAME = "C:\コード.txt"
>
>そもそも、変数FNameは、何をしているのでしょうか?
>フォルダ名 + "C:\"〜 とは?
>あと、テキストファイルだから、
>Open cnsFILENAME For Input As #intFF
>ですが、
>これがブックとなると、まったく異なるコードになります。

これを教えてください。

>>>MsgBoxがうっとしいと感じるのならば、消せばいいだけです。
>>>それこそ、あくまで確認用で、確認さえだきれば必要ではありません。
>>これも断念そこまでたどり着いていません
>
>断念は早すぎます。
>そこまでたどり着いてから考えてください。
>それまでは「ウザイ」と感じても仕方ないと思います。
>
>>>あと一息がんばりましょう♪
>>私ももう少しと思っておりましたが
>>やはり基本がよく解らないので・・・(-_-;)
>>なんとか面倒見てくれませんか。
>
>かなり、焦りが見えます。
>ただ、スレッドが長くなっても仕方ないので、そろそろ動くコードを提示す
>る時期が来たのでしょうか。
>そのためには、UserForm3とコード.xlsは聞かなかったことにします。
>こちらですでにサンプルを作ってしまっているからです。
頭の思考回路がかみちゃんさんとちがい○×▲状態です???
よろしくお願いします。

【46117】Re:ユーザーフォームのリストを検索→転記
回答  かみちゃん E-MAIL  - 07/1/23(火) 11:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>下記コードでListBox1の表示が42行目までしか表示しないのですが
>
>sheetにより表示される行数が違います。
>これは外部データのコード.xlsを呼び出しているからでしょうか
>現在のbookにコード.xlsを取り込んだほうがいいのでしょうか?
>コード.xls上でユーザーフォーム3を呼び出した場合は表示されるんですがね

大変申し訳ありません。
[46086]で以下の修正コードを提示させていただいた際に、セル範囲の指定を
誤っています。

以下、[46086]の私の発言内容です。

>すみません。私、間違っていました。
>以下のように★の行を追加してください。
>
>Private Sub UserForm_Initialize()
> Dim ws As Worksheet
>
> Set ws = Workbooks("コード.xls").Sheets("Sheet1")
> With Range("A1", Cells(Rows.Count, 3).End(xlUp))
>  Me.ListBox1.ColumnCount = .Columns.Count
>  Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
>  ws.Activate '★
>  Me.ListBox1.RowSource = .Address
>  ThisWorkbook.Activate '★
> End With
>End Sub

最初に提示した[46067]では対応していたのですが、上記の
 With Range("A1", Cells(Rows.Count, 3).End(xlUp))

 With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
としていただく必要があります。

>>試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。
>
>であれば、もう、初めから作るしかないのでしょうか(T_T)

ということでお詫びの印に動くと思われるコードを提示させていただきます。
一応、要件とおりにはなっていると思いますが、UserForm3の要件がよくわかりません

'==================================================
'■Sheet5("発注")モジュール([46031]より)
'==================================================
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
 If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]
 On Error Resume Next
 If Not Intersect(Target, Range("S8:S107")) Is Nothing Then
  Cancel = True
  UserForm1.Show vbModeless
 Else
  UserForm1.Hide
 End If
 If 1 < Target.Count Then Exit Sub
 On Error Resume Next
 If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
  Cancel = True
  UserForm2.Show vbModeless
 Else
  UserForm2.Hide
 End If
End Sub

'==================================================
'■UserForm2モジュール
' (テキスト.txtから検索条件部分一致を選択肢とする)
' (部分一致は全角半角、大文字小文字を無視)
'==================================================

'UserForm初期化処理
Private Sub UserForm_Initialize()
' Dim FName As String
' FName = ThisWorkbook.Path + "C:\テキスト.txt"
' Const cnsFILENAME = "C:\テキスト.txt"
' Dim intFF As Integer
' Dim strREC As String
' Dim GYO As Long
'
' intFF = FreeFile
' Open cnsFILENAME For Input As #intFF
' GYO = 1
' Do Until EOF(intFF)
'  Line Input #intFF, strREC
'  UserForm2.ListBox1.AddItem strREC
' Loop
'
 Me.Left = 150
 Me.Top = 100
End Sub

'検索条件を入力後、部分一致するデータをComboBoxへ追加
Private Sub CommandButton1_Click()
' Dim FName As String
 Dim cnsFILENAME As String '★
 Dim intFF As Integer
 Dim strREC As String
 Dim GYO As Long
 
 'FName = ThisWorkbook.Path + "C:\テキスト.txt"
 'Const cnsFILENAME = "C:\テキスト.txt"
 cnsFILENAME = ThisWorkbook.Path + "\テキスト.txt" '★

 intFF = FreeFile
 Open cnsFILENAME For Input As #intFF
 GYO = 1
 Do Until EOF(intFF)
  Line Input #intFF, strREC
  'UserForm2.ListBox1.AddItem strREC
  If StrConv(StrConv(strREC, vbWide), vbUpperCase) _
   Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
   Me.ComboBox1.AddItem strREC '★
  End If
 Loop
End Sub

'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
 ActiveCell.Value = Me.ComboBox1.Value
 Unload Me
End Sub

'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
 Me.ComboBox1.Clear
End Sub

'==================================================
'■UserForm3モジュール
' (コード.xlsから指定範囲すべてを選択肢とする)
'==================================================

'UserForm初期化処理
Private Sub UserForm_Initialize()
 Me.Left = 150
 Me.Top = 100
End Sub

'コード.xlsのA1セル〜C列の最終列までをComboBoxへ追加
Private Sub CommandButton1_Click()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 Dim ws As Worksheet

 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  Application.ScreenUpdating = False
  'すでに開いているかどうかをチェックする
  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
   MsgBox strFileName & vbCrLf & "を開きます"
   Set WB2 = Workbooks.Open(strFileName)
  Else
   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
  End If
  WB1.Activate
  Set ws = WB2.Sheets("Sheet1")
  With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
   Me.ComboBox1.ColumnCount = .Columns.Count
   Me.ComboBox1.ColumnWidths = "20 pt;20 pt;20 pt"
   ws.Activate
   '指定範囲の全データをCimboBoxに反映
   '(検索条件の部分一致には対応していない)
   Me.ComboBox1.RowSource = .Address
   WB1.Activate
  End With
  Application.ScreenUpdating = True
 Else
  MsgBox "コード.xlsのファイル選択を中止しました"
 End If
End Sub

'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
 ActiveCell.Value = Me.ComboBox1.Value
 Unload Me
End Sub

'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
 Me.ComboBox1.Clear
End Sub

'ブックオープン済みチェック関数
Function ChkWorkbook(strWorkbookName As String) As Boolean
 Dim wb As Workbook

 ChkWorkbook = False
 For Each wb In Workbooks
  If wb.Name = strWorkbookName Then
   ChkWorkbook = True
   Exit For
  End If
 Next
End Function

【46120】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 14:09 -

引用なし
パスワード
   ▼かみちゃん さん:
>
>大変申し訳ありません。
>[46086]で以下の修正コードを提示させていただいた際に、セル範囲の指定を
>誤っています。
>
>以下、[46086]の私の発言内容です。
>
>最初に提示した[46067]では対応していたのですが、上記の
> With Range("A1", Cells(Rows.Count, 3).End(xlUp))
>を
> With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
>としていただく必要があります。

そーだったんですかws.だけでね・・・・・
少しのミスでも簡単に動いてくれないもんなんですね
私のやり方が悪いと思いいろんなところいじっちゃいました。
ひとついいですかコード.xlsのデータは1394行でフォームに表示されるのは
3つまえ1391行までしか表示しないのですが誤差???

>>>試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。

>
>ということでお詫びの印に動くと思われるコードを提示させていただきます。
>一応、要件とおりにはなっていると思いますが、UserForm3の要件がよくわかりま
>せん
お詫びなんてとんでもないです。
私の理解が足らないばかりで時間をとらせてしまいこちらこそ
ありがとうございます。
>
>'==================================================
>'■Sheet5("発注")モジュール([46031]より)
>'==================================================
>Private Sub Worksheet_BeforeDoubleClick _
>(ByVal Target As Range, Cancel As Boolean)
> If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]
> On Error Resume Next
> If Not Intersect(Target, Range("S8:S107")) Is Nothing Then
>  Cancel = True
>  UserForm1.Show vbModeless
> Else
>  UserForm1.Hide
> End If
> If 1 < Target.Count Then Exit Sub
> On Error Resume Next
> If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
>  Cancel = True
>  UserForm2.Show vbModeless
> Else
>  UserForm2.Hide
> End If
>End Sub

おぉ〜これはgood・goodです。


>'==================================================
>'■UserForm2モジュール
>' (テキスト.txtから検索条件部分一致を選択肢とする)
>' (部分一致は全角半角、大文字小文字を無視)
>'==================================================
>
>'UserForm初期化処理
>Private Sub UserForm_Initialize()
>' Dim FName As String
>' FName = ThisWorkbook.Path + "C:\テキスト.txt"
>' Const cnsFILENAME = "C:\テキスト.txt"
>' Dim intFF As Integer
>' Dim strREC As String
>' Dim GYO As Long
>'
>' intFF = FreeFile
>' Open cnsFILENAME For Input As #intFF
>' GYO = 1
>' Do Until EOF(intFF)
>'  Line Input #intFF, strREC
>'  UserForm2.ListBox1.AddItem strREC
>' Loop
>'
> Me.Left = 150
> Me.Top = 100
>End Sub
>
>'検索条件を入力後、部分一致するデータをComboBoxへ追加
>Private Sub CommandButton1_Click()
>' Dim FName As String
> Dim cnsFILENAME As String '★
> Dim intFF As Integer
> Dim strREC As String
> Dim GYO As Long
> 
> 'FName = ThisWorkbook.Path + "C:\テキスト.txt"
> 'Const cnsFILENAME = "C:\テキスト.txt"
> cnsFILENAME = ThisWorkbook.Path + "\テキスト.txt" '★
>
> intFF = FreeFile
> Open cnsFILENAME For Input As #intFF
> GYO = 1
> Do Until EOF(intFF)
>  Line Input #intFF, strREC
>  'UserForm2.ListBox1.AddItem strREC
>  If StrConv(StrConv(strREC, vbWide), vbUpperCase) _
>   Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
>   Me.ComboBox1.AddItem strREC '★
>  End If
> Loop
>End Sub
>
>'ComboBoxの選択値をアクティブセルへ転記
>Private Sub CommandButton2_Click()
> ActiveCell.Value = Me.ComboBox1.Value
> Unload Me
>End Sub
>
>'ComboBoxの選択肢を消去
>Private Sub CommandButton3_Click()
> Me.ComboBox1.Clear
>End Sub

思い通りです。完!


★下記3は、2同様検索機能をつけてもらえませんか
テキストボックスは配置済みです。
>'==================================================
>'■UserForm3モジュール
>' (コード.xlsから指定範囲すべてを選択肢とする)
>'==================================================
>
>'UserForm初期化処理
>Private Sub UserForm_Initialize()
> Me.Left = 150
> Me.Top = 100
>End Sub
>
>'コード.xlsのA1セル〜C列の最終列までをComboBoxへ追加
>Private Sub CommandButton1_Click()
> Dim WB1 As Workbook
> Dim WB2 As Workbook
> Dim strFileName As String
> Dim ws As Worksheet
>
> Set WB1 = ThisWorkbook
> strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
> If strFileName <> "False" Then
>  Application.ScreenUpdating = False
>  'すでに開いているかどうかをチェックする
>  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
>   MsgBox strFileName & vbCrLf & "を開きます"
>   Set WB2 = Workbooks.Open(strFileName)
>  Else
>   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
>  End If
>  WB1.Activate
>  Set ws = WB2.Sheets("Sheet1")
>  With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
>   Me.ComboBox1.ColumnCount = .Columns.Count
>   Me.ComboBox1.ColumnWidths = "20 pt;20 pt;20 pt"
>   ws.Activate
>   '指定範囲の全データをCimboBoxに反映
>   '(検索条件の部分一致には対応していない)
>   Me.ComboBox1.RowSource = .Address
>   WB1.Activate
>  End With
>  Application.ScreenUpdating = True
> Else
>  MsgBox "コード.xlsのファイル選択を中止しました"
> End If
>End Sub
>
>'ComboBoxの選択値をアクティブセルへ転記
>Private Sub CommandButton2_Click()
> ActiveCell.Value = Me.ComboBox1.Value
> Unload Me
>End Sub
>
>'ComboBoxの選択肢を消去
>Private Sub CommandButton3_Click()
> Me.ComboBox1.Clear
>End Sub
>
>'ブックオープン済みチェック関数
>Function ChkWorkbook(strWorkbookName As String) As Boolean
> Dim wb As Workbook
>
> ChkWorkbook = False
> For Each wb In Workbooks
>  If wb.Name = strWorkbookName Then
>   ChkWorkbook = True
>   Exit For
>  End If
> Next
>End Function

【46121】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/23(火) 14:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>コード.xlsのデータは1394行でフォームに表示されるのは
>3つまえ1391行までしか表示しないのですが誤差???

誤差ではないと思います。
[46109]でも申し上げていますが、
 Me.ListBox1.RowSource = .Address
 MsgBox ActiveSheet.Name & "のセル範囲は" & .Address
とすればどのようにMsgBoxが表示されますでしょうか?

> 下記3は、2同様検索機能をつけてもらえませんか

それでは、要件を提示していただけませんか?
[46064]で
>これを"コード.xls"のA1からC列最終まで表示させるには、
>どんなコードにすればいいですか?
とだけの提示では、どの列の値が検索条件と部分一致していればいいのかが
まったくわかりません。

また、セル範囲全体であれば、ComboBoxのRowSourceプロパティに設定すれば
いいですが、そのうちの検索条件の部分一致するセルの値だけをComboBoxの
選択肢とするならば、RowSourceプロパティではなく、テキスト.txtと同様
ループ処理によるAddItmeを使う必要があることが理解できますか?

そういう複雑なことまでしたい処理なのでしょうか?
そもそも、テキスト.txtからコード.xlsに変更する時点で何のためにかが
不思議で仕方ないのですが・・・
Excelシート上に展開した時点で、書き換えがよりしやすいデータになって
しまうことは、承知の上ですよね?
(テキストだと書き換えられないというわけではないのですが・・・)

【46122】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 15:09 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>コード.xlsのデータは1394行でフォームに表示されるのは
>>3つまえ1391行までしか表示しないのですが誤差???
>
>誤差ではないと思います。
>[46109]でも申し上げていますが、
> Me.ListBox1.RowSource = .Address
> MsgBox ActiveSheet.Name & "のセル範囲は" & .Address
>とすればどのようにMsgBoxが表示されますでしょうか?

はいMsgBoxに表示されました。
sheet1セルの範囲は$A$1:$C$1391です。
実際には、データは1394まで埋められているのですが
かみちゃん原因解りましたC1392:C1394空きでした
C1394に文字入力したところ表示されました。
なにも入ってないところが途中結構あります。特にC列は・・・


>> 下記3は、2同様検索機能をつけてもらえませんか
>
>それでは、要件を提示していただけませんか?
>[46064]で

>とだけの提示では、どの列の値が検索条件と部分一致していればいいのかが
>まったくわかりません。
はいわかりました。B列の値が検索条件ですここに会社名が書かれてます
ちなみにC列は○○支店とか
A列はコード番号です

>
>また、セル範囲全体であれば、ComboBoxのRowSourceプロパティに設定すれば
>いいですが、そのうちの検索条件の部分一致するセルの値だけをComboBoxの
>選択肢とするならば、RowSourceプロパティではなく、テキスト.txtと同様
>ループ処理によるAddItmeを使う必要があることが理解できますか?

いえよく解りませんが、部分一致が条件になると思います完全一致はチョット
難しいです。
検索でhitしたものはComboBoxにA列からC列まで表示出来ればいいのですが。
やり方はユーザーフォーム2と同様テキストボックスへ→検索値入力→コマンド
ボタンにて検索→コンボボックス表示→転記でいいと思うのですが。?

>
>そういう複雑なことまでしたい処理なのでしょうか?

上記は複雑ですか
>そもそも、テキスト.txtからコード.xlsに変更する時点で何のためにかが
>不思議で仕方ないのですが・・・
不思議ですか 理由として
1.いつも利用している表が今後そのまま使える。
2.帳票でアクティブセル以外にクリックしてデータをたとえば
 すぐ隣のセルへ埋め込む場合容易である。
 こんな感じでしょうか

>Excelシート上に展開した時点で、書き換えがよりしやすいデータになって
>しまうことは、承知の上ですよね?
これはどちらでも同じでしょうか。?
>(テキストだと書き換えられないというわけではないのですが・・・)
かみちゃんはテキストを利用した方がいいと、思うのでしょうか?

以上のような理由から是非検索機能を搭載しておきたいのです。
今回も全角半角等Findは使えないですか?
よろしくお願いします。

【46124】Re:ユーザーフォームのリストを検索→転記
回答  かみちゃん E-MAIL  - 07/1/23(火) 16:51 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>sheet1セルの範囲は$A$1:$C$1391です。
>実際には、データは1394まで埋められているのですが
>かみちゃん原因解りましたC1392:C1394空きでした
>C1394に文字入力したところ表示されました。
>なにも入ってないところが途中結構あります。特にC列は・・・

そのようにしたら、原因がわかりますよね?

>これを"コード.xls"のA1からC列最終まで表示させる
この要件に対応したまでです。

C列に何も入っていないセルが途中結構あるが、A列には何も入っていないセル
はないという要件であれば、「A1からC列最終まで」ではなく「A1からA列の値
の入っている最終行のC列まで」ではないでしょうか?
それであれば、
With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))

With ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
とすればいいです。

>>> 下記3は、2同様検索機能をつけてもらえませんか
>>
>>それでは、要件を提示していただけませんか?
>>[46064]で
>>
>>とだけの提示では、どの列の値が検索条件と部分一致していればいいのかが
>>まったくわかりません。
>
>B列の値が検索条件ですここに会社名が書かれてます

yasuさんでしたら、これだけのヒントの提示があればできると思うのですが、
ほとんど作成依頼に近い形になってしまい、残念です(T_T)
いえ、私は構わないのですが、ご理解いただけずスレッドが長くなってしまい
申し訳ない気持ちです。

ということで、UserForm4を勝手に作りました。
コントロールの配置は、UserForm2、UserForm3と同様です。
CommandButton1のClickイベントのコードがこれだけ変えないといけないとい
うのを実感してください。

'==================================================
'■UserForm4モジュール
' (コード.xlsから検索条件部分一致を選択肢とする)
' (部分一致は全角半角、大文字小文字を無視)
'==================================================
Private Sub UserForm_Initialize()
 Me.Left = 150
 Me.Top = 100
End Sub

'コード.xlsのA1セル〜A列の値の入っている最終行のC列までをComboBoxへ追加
' 検索条件部分一致を選択肢とする
' 部分一致は全角半角、大文字小文字を無視
Private Sub CommandButton1_Click()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 Dim ws As Worksheet
 Dim lngRow As Long
 Dim rng As Range
 Dim ComboBox_Row As Long
 
 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  Application.ScreenUpdating = False
  'すでに開いているかどうかをチェックする
  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
   MsgBox strFileName & vbCrLf & "を開きます"
   Set WB2 = Workbooks.Open(strFileName)
  Else
   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
  End If
  WB1.Activate
  
  Set ws = WB2.Sheets("Sheet1")
  Set rng = ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
  ComboBox_Row = 0
  With Me.ComboBox1
   .ColumnCount = rng.Columns.Count
   For lngRow = 1 To rng.Rows.Count
    If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
     Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
     .AddItem rng.Cells(lngRow, 1).Value
     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
     .ColumnWidths = "20 pt;20 pt;20 pt"
     .BoundColumn = 1
     ComboBox_Row = ComboBox_Row + 1
    End If
   Next
  End With
  Application.ScreenUpdating = True
 Else
  MsgBox "コード.xlsのファイル選択を中止しました"
 End If
End Sub

'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
 ActiveCell.Value = Me.ComboBox1.Value
 Unload Me
End Sub

'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
 Me.ComboBox1.Clear
End Sub

'ブックオープン済みチェック関数
Function ChkWorkbook(strWorkbookName As String) As Boolean
 Dim wb As Workbook

 ChkWorkbook = False
 For Each wb In Workbooks
  If wb.Name = strWorkbookName Then
   ChkWorkbook = True
   Exit For
  End If
 Next
End Function

>>また、セル範囲全体であれば、ComboBoxのRowSourceプロパティに設定すれば
>>いいですが、そのうちの検索条件の部分一致するセルの値だけをComboBoxの
>>選択肢とするならば、RowSourceプロパティではなく、テキスト.txtと同様
>>ループ処理によるAddItmeを使う必要があることが理解できますか?
>
>いえよく解りませんが、部分一致が条件になると思います完全一致はチョット
>難しいです。

完全一致など一言も申し上げていません。
特定のセル範囲(ここではA1〜A列の値の入っている最終行のC列まで)全体を
ComboBoxの選択肢とするには、RowSourceプロパティで簡単に設定できますが、
そのうちの条件に一致(部分であろうが完全であろうが関係ない)するものだ
けを反映させるには、上記UserForm4のCommndButton1のClickイベントのような
記述の仕方をしないと実現できないということです。

>検索でhitしたものはComboBoxにA列からC列まで表示出来ればいいのですが。
>やり方はユーザーフォーム2と同様テキストボックスへ→検索値入力→コマンド
>ボタンにて検索→コンボボックス表示→転記でいいと思うのですが。?

UserForm4でUserForm2と同様に対応しています。

>>そういう複雑なことまでしたい処理なのでしょうか?
>
>上記は複雑ですか

複雑かどうかは、上記UserForm4のCommndButton1のClickイベントの記述を
見て感じてください。
[46066]で提示したStrConv関数のサンプルが複雑と感じるならば、これも
結構厳しいように思います。

>>そもそも、テキスト.txtからコード.xlsに変更する時点で何のためにかが
>>不思議で仕方ないのですが・・・
>不思議ですか 理由として
>1.いつも利用している表が今後そのまま使える。

使い方がよく理解できていないから、不思議に思っているだけかもしれません。
テキスト.txtとコード.xlsの関係もさっぱりわかりませんし・・・
会計専用ソフトのデータでしたら、テキスト.txtはそのソフトから出力され
たデータではないのでしょうか?
コード.xlsは、テキスト.txtとは、まったく別ものですか?
まったく別ものでしたら、私の取り越し苦労です。
同じもので、データを追加修正するにらば、それは、会計専用ソフトですべ
きでは?と経験上思うからです。

>>Excelシート上に展開した時点で、書き換えがよりしやすいデータになって
>>しまうことは、承知の上ですよね?
>これはどちらでも同じでしょうか。?

テキスト.txt と コード.xls との関係がわかりませんので、コメント
できません。

>>(テキストだと書き換えられないというわけではないのですが・・・)
>かみちゃんはテキストを利用した方がいいと、思うのでしょうか?

テキスト.txt と コード.xls が同じであれば、データの改ざんを少しでも
防ぐ観点から、テキスト.txtを使うべきと考えます。
(Excelシートに展開するメリットがまったくない)

>以上のような理由から是非検索機能を搭載しておきたいのです。
>今回も全角半角等Findは使えないですか?

UserForm4モジュールで対応しました。
Findメソッドも使えますが、テキスト.txtと同様の考え方を踏襲するために
あえて使っていません。
必要でしたら、Findメソッドのヘルプに使用例も載っていますから、まずは
しっかり読んでみてください。

【46129】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/23(火) 17:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>   For lngRow = 1 To rng.Rows.Count
>    If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
>     Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
>     .AddItem rng.Cells(lngRow, 1).Value
>     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
>     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
>     .ColumnWidths = "20 pt;20 pt;20 pt"
>     .BoundColumn = 1
>     ComboBox_Row = ComboBox_Row + 1
>    End If
>   Next

上記のコードでも動きますが、一部無駄があるので、以下のように修正して
ください。

   For lngRow = 1 To rng.Rows.Count
    If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
     Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
     .AddItem rng.Cells(lngRow, 1).Value
     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
    ' .ColumnWidths = "20 pt;20 pt;20 pt" '★削除
    ' .BoundColumn = 1 '★削除
     ComboBox_Row = ComboBox_Row + 1
    End If
   Next
   .ColumnWidths = "20 pt;20 pt;20 pt" '★追加
   .BoundColumn = 1 '★追加

> 必要でしたら、Findメソッドのヘルプに使用例も載っていますから、まずは
> しっかり読んでみてください。

お詫びの印にFindメソッドを使った例を提示させていただきます。
上記部分を以下に差し替えるような感じにします。

   '---検索条件部分一致検索(全角・半角区別なし、大文字・小文字区別なし)
   Dim c As Range '★これは、プロシージャの先頭に記述のほうが望ましい
   Set c = rng.Columns(2).Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
   If Not c Is Nothing Then
    FirstAddress = c.Address
    Do
     .AddItem c.Offset(, -1).Value
     .List(ComboBox_Row, 1) = c.Value
     .List(ComboBox_Row, 2) = c.Offset(, 1).Value
     ComboBox_Row = ComboBox_Row + 1
     Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> FirstAddress
   End If
   '---検索条件部分一致検索 ここまで
   .ColumnWidths = "20 pt;20 pt;20 pt"
   .BoundColumn = 1

【46133】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/23(火) 20:22 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん本当にありがとうございました。
何とかユーザーフォーム4も出来ました。
昨日から長々質問させていただき訳のわからない問いかけに
1つ1つ丁寧に答えてくださり感謝です。目的が達成できました。
かんちゃんさん本当に親切ですね!下記コードまで(;_;)
お詫びだなんて とんでもありません。
出来の悪い生徒みたいな気分です。(ずいぶん昔の話)

しかし下記コードで".FindNext"(c)の部分で、
コンパイルエラー メゾットまたはデータメンバが見つかりませんと
出てしまいます。最後くらい自分で解決しようと試みたのですが
ヘルプ等今まで見ていたのですが残念なら解決できません。
また、確認お願いします。 "ちょっと  ちょっと・ちょっと"の
気分です。ザンネーン 。

>お詫びの印にFindメソッドを使った例を提示させていただきます。
>上記部分を以下に差し替えるような感じにします。
>
>   '---検索条件部分一致検索(全角・半角区別なし、大文字・小文字区別なし)
>   Dim c As Range '★これは、プロシージャの先頭に記述のほうが望ましい
>   Set c = rng.Columns(2).Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
>   If Not c Is Nothing Then
>    FirstAddress = c.Address
>    Do
>     .AddItem c.Offset(, -1).Value
>     .List(ComboBox_Row, 1) = c.Value
>     .List(ComboBox_Row, 2) = c.Offset(, 1).Value
>     ComboBox_Row = ComboBox_Row + 1
>     Set c = .FindNext(c)
>    Loop While Not c Is Nothing And c.Address <> FirstAddress
>   End If
>   '---検索条件部分一致検索 ここまで
>   .ColumnWidths = "20 pt;20 pt;20 pt"
>   .BoundColumn = 1

【46134】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/23(火) 20:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>しかし下記コードで".FindNext"(c)の部分で、
>コンパイルエラー メゾットまたはデータメンバが見つかりませんと
>出てしまいます。最後くらい自分で解決しようと試みたのですが
>ヘルプ等今まで見ていたのですが残念なら解決できません。

大変申し訳ありません。
おまけコードなので、コンパイルチェックおよび動作確認していませんでした。

     Set c = .FindNext(c)

     Set c = rng.FindNext(c)
としてください。

ヘルプの使用例に載っている部分で、
 With Worksheets(1).Range("a1:a500")
  Set c = Find(2, lookin:=xlValues)
  '〜省略〜
   Set c = .FindNext(c)

 With rng
  Set c = .Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
  '〜省略〜
   Set c = .FindNext(c)
に修正し、さらに、
 Set c = rng.Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
 '〜省略〜
  Set c = rng.FindNext(c)
と修正するときに rng.FindNext と修正するのを漏らしました。

以上、言い訳です。

【46139】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/24(水) 3:58 -

引用なし
パスワード
   ▼かみちゃん さん:
仕事で外出しており返事遅くなりました

ようやく最後までたどり着けました。
かみちゃんさんのおかげです、 感謝です。
これに懲りずまた、またお願いばかりするかもしれませんが
よろしくお願いします。
おまけもgoodです。

最後もう一つお聞きしたいのですが
検索終了しComboBox1の▼をクリックリスト内から選択したときに
A列のデータしか今はComboBoxに載りませんが、
一応3列目まで表示させるには
どの数字をさわればいいでしょうか?
なお、転記はA列のみでOKなのですが

なんでかみちゃんさんはどんな要望にでも応えられるのですか?
これが不思議不得手はないのですか???
また、今後共よろしくお願いします。

>>しかし下記コードで".FindNext"(c)の部分で、
>>コンパイルエラー メゾットまたはデータメンバが見つかりませんと
>>出てしまいます。最後くらい自分で解決しようと試みたのですが
>>ヘルプ等今まで見ていたのですが残念なら解決できません。
>
>大変申し訳ありません。
>おまけコードなので、コンパイルチェックおよび動作確認していませんでした。
>
>     Set c = .FindNext(c)
>を
>     Set c = rng.FindNext(c)
>としてください。
>
>ヘルプの使用例に載っている部分で、
> With Worksheets(1).Range("a1:a500")
>  Set c = Find(2, lookin:=xlValues)
>  '〜省略〜
>   Set c = .FindNext(c)

【46140】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/24(水) 7:28 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>検索終了しComboBox1の▼をクリックリスト内から選択したときに
>A列のデータしか今はComboBoxに載りませんが、
>一応3列目まで表示させるには
>どの数字をさわればいいでしょうか?

UserFormによって記述が統一されていないのが申し訳ないのですが、
どのUserFormも以下のような感じでできます。
特に今回のご質問は、★部分かと思います。
詳しくは、ヘルプもご確認ください。

  With Me.ComboBox1
   .ColumnCount = rng.Columns.Count '選択肢の列数
   .ColumnWidths = "20 pt;20 pt;20 pt" '選択肢の列幅
   .TextColumn = 2 '★選択後の表示列(選択肢の2番目の列を表示)
   .BoundColumn = 1 'コントロールの値の列(選択肢の1番目の列を表示)

>なんでかみちゃんさんはどんな要望にでも応えられるのですか?
>これが不思議不得手はないのですか???

どんな要望でも応えられるわけではありません。
知らないことはたくさんあるので、不得手なものも当然あります。
でも、知っていること、経験したことあることは書かせていただいているだけです。
(今回は、会計専用ソフトのデータを使っているということですので、経験上なおさらという感じです。)

【46157】Re:ユーザーフォームのリストを検索→転記
発言  yasu  - 07/1/24(水) 20:44 -

引用なし
パスワード
   ▼かみちゃん さん:
こんばんわ
お聞きしたのは
>検索終了しComboBox1の▼をクリックリスト内から選択したときに
>A列のデータしか今はComboBoxに載りませんが、
>一応3列目まで表示させるには
>どの数字をさわればいいでしょうか?
>なお、転記はA列のみでOKなのですが

   .ColumnCount = rng.Columns.Count '選択肢の列数
   .ColumnWidths = "40 pt;120 pt;50 pt" '選択肢の列幅
   .TextColumn = 2 '★選択後の表示列(選択肢の2番目の列を表示)
          ※ココで2を指定すると2列目しかでません。
   .BoundColumn = 1 'コントロールの値の列(選択肢の1番目の列を表示
とりあえず選択の時点ではコード.xlsのA列からC列全て表示はできませんかね?

こんなのもあり色々試したのですがダメでした

 コンボボックスのリストには、複数の列を表示することが可能です。
 次のサンプルでは、リストに2列表示させる処理を、
フォームが表示される時に
発生するイベント「Open」で行っています。
 また、TextColumnプロパティで、Textプロパティに格納する値
(リストで選択された
値が表示されるテキストボックスの値)を、
2列目の値が表示されるようにしています。

Private Sub UserForm_Initialize()
  Dim myArray() As Variant
  Dim i     As Integer

  With ComboBox1
    .ColumnCount = 2        '表示列数の設定
    .TextColumn = 2         '表示列の設定
    
    ReDim Preserve myArray(10, 1)
    
    For i = 1 To 10
      '1列めの項目
      myArray(i - 1, 0) = "1列目の" & i
      '2列め項目
      myArray(i - 1, 1) = "2列目の" & i
    Next i
    
    .List() = myArray()
    
  End With

End Sub

【46159】Re:ユーザーフォームのリストを検索→転記
発言  かみちゃん E-MAIL  - 07/1/24(水) 20:51 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>検索終了しComboBox1の▼をクリックリスト内から選択したときに
>>A列のデータしか今はComboBoxに載りませんが、
>>一応3列目まで表示させるには
>>どの数字をさわればいいでしょうか?
>>なお、転記はA列のみでOKなのですが

1.選択肢としては、ColumnCountで指定した列数(A列〜C列)を表示
2.選択したら、ComboBoxには、TextColumnで指定した列(1列のみ)の値を表示
3.ComboBoxの値としては、TextColumnで指定した列とは別にBoundColumnで指定した列(1列のみ)の値とする。
ということになっています。

そこで、yasuさんの「一応3列目まで表示させる」という要件を実現するた
めには、以下のように修正する必要があります。
実現できるのは、UserForm4のコードのみです。
UserForm3やUserForm2では、難しいです。
★の部分を修正する必要がありますので、そこまでして、「一応の要件」を
満たす必要があるのかよく考えてください。

考え方としては、A列〜C列の値をComboBoxに表示する場合に、さらに1列を
ComboBoxに追加して、それを表示用の列とします。
以下のコードでは、左から1列目が表示用の列として、残り3列をA列〜C列
の値を割り当てるようにしています。

'==================================================
'■UserForm4モジュール
'==================================================

'コード.xlsのA1セル〜A列の値の入っている最終行のC列までをComboBoxへ追加
' 検索条件部分一致を選択肢とする
' 部分一致は全角半角、大文字小文字を無視
Private Sub CommandButton1_Click()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 Dim ws As Worksheet
 Dim lngRow As Long
 Dim rng As Range
 Dim ComboBox_Row As Long

 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
  Application.ScreenUpdating = False
  'すでに開いているかどうかをチェックする
  If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
   MsgBox strFileName & vbCrLf & "を開きます"
   Set WB2 = Workbooks.Open(strFileName)
  Else
   Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
  End If
  WB1.Activate
 
  Set ws = WB2.Sheets("Sheet1")
  Set rng = ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
  ComboBox_Row = 0
  With Me.ComboBox1
   .ColumnCount = rng.Columns.Count + 1 '★
   .ColumnWidths = "40 pt;0 pt;0 pt;0 pt" '★
   .TextColumn = 1 '★
   .BoundColumn = 1 '★
   For lngRow = 1 To rng.Rows.Count
    If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
     Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
'     .AddItem rng.Cells(lngRow, 1).Value
'     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
'     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
     .AddItem rng.Cells(lngRow, 1).Value & " " & _
          rng.Cells(lngRow, 2).Value & " " & _
          rng.Cells(lngRow, 3).Value '★
     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 1).Value '★
     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 2).Value '★
     .List(ComboBox_Row, 3) = rng.Cells(lngRow, 3).Value '★
     ComboBox_Row = ComboBox_Row + 1
    End If
   Next
'   .ColumnWidths = "20 pt;20 pt;20 pt"
'   .BoundColumn = 1
  End With
  Application.ScreenUpdating = True
 Else
  MsgBox "コード.xlsのファイル選択を中止しました"
 End If
End Sub


Findメソッドを使う場合

  ComboBox_Row = 0
  With Me.ComboBox1
   .ColumnCount = rng.Columns.Count + 1 '★
   .ColumnWidths = "40 pt;0 pt;0 pt;0 pt" '★
   .TextColumn = 1 '★
   .BoundColumn = 1 '★
   
   '---検索条件部分一致検索(全角・半角区別なし、大文字・小文字区別なし)

   Dim c As Range
   Dim FirstAddress As String

   Set c = rng.Columns(2).Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
   If Not c Is Nothing Then
    FirstAddress = c.Address
    Do
     .AddItem c.Offset(, -1).Value & " " & _
          c.Value & " " & _
          c.Offset(, 1).Value '★
     .List(ComboBox_Row, 1) = c.Offset(, -1).Value '★
     .List(ComboBox_Row, 2) = c.Value '★
     .List(ComboBox_Row, 3) = c.Offset(, 1).Value '★
'     .AddItem c.Offset(, -1).Value
'     .List(ComboBox_Row, 1) = c.Value
'     .List(ComboBox_Row, 2) = c.Offset(, 1).Value
     ComboBox_Row = ComboBox_Row + 1
     Set c = rng.FindNext(c)
    Loop While Not c Is Nothing And c.Address <> FirstAddress
   End If
   '---検索条件部分一致検索 ここまで
   
'   .ColumnWidths = "20 pt;20 pt;20 pt"
'   .BoundColumn = 1
  End With

>こんなのもあり色々試したのですがダメでした
>
> コンボボックスのリストには、複数の列を表示することが可能です。

見当違いです。それは、選択肢の複数列表示ですから、すでに対応してあります。
そこまでして、「一応の要件」を満たしたいのは、なぜなのでしょうか?
一歩一歩積み上げていかないと、わけわからなくなると思うのですが・・・
「一応」「とりあえず」「念のため」は手戻りの原因です。
それを覚悟の上でしたらいいのですが、心配です。

【46168】Re:ユーザーフォームのリストを検索→転記
お礼  yasu  - 07/1/25(木) 0:22 -

引用なし
パスワード
   かみちゃんさん
なが〜いことご指導ありがとうございました。
1つ前のスレ結構複雑ですね ますます
わからなくなりそうです。
もっと簡単に表示可能かと思いました。
かみちゃんの言うとおりでした。

>そこまでして、「一応の要件」を満たしたいのは、なぜなのでしょうか?
>一歩一歩積み上げていかないと、わけわからなくなると思うのですが・・・
>「一応」「とりあえず」「念のため」は手戻りの原因です。
>それを覚悟の上でしたらいいのですが、心配です。
最後は余計でしたね。
あきれもせず最後までお付き合いいただき
本当にありがとうございました。
解決です!!!!!(^^)

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