Excel VBA質問箱 IV

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

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


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

【32309】貼り付けた文字列の数列への変換方法 VBA勉強中 05/12/12(月) 17:01 質問[未読]
【32329】Re:貼り付けた文字列の数列への変換方法 kobasan 05/12/12(月) 20:41 回答[未読]
【32348】Re:貼り付けた文字列の数列への変換方法 VBA勉強中 05/12/13(火) 9:40 お礼[未読]
【32336】Re:貼り付けた文字列の数列への変換方法 kobasan 05/12/12(月) 23:19 発言[未読]

【32309】貼り付けた文字列の数列への変換方法
質問  VBA勉強中  - 05/12/12(月) 17:01 -

引用なし
パスワード
   2005,08,01,00,00,00,smp ,  , 6, ,C11 ,  4.081, 381700,  40927, 980.31, 25.3, 394526,  42302, 256.21,00
2005,08,01,00,10,00,smp ,  , 6, ,C11 ,  2.038, 136675,  19110, 980.31, 25.3, 141268,  19752, 531.74,00

というようなファイルがあり、これをエクセルに取り込み指定シートに貼り付けていき,
後で平均値を計算したいのです。
このホームページで調べて改良して下のようなものでファイルを読み込んでいます。

Dim Num As Integer
Dim Rw As Long
Dim LineDat As String
Dim LeftStr As String
Const Cols = 20 ' <--- 取得列数
Dim D, E
Num = FreeFile
Application.ScreenUpdating = False
'Cells.Delete
Range("a:a").Resize(, Cols).NumberFormatLocal = "@"
Open \test.dat For Input As #Num
Do Until EOF(Num)
  Line Input #Num, LineDat
  D = Split(LineDat, ",")
  lineend = LineDat
  E = Split(lineend, Chr(13))
  ReDim Preserve D(Cols)
  ReDim Preserve E(Cols)

  If Not LeftStr = D(0) Then
    Sheets("a").Select
    Worksheets("a").Range("A1").Resize(, UBound(D)).Offset(Rw).Value = D
'    Worksheets("a").Range("A1").Resize(, UBound(D)).NumberFormatLocal = "@"

    LeftStr = D(0)
    LeftStr2 = E(0)
    Rw = Rw + 1
  End If
  If Not LeftStr = E(0) Then
    LeftStr = Chr(13)
   End If
Loop
Close #Num
Application.ScreenUpdating = True

これで読み込むと貼り付けられた数値が文字列になってしまい、平均値計算できません。
何か貼り付ける時の方法でよい方法はないでしょうか?

【32329】Re:貼り付けた文字列の数列への変換方法
回答  kobasan  - 05/12/12(月) 20:41 -

引用なし
パスワード
   ▼VBA勉強中 さん 今晩は。

これでどうですか。

>
>Dim Num As Integer
>Dim Rw As Long
>Dim LineDat As String
>Dim LeftStr As String
>Const Cols = 20 ' <--- 取得列数
>Dim D, E
>Num = FreeFile
>Application.ScreenUpdating = False
>'Cells.Delete

'ここを修正してください
Range("a:a").Resize(, Cols).NumberFormatLocal = "G/標準"
Open "\test.dat" For Input As #Num  '<--"\test.dat"としてください

>Do Until EOF(Num)
>  Line Input #Num, LineDat
>  D = Split(LineDat, ",")
>  lineend = LineDat
>  E = Split(lineend, Chr(13))
>  ReDim Preserve D(Cols)
>  ReDim Preserve E(Cols)
>
>  If Not LeftStr = D(0) Then
>    Sheets("a").Select
>    Worksheets("a").Range("A1").Resize(, UBound(D)).Offset(Rw).Value = D
> '    Worksheets("a").Range("A1").Resize(, UBound(D)).NumberFormatLocal = "G/標準"  '<---としてください
>
>    LeftStr = D(0)
>    LeftStr2 = E(0)
>    Rw = Rw + 1
>  End If
>  If Not LeftStr = E(0) Then
>    LeftStr = Chr(13)
>   End If
>Loop
>Close #Num
'------追加してください
Dim vnt
vnt = ActiveSheet.UsedRange.Value
ActiveSheet.UsedRange.Value = vnt

>Application.ScreenUpdating = True
>
>これで読み込むと貼り付けられた数値が文字列になってしまい、平均値計算できません。
>何か貼り付ける時の方法でよい方法はないでしょうか?

【32336】Re:貼り付けた文字列の数列への変換方法
発言  kobasan  - 05/12/12(月) 23:19 -

引用なし
パスワード
   今晩は。

コードを整理してみました。これも参考にしてください。

Dim Num As Integer
Dim Rw As Long
Dim LineDat
Dim D
Const Cols = 20 ' <--- 取得列数

Num = FreeFile
Application.ScreenUpdating = False
'Cells.ClearContents
'Range("a:a").Resize(, Cols).NumberFormatLocal = "G/標準"
Open "\test.dat" For Input As #Num
Do Until EOF(Num)
  Line Input #Num, LineDat
  D = Split(LineDat, ",")
  Worksheets("a").Range("A1").Resize(, UBound(D)).Offset(Rw).Value = D
  Rw = Rw + 1
Loop
Close #Num

D = Worksheets("a").UsedRange.Value
Worksheets("a").UsedRange.Value = D

Application.ScreenUpdating = True

【32348】Re:貼り付けた文字列の数列への変換方法
お礼  VBA勉強中  - 05/12/13(火) 9:40 -

引用なし
パスワード
   ▼kobasan さん:
おはようございます。早速の回答ありがとうございます。
>Range("a:a").Resize(, Cols).NumberFormatLocal = "G/標準"
>Open "\test.dat" For Input As #Num  '<--"\test.dat"としてください
@ではなくG/標準にすれば数値になるのですね。

>Dim vnt
>vnt = ActiveSheet.UsedRange.Value
>ActiveSheet.UsedRange.Value = vnt

この部分の書き方がわからず苦労していました。ありがとうございました。
ちゃんと計算できるようになりました。

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