Excel VBA質問箱 IV

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

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


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

【33435】OPENと配列について VBAビギナー 06/1/12(木) 0:39 質問[未読]
【33447】Re:OPENと配列について inoue 06/1/12(木) 10:56 発言[未読]
【33483】Re:OPENと配列について VBAビギナー 06/1/12(木) 17:33 質問[未読]
【33493】Re:OPENと配列について inoue 06/1/12(木) 21:51 発言[未読]
【33498】Re:OPENと配列について VBAビギナー 06/1/13(金) 9:28 質問[未読]
【33505】Re:OPENと配列について inoue 06/1/13(金) 12:22 発言[未読]

【33435】OPENと配列について
質問  VBAビギナー  - 06/1/12(木) 0:39 -

引用なし
パスワード
   VBAをはじめてまだ一ヶ月の初心者です。本格的なプログラムをつくりたいのですがまったくわかりません。
目的Aと目的Bというエクセルで作成したシートがあります。。どちらもセルの(3,2)にコンボボックスがあります。
コンボボックスには春、夏、秋、冬といった季節が選択できるようになっています。。
エクセルの目的AにはA列の6行目から1〜7の数字があり、BCD列から開始、終了、回数の順にデータが入っていく。(E列以降は開始、終了、回数が繰り返す)
目的Bには上と同様にA列に数字があり、BCDEから開始、終了、回数、ユーザーの順にデータが入っていく。(F列以降は上と同様に繰り返す)
csvファイルには、1行に開始時刻,終了時刻,区分,回数)の形式(5:00,6:00,A,10)で数行に渡り記述されているが
たまに区分がBのときのみ休み時間の後ろに使用者が(5:00,6:00,A,10:x,y,z)のように:区切りで記述されている場合もあるものとする。
このような構成のファイルが1〜7の数字のみのフォルダ内に4つずつありそれぞれ春、夏、秋、冬(.txt)というファイル名である。
存在する全てのファイルを読み取り、データを配列などでメモリ上に保存した後、エクセル上のコンボボックスで季節を選択したらデータが表示されるようにしたいのですがどのようにしたらよろしいでしょうか?

【33447】Re:OPENと配列について
発言  inoue E-MAILWEB  - 06/1/12(木) 10:56 -

引用なし
パスワード
   >本格的なプログラムをつくりたいのですが....
と言うわりには質問が「まる投げ」状態ですね。
>まったくわかりません。
>どのようにしたらよろしいでしょうか?
では、いつまでたっても「本格的なプログラム」は作れません。

ご自分でどこまでやったとか、
作る上で分からない部分を具体的に聞かないと。
何もやらずに質問しているなら話になりません。
技量も分からないので回答しにくいです。

【33483】Re:OPENと配列について
質問  VBAビギナー  - 06/1/12(木) 17:33 -

引用なし
パスワード
   Option Explicit
Sub FullPath_Get()      'パス取得用
Dim path1 As String
path1 = "C:\Documents and Settings\デスクトップ\temp"
Dim i As Integer, Dir_Number(6) As String
For i = 0 To 6
Select Case i
  Case 0
      Dir_Number(i) = "1"
  Case 1
     Dir_Number(i) = "2"
  Case 2
    Dir_Number(i) = "3"
  Case 3
    Dir_Number(i) = "4"
  Case 4
    Dir_Number(i) = "5"
  Case 5
    Dir_Number(i) = "6"
  Case 6
    Dir_Number(i) = "7"
  End Select
Next i
path2 = path1 & "\" & Dir_Number(i)
fullpath = path2 & "\" & "*" & .txt 'このあたりの設定の仕方がわかりません。ファイル数がわからないときなどにも対応したいです。
End Sub
Sub File_Read()        'ファイル読み込み用
file_No = FreeFile
Open fullpath For Input As file_No
Do While Not EOF(file_No)
  Line Input #file_No, season_data
  Call File_check  '別ルーチンの呼び出し
Loop
Close file_No
End Sub

Sub File_check()       'ファイルの中身チェック用
Dim Us() As String, Data() As String
If InStr(season_data, ";") > 0 Then
  user = Mid(season_data, InStr(season_data, ";") + 1, Len(season_data) - InStr(season_data, ";") - 1)
  Us() = Split(user, ",")
  season_data = Mid(season_data, 1, InStr(unyoudata, ";") - 1)
  Data() = Split(season_data, ",")
End If
Else
  Data() = Split(season_data, ",")
End Sub
力不足でこのような感じでしかできていませんが、処理をルーチンごとに
わけてメインで呼び出そうと思ってます。

【33493】Re:OPENと配列について
発言  inoue E-MAILWEB  - 06/1/12(木) 21:51 -

引用なし
パスワード
   添削とかはする気はないので気が付いたことだけ。

> path2 = path1 & "\" & Dir_Number(i)
まず、path2は未宣言。
Dir_Number(i)は「i」がこの時点で「7」になっているはずで、
インデックスエラーでしょう。
「i」より1多い番号を与えたいなら配列など作らず、
path2 = path1 & "\" & CStr(i + 1)
で良いはずです。

>fullpath = path2 & "\" & "*" & .txt
「.txt」の文字列でしょう?
ダブルクォーテーションで囲わないと未定義です。
fullpath = path2 & "\*.txt"

とりあえず、ここまでにします。

【33498】Re:OPENと配列について
質問  VBAビギナー  - 06/1/13(金) 9:28 -

引用なし
パスワード
   inoueさん、ご指摘ありがとうございます。
>Option Explicit
>Sub FullPath_Get()      'パス取得用
> Dim path1 As String
> path1 = "C:\Documents and Settings\デスクトップ\temp"
> Dim i As Integer, Dir_Number(6) As String
> For i = 0 To 6
> Select Case i
>  Case 0
>      Dir_Number(i) = "1"
>  Case 1
>     Dir_Number(i) = "2"
>  Case 2
>    Dir_Number(i) = "3"
>  Case 3
>    Dir_Number(i) = "4"
>  Case 4
>    Dir_Number(i) = "5"
>  Case 5
>    Dir_Number(i) = "6"
>  Case 6
>    Dir_Number(i) = "7"
>  End Select
> Next i
>End Sub
上記のようにフォルダの名を配列に入れたものとDir()を使用して
各ファルダ内に存在するすべてのファイルを開くにはどのようにしたらよろしいでしょうか?お分かりになる方、ご回答よろしくおねがいいたします。

【33505】Re:OPENと配列について
発言  inoue E-MAILWEB  - 06/1/13(金) 12:22 -

引用なし
パスワード
   プロシージャ間の変数の連絡がお解りでないようですね。
とりあえず、こんな感じでしょうか。
Option Explicit
Const path1 = "C:\Documents and Settings\デスクトップ\temp"

Sub FullPath_Get()      'パス取得用
Dim i As Integer
For i = 1 To 7
  Call Dir_Path(path1 & "\" & CStr(i) & "\")
Next i
End Sub

Sub Dir_Path(strPath As String)
Dim strFile As String
strFile = Dir(strPath & "*.txt")
Do While strFile <> ""
  Call File_Read(strPath & strFile)
  strFile = Dir()
Loop
End Sub

Sub File_Read(strFullPath As String) 'ファイル読み込み用
Dim strRec As String
Dim file_No As Integer
file_No = FreeFile
Open strFullPath For Input As file_No
Do While Not EOF(file_No)
  Line Input #file_No, strRec
  Call File_check(strRec)  '別ルーチンの呼び出し
Loop
Close file_No
End Sub

Sub File_check(strRec As String)    'ファイルの中身チェック用
Debug.Print strRec
' ここは考えて下さい
End Sub

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