[リストへもどる]
一括表示

投稿時間:2003/07/20(Sun) 23:15
投稿者名:Taka
Eメール:
URL :
タイトル:
スペース区切りで読み込み
お昼はお世話になりました。ありがとうございました。
ファイルを読み込みMSFlexGridに表示させたのはいい
のですが、セルひとつにデータをひとつ入力していきたい
のですがMid(anything,1,7)などを使ってもなかなかうま
くいきません。VB素人なもので時間をかけても出来ませ
んでした。

コードはこのような感じです。1行ずつ読み込み、MSFlexGrid
に表示させるものです。それから処理が遅いんですが、1行ずつ
読み込むやり方で処理速度を早く出来ないでしょうか?↓
Private Sub File_Open_Click()
    Dim mytext As String
    Dim count As Integer
    Dim CC As String
    Dim Data As String
    Dim num As Integer
    Dim k As Integer, j As Integer
    
  
    With Dialog
        .DialogTitle = "ポイントマンDRMのファイルを開く"
        On Error GoTo BACK
        .ShowOpen
        FileName = .FileName
    End With
    count = 1
    Open FileName For Input As #1
    Do While Not EOF(1)
         Line Input #1, mytext
         With CellGrid
            If .Row < .Rows Then
                .Row = count
                .Text = mytext
                count = count + 1
            Else
                .Rows = .Rows + 1
                .Row = count
                .Text = mytext
                count = count + 1
            End If
        End With
    Loop
    Close #1
    MsgBox "ファイルを読み込みました"
BACK:
End Sub

投稿時間:2003/07/21(Mon) 04:35
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: スペース区切りで読み込み
> お昼はお世話になりました。ありがとうございました。
> ファイルを読み込みMSFlexGridに表示させたのはいい
> のですが、セルひとつにデータをひとつ入力していきたい
> のですがMid(anything,1,7)などを使ってもなかなかうま
> くいきません。VB素人なもので時間をかけても出来ませ
> んでした。

Clipプロパティを使いましょう。
ただし、Clipプロパティのセルの区切り文字はタブなので、
スペースをタブに変換してやる必要があります。

Do While Not EOF(1)
     Line Input #1, mytext
     With CellGrid
        If .Row < .Rows Then
           .Row = count
      .RowSel = count
           .Col = 1
           .ColSel = .Cols - 1
           .Clip = Replace(mytext, " ", vbTab)
           count = count + 1
        Else
            .Rows = .Rows + 1
            .Row = count
            .RowSel = count
            .Col = 1
            .ColSel = .Cols - 1
            .Clip = Replace(mytext, " ", vbTab)
            count = count + 1
        End If
    End With
Loop

> コードはこのような感じです。1行ずつ読み込み、MSFlexGrid
> に表示させるものです。それから処理が遅いんですが、1行ずつ
> 読み込むやり方で処理速度を早く出来ないでしょうか?↓

処理速度を早くしたいなら、Redrawプロパティを使うといいかも。

With CellGrid
   .Redraw = False
   処理
   .Redraw = True
End With

投稿時間:2003/07/21(Mon) 10:19
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^2: スペース区切りで読み込み
丁寧に教えて頂きありがとうございました。
参考にさせて頂き頑張りたいと思います。

実際に実行してみましたが、前のセルが空欄になって
しまっているんですが、空欄になっているセルを検索
して次のデータで上書きしていくことは可能でしょうか?

投稿時間:2003/07/21(Mon) 11:38
投稿者名:ちょっと寄り道
Eメール:
URL :
タイトル:
Re^3: スペース区切りで読み込み
> 次のデータで上書きしていくことは可能でしょうか?

自分でも、どうしたら出来るかを考えて見る必要がありますよ。
何でも聞いていたのでは進歩しない。

先の「ユーザー...」とかはどうなったのですか?
そのままになっていますが?

投稿時間:2003/07/21(Mon) 12:14
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^4: スペース区切りで読み込み
> 自分でも、どうしたら出来るかを考えて見る必要がありますよ。
> 何でも聞いていたのでは進歩しない。

そうなんですが、何日も考えて出来ないので聞いてみました。
ご忠告ありがとうございました。

投稿時間:2003/07/21(Mon) 15:09
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^5: スペース区切りで読み込み
スペース区切りのファイルを読み込み、スペース部分の空白部分に
次のセルのデータを入力し、その次も空白なら次のデータというよ
うにしたいのですが・・・コードは下記のような感じです。

Private Sub Command2_Click()
    Dim objFileSystem As Object
    Dim objFile As Object
    Dim lngLength As Long
    Dim count As Integer
    Dim FileName As String
    Dim Data As String

    With Dialog                                          'データファイルを開く
        .DialogTitle = "ファイルを開く"
        On Error GoTo BACK
        .ShowOpen
        FileName = .FileName
    End With
    
    count = 1
    
    Set objFileSystem = CreateObject("Scripting.FileSystemObject")   '進行状況表示
    Set objFile = objFileSystem.GetFile(FileName)
    
    ProgressBar1.Max = objFile.Size
    
    ProgressBar1.Visible = True
    
    Open FileName For Input As #1
    Do While Not EOF(1)
     Line Input #1, Data
     With CellGrid
    
     lngLength = lngLength + LenB(StrConv(Data, vbFromUnicode)) + Len(vbNewLine)
     ProgressBar1.Value = lngLength
    
     .Redraw = False
        If .Row > .Rows Then
           .Row = count
           .RowSel = count
           .Col = 1
           .ColSel = .Cols - 1
           Data = Trim(Data)                       '空白除去
                      
           .Clip = Replace(Data, " ", vbTab)
           count = count + 1
        Else
            .Rows = .Rows + 1
            
            .Col = 0                               '行番号の表示の追加
            .Row = count
            .text = count
            .CellAlignment = flexAlignCenterCenter
            
            .Row = count
            .RowSel = count
            .Col = 1
            .ColSel = .Cols - 1
            Data = Trim(Data)                      '空白除去

            .Clip = Replace(Data, " ", vbTab)
            count = count + 1
        End If
        
    End With
    Loop

    Close #1
    
    Set objFileSystem = Nothing
    Set objFile = Nothing
    
    CellGrid.Redraw = True
    
    ProgressBar1.Visible = False
  
    MsgBox "ファイルを読み込みました"
BACK:
End Sub

何でも聞いてしまうのはよくないのですが、2日間自分なり
に考えたのですがどうしてもわからないので、どうしたら
空白のセルに次の列のセルを代入してデータが整理できるか
ご教授下さい。お願いします。

投稿時間:2003/07/21(Mon) 17:16
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^6: スペース区切りで読み込み
ファイルの読み込みに関しての問題は解決しました。
協力して下さった皆様どうもありがとうございました。
これからもよろしくお願いします。

投稿時間:2003/07/21(Mon) 20:48
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: スペース区切りで読み込み
> 丁寧に教えて頂きありがとうございました。
> 参考にさせて頂き頑張りたいと思います。
>
> 実際に実行してみましたが、前のセルが空欄になって
> しまっているんですが、空欄になっているセルを検索
> して次のデータで上書きしていくことは可能でしょうか?

もし、1列目がすべて空欄になっているということなら
.Row = count
.RowSel = count
.Col = 1
.ColSel = .Cols - 1
.Clip = Replace(mytext, " ", vbTab)
の部分を
.Row = count
.RowSel = count
.Col = 0
.ColSel = .Cols - 1
.Clip = Replace(mytext, " ", vbTab)
にしてみてください。

そうではなくてデータにスペースが2つ続いてる場合に詰めて
表示したいのなら
.Clip = Replace(Replace(mytext, "  ", " "), " ", vbTab)
としましょう。

投稿時間:2003/07/21(Mon) 13:57
投稿者名:NEU(ノイ)
Eメール:
URL :
タイトル:
Re: スペース区切りで読み込み
回答ではありません、参考にしてください。

Dim strTemp() As String
Dim count As Long
Dim i As Long

count = 0
Do While Not EOF(1)
    Line Input #1, mytext
    count = count + 1
    Debug.Print count & ") ";
    strTemp = Split(mytest, " ")
    Debug.Print UBound(strTemp) + 1 & " / ";
    For i = 0 To UBound(strTemp)
        Debug.Print "[" & strTemp(i) & "]";
    Next i
    Debug.Print ""
Loop

投稿時間:2003/07/21(Mon) 14:50
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^2: スペース区切りで読み込み
ありがとうございます。参考にして頑張ります!!