Excel VBA質問箱 IV

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

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


9289 / 13646 ツリー ←次へ | 前へ→

【28186】教えてください たかし 05/8/30(火) 16:10 質問[未読]
【28205】Re:教えてください りん 05/8/30(火) 21:15 発言[未読]
【28220】Re:教えてください たかし 05/8/31(水) 14:59 お礼[未読]

【28186】教えてください
質問  たかし  - 05/8/30(火) 16:10 -

引用なし
パスワード
   いつもお世話になっています。
処理の中に数式を入れて計算させようとしているのですが、うまくいきません。
お力添えをお願いいたします。

テキストファイルに105個の数値が入っており、そのファイルが複数あります。
それらの数値を15個づつ取り出し、シート1からシート7に振り分け、
それぞれセルA2からセルP2に入力するマクロを作成しました。というか、作成してありました。
A1にはそのファイルの作成日が入力されるようになっています。
そこで、シート1・2・3の数値を使用して計算し、結果をシート8のセルA2から
セルP2に貼り付けるマクロを作成しています。
作成されていたマクロを参考に作っては見たのですが、うまくいきません。
皆さんのお力をお貸し願えないでしょうか?

Sub macsens取込(inputmode As Integer)
  Dim fp As Variant
  Dim fso As Object, fnow As Object
  Dim temp As Variant
  Dim temptime1, temptime2
  Dim i As Integer, j
  Dim rowcount
  
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
  fp = Application.GetOpenFilename(MultiSelect:=True, _
      Title:=" ログファイルを選択して下さい(CtrlやShiftキーを使って複数選択可)")
    If Not IsArray(fp) Then
      MsgBox ("処理を中止します")
      Exit Sub
    End If
    
  Set fso = CreateObject("Scripting.FileSystemObject")
  UserForm2.Show vbModeless
  DoEvents
  
  If inputmode = 0 Then
    rowcount = 0
  Else
    rowcount = Sheets(1).Range("A65536").End(xlUp).Row - 1
  End If
  
  For i = 1 To UBound(fp)
    Set fnow = fso.OpenTextFile(fp(i), ForReading)
    Do While fnow.AtEndOfStream <> True
      temp = Split(Replace(fnow.ReadLine, "=", ","), ",")
      If temp(0) Like "*DATE*" Then
        temptime1 = DateSerial(temp(1), temp(2), temp(3))
        rowcount = rowcount + 1
        DoEvents
      ElseIf temp(0) Like "*TIME*" Then
        temptime2 = TimeSerial(temp(1), temp(2), temp(3))
      ElseIf temp(0) Like "*ORGB*" Then
        Sheets(1).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(1).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*ORGP*" Then
        Sheets(2).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(2).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*OFF3*" Then
        Sheets(3).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(3).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*POST*" Then
        Sheets(4).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(4).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*OFF4*" Then
        Sheets(5).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(5).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*PRID*" Then
        Sheets(6).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(6).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf temp(0) Like "*SOPC*" Then
        Sheets(7).Cells(rowcount + 1, 1) = temptime1 + temptime2
        For j = 1 To UBound(temp)
          Sheets(7).Cells(rowcount + 1, j + 1) = temp(j)
        Next j
      ElseIf Sheets(1).Cells(rowcount + 1, 1) <> "" Then
        Sheets(8).Cells(rowcount + 1, 1) = Sheets(1).Cells_           (rowcount, 1)
        For j = 1 To UBound(temp)
          Worksheets("データ").Cells(rowcount + 1, j + 1) = _
           (Worksheets("ORGP")!RC - Worksheets("ORGB")!RC + _
           Worksheets("OFF3")!RC) * 1000000000
        Next j
      End If
    Loop
    fnow.Close
    Set fnow = Nothing
    Call Display_MyProgressBar(i, UBound(fp))
    DoEvents
  Next i
  Unload UserForm2

End Sub

最後の
ElseIf Sheets(1).Cells(rowcount + 1, 1) <> "" Then
        Sheets(8).Cells(rowcount + 1, 1) = Sheets(1).Cells_           (rowcount, 1)
        For j = 1 To UBound(temp)
          Worksheets("データ").Cells(rowcount + 1, j + 1) = _
           (Worksheets("ORGP")!RC - Worksheets("ORGB")!RC + _
           Worksheets("OFF3")!RC) * 1000000000
        Next j
この部分を作成しています。
それ以外の部分は正常に処理しています。

長文になってしまい、申し訳ありません。
よろしくお願いいたします。

【28205】Re:教えてください
発言  りん E-MAIL  - 05/8/30(火) 21:15 -

引用なし
パスワード
   たかし さん、こんばんわ。

>A1にはそのファイルの作成日が入力されるようになっています。
>そこで、シート1・2・3の数値を使用して計算し、結果をシート8のセルA2から
>セルP2に貼り付けるマクロを作成しています。
>作成されていたマクロを参考に作っては見たのですが、うまくいきません。
 もともと完成された分岐(すべて無事に振り分けられている)だったのだとしたら、その下に分岐をつけてもそこを経由することはないはずですよね。

ざっとみただけですが。

>
>Sub macsens取込(inputmode As Integer)
>  Dim fp As Variant
>  Dim fso As Object, fnow As Object
>  Dim temp As Variant
>  Dim temptime1, temptime2
>  Dim i As Integer, j
>  Dim rowcount
>  
>  Const ForReading = 1, ForWriting = 2, ForAppending = 8
>  fp = Application.GetOpenFilename(MultiSelect:=True, _
>      Title:=" ログファイルを選択して下さい(CtrlやShiftキーを使って複数選択可)")
>    If Not IsArray(fp) Then
>      MsgBox ("処理を中止します")
>      Exit Sub
>    End If
>    
>  Set fso = CreateObject("Scripting.FileSystemObject")
>  UserForm2.Show vbModeless
>  DoEvents
>  
>  If inputmode = 0 Then
>    rowcount = 0
>  Else
>    rowcount = Sheets(1).Range("A65536").End(xlUp).Row - 1
>  End If
>  
>  For i = 1 To UBound(fp)
>    Set fnow = fso.OpenTextFile(fp(i), ForReading)
>    Do While fnow.AtEndOfStream <> True
>      temp = Split(Replace(fnow.ReadLine, "=", ","), ",")      >      If temp(0) Like "*DATE*" Then
>        temptime1 = DateSerial(temp(1), temp(2), temp(3))
>        rowcount = rowcount + 1
>        DoEvents
>      ElseIf temp(0) Like "*TIME*" Then
>        temptime2 = TimeSerial(temp(1), temp(2), temp(3))
>      ElseIf temp(0) Like "*ORGB*" Then
>        Sheets(1).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(1).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*ORGP*" Then
>        Sheets(2).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(2).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*OFF3*" Then
>        Sheets(3).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(3).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*POST*" Then
>        Sheets(4).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(4).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*OFF4*" Then
>        Sheets(5).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(5).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*PRID*" Then
>        Sheets(6).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(6).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf temp(0) Like "*SOPC*" Then
>        Sheets(7).Cells(rowcount + 1, 1) = temptime1 + temptime2
>        For j = 1 To UBound(temp)
>          Sheets(7).Cells(rowcount + 1, j + 1) = temp(j)
>        Next j
>      ElseIf Sheets(1).Cells(rowcount + 1, 1) <> "" Then
        ここにメッセージボックスを入れてみてください。
        今まで無事に処理が流れていたのだとしたら、一度も表示されないと思います。
>        Sheets(8).Cells(rowcount + 1, 1) = Sheets(1).Cells_           (rowcount, 1)
>        For j = 1 To UBound(temp)
>          Worksheets("データ").Cells(rowcount + 1, j + 1) = _
>           (Worksheets("ORGP")!RC - Worksheets("ORGB")!RC + _
>           Worksheets("OFF3")!RC) * 1000000000
>        Next j
>      End If

      tempを使っているところをみたら、書くとしたらここでしょうか? 
        Sheets(8).Cells(rowcount + 1, 1) = Sheets(1).Cells_           (rowcount, 1)
        For j = 1 To UBound(temp)
          Worksheets("データ").Cells(rowcount + 1, j + 1) = _
           (Worksheets("ORGP")!RC - Worksheets("ORGB")!RC + _
           Worksheets("OFF3")!RC) * 1000000000
        Next j
>    Loop

>    fnow.Close
>    Set fnow = Nothing
>    Call Display_MyProgressBar(i, UBound(fp))
>    DoEvents
>  Next i
>  Unload UserForm2
>
>End Sub

【28220】Re:教えてください
お礼  たかし  - 05/8/31(水) 14:59 -

引用なし
パスワード
   まくいきました。
ありがとうございました。
まだまだ勉強不足ですね(^^;
がんばって勉強しますp(^^)q

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