Excel VBA質問箱 IV

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

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


1941 / 13645 ツリー ←次へ | 前へ→

【70891】コンボックスデータに外部データを使うには こなつ 12/1/12(木) 23:08 質問[未読]
【70897】Re:コンボックスデータに外部データを使う... ちん 12/1/13(金) 9:57 発言[未読]
【70900】Re:コンボックスデータに外部データを使う... こなつ 12/1/13(金) 13:35 お礼[未読]
【70901】Re:コンボックスデータに外部データを使う... ちん 12/1/13(金) 19:54 発言[未読]
【70902】Re:コンボックスデータに外部データを使う... Yuki 12/1/13(金) 21:39 発言[未読]
【70944】Re:コンボックスデータに外部データを使う... こなつ 12/1/19(木) 19:18 お礼[未読]

【70891】コンボックスデータに外部データを使うに...
質問  こなつ  - 12/1/12(木) 23:08 -

引用なし
パスワード
   こんにちは

 いつもお世話になっております。

 過去の質問内容で検索したのですが
 少しイメージが違ったので 質問させて頂きます。


 やりたいこと
  ユーザーフォームでコンボックスの選択データを
   外部のデータ(CSV または text)から取り込み
   コンボックスの選択画面に表示しようと考えています。

  選択するコンボックスは4つあって
   (コンA〜Dとします)
   コンAを選択すると選択項目により コンBの選択項目が
   変わります。 以降同じようにコンDまで決まってきます。

   データ量としては、
     コンAが  32データ
     コンBが  551データ
     コンCが 8665データ
     コンDが 96750データ
   データの種類は 文字 と それに対応するコード番号になります。

   現在は エクセルシートひとつに入れている為
   ファイル容量が 60Mを超えており
   尚且つ ネットワークで共有している為 非常に
   読込みに時間が掛かっている状態です。

    こういった 選択するデータを別ファイルから読み込む
    方法がわかりません。

    どなたか ご教授宜しくお願いします。  

【70897】Re:コンボックスデータに外部データを使...
発言  ちん  - 12/1/13(金) 9:57 -

引用なし
パスワード
   ▼こなつ さん、おはようございます。ちんといいます。
>こんにちは
>
> いつもお世話になっております。
>
> 過去の質問内容で検索したのですが
> 少しイメージが違ったので 質問させて頂きます。
>
>
> やりたいこと
>  ユーザーフォームでコンボックスの選択データを
>   外部のデータ(CSV または text)から取り込み
>   コンボックスの選択画面に表示しようと考えています。
>
>  選択するコンボックスは4つあって
>   (コンA〜Dとします)
>   コンAを選択すると選択項目により コンBの選択項目が
>   変わります。 以降同じようにコンDまで決まってきます。
>
>   データ量としては、
>     コンAが  32データ
>     コンBが  551データ
>     コンCが 8665データ
>     コンDが 96750データ
>   データの種類は 文字 と それに対応するコード番号になります。
>
>   現在は エクセルシートひとつに入れている為
>   ファイル容量が 60Mを超えており
>   尚且つ ネットワークで共有している為 非常に
>   読込みに時間が掛かっている状態です。
>
>    こういった 選択するデータを別ファイルから読み込む
>    方法がわかりません。
>
>    どなたか ご教授宜しくお願いします。  
コンボCとコンボDのデータ量を考えるとACCESSDBがよろしいかと思われます。

TXTデータとCSVのファイルは、
  
  Open "ドライブ:ファイル名.種別" For Input As #1
  Do While Not EOF(1)
   
    Line Input #1, Ttxt
    KENNSUU = KENNSUU + 1
  Loop
  Close #1
以上、参考までに・・・

【70900】Re:コンボックスデータに外部データを使...
お礼  こなつ  - 12/1/13(金) 13:35 -

引用なし
パスワード
    早速の回答ありがとうございます。

 アクセスで実行すれば一番いいのですが・・・

  作業する環境にアクセスが入っていないので 無理やり
  実施しています。

   さらに 印刷に至っては エクセルで作成した表を元に
    ワードで差込み印刷をしている状況です。

   
  あと 少しわからないのですが、
  配列で読込みして CSV等のデータのある一部を
  抜き出す事も出来るのでしょうか??

  良く判らなかったので シートに膨大なデータを
  放り込んでしまいました。

【70901】Re:コンボックスデータに外部データを使...
発言  ちん  - 12/1/13(金) 19:54 -

引用なし
パスワード
   ▼こなつ さん:
こんわんわ、ちんといいます。
> 早速の回答ありがとうございます。
>
> アクセスで実行すれば一番いいのですが・・・
>
>  作業する環境にアクセスが入っていないので 無理やり
>  実施しています。
>
>   さらに 印刷に至っては エクセルで作成した表を元に
>    ワードで差込み印刷をしている状況です。
>
>   
>  あと 少しわからないのですが、
>  配列で読込みして CSV等のデータのある一部を
>  抜き出す事も出来るのでしょうか??
>
>  良く判らなかったので シートに膨大なデータを
>  放り込んでしまいました。
CSVファイルと、シーケンシャルファイル(TXTファイル)は、
先頭データからしかデータを読み込みできません。
膨大なデータがあり、尚且つ、コンボデータやある一部分のデータを
読み込みしたいのであれば、裏で上記のEXCELファイルデータを読み込み、
コンボデータを読み込みしたり、一部分のデータを読み込みしてみては?

以上、参考までに・・・

【70902】Re:コンボックスデータに外部データを使...
発言  Yuki  - 12/1/13(金) 21:39 -

引用なし
パスワード
   ▼こなつ さん:
こんにちは。
ADOを使った一例です。
アクセスが無くても大丈夫です。
参照設定 Microsoft Activex Data Objects x.x Library
UserFormにComboBox1とComboBox2を張付けてください。
ComboBox1のデータはB01かB02を選択して下さい。
その他の場合は抽出データがありませんので
テストデータは下記の2ファイルです。
Combo1.csv         Combo2.csv
_______________      ______________
AAA    BBB        AAA    BBB
A01    B01        B01    C01
A01    B02        B01    C02
A01    B03        B01    C03
A01    B04        B01    C04
A01    B05        B01    C05
A01    B06        B01    C06
A01    B07        B01    C07
A01    B08        B01    C08
A01    B09        B01    C09
A01    B10        B01    C10
A01    B11        B01    C11
A01    B12        B01    C12
A01    B13        B01    C13
A01    B14        B01    C14
A01    B15        B01    C15
A02    B16        B02    C16
A02    B17        B02    C17
A02    B18        B02    C18
A02    B19        B02    C19
A02    B20        B02    C20
A02    B21        B02    C21
A02    B22        B02    C22
A02    B23        B02    C23
A02    B24        B02    C24
A02    B25        B02    C25
A02    B26        B02    C26
A02    B27        B02    C27
A02    B28        B02    C28
A02    B29        B02    C29
A02    B30        B02    C30
A02    B31        B02    C31
A02    B32        B02    C32
A02    B33        B02    C33
A02    B34        B02    C34
A02    B35        B02    C35
A02    B36        B02    C36
ユーザーフォームのモジュールに
下記を張付けて見てください。
Option Explicit

Private Sub ComboBox1_Change()
  Dim strFnm As String
  Dim strDir As String
  Dim strF  As String
  Dim strField  As String
  
  If Me.ComboBox1.Text = "" Then Exit Sub
  strFnm = "Combo2.csv"
  strField = "AAA  "
  strF = Me.ComboBox1.Text
  With Me.ComboBox2
    .ColumnCount = 2
    .ColumnWidths = "30 pt;30 pt"
    .BoundColumn = 2
    .TextColumn = 2
    .List = DataSet(strFnm, strField, strF)
  End With
End Sub

Private Sub UserForm_Initialize()
  Dim strFnm As String
  Dim strDir As String
  Dim strF  As String
  Dim strField  As String
  
  strFnm = "Combo1.csv"
  strField = "AAA  "
  strF = "A01"
  With Me.ComboBox1
    .ColumnCount = 2
    .ColumnWidths = "30 pt;30 pt"
    .BoundColumn = 2
    .TextColumn = 2
    .List = DataSet(strFnm, strField, strF)
  End With
End Sub

Private Function DataSet(strFnm As String, strField As String, strF As String) As Variant
  Dim strSQL As String
  Dim rs   As ADODB.Recordset
  Dim cn   As ADODB.Connection
  Dim i    As Long
  Dim strDir As String
  Dim v    As Variant
  Dim vd   As Variant
  
  strDir = "D:\Excel\Test10\"
  
  Set cn = New ADODB.Connection
  cn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & strDir & ";" & _
      "Extended Properties=Text;"
  cn.Open
  strSQL = "SELECT * FROM " & strFnm & " " & _
       "WHERE " & strField & " = '" & strF & "'"
    
  Set rs = New ADODB.Recordset
  With rs
    .ActiveConnection = cn
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
    .Source = strSQL
    .Open Options:=adCmdText
  End With
  If Not rs.EOF Then
    v = rs.GetRows
  End If
  rs.Close
  cn.Close
  If IsArray(v) Then
    ReDim vd(UBound(v, 2), UBound(v))
    For i = LBound(v, 2) To UBound(v, 2)
      vd(i, 0) = v(0, i)
      vd(i, 1) = v(1, i)
    Next
  End If
  DataSet = vd
End Function

【70944】Re:コンボックスデータに外部データを使...
お礼  こなつ  - 12/1/19(木) 19:18 -

引用なし
パスワード
   お返事が遅くなり申し訳ありませんでした。

 大変参考になりました。

  ありがとうございます。

   また、判らないことがあったら教えて下さい

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