Excel VBA質問箱 IV

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

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


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

【39290】固定長ファイルの作成 質問 06/6/21(水) 16:07 質問[未読]
【39292】Re:固定長ファイルの作成 ハト 06/6/21(水) 16:30 回答[未読]
【39297】Re:固定長ファイルの作成 質問 06/6/21(水) 17:11 回答[未読]
【39298】Re:固定長ファイルの作成 ハト 06/6/21(水) 17:20 発言[未読]
【39300】Re:固定長ファイルの作成 質問 06/6/21(水) 17:52 お礼[未読]
【39293】Re:固定長ファイルの作成 ichinose 06/6/21(水) 16:49 発言[未読]
【39299】Re:固定長ファイルの作成 質問 06/6/21(水) 17:51 お礼[未読]

【39290】固定長ファイルの作成
質問  質問  - 06/6/21(水) 16:07 -

引用なし
パスワード
   EXCELにて、CSVファイルを読み込み固定長ファイルに変換したいのですが
うまく行かないので教えて下さい。

色々捜して、変換する処理はできたのですが
下の例では前詰めになります。
後ろ詰めにするやり方を教えてください。

'*------------------------------------------------*
'* TXT形式変換サンプル            *
'*------------------------------------------------*
Type recFormat
  f1 As String * 2
  f2 As String * 2
  f3 As String * 2
 
End Type

Sub test()
  Dim rFormat As recFormat
  Dim fN   As Integer
  Dim myPath As String
  Dim mArray
  Dim i    As Long
  
  fN = FreeFile
  myPath = ThisWorkbook.Path
  Open myPath & "\AAAAAA.dat" For Binary As #fN
  
  mArray = Range("A1").CurrentRegion.Value
  
  For i = 1 To UBound(mArray, 1)
    rFormat.f1 = LEN(mArray(i,  1))
    rFormat.f2 = mArray(i,  2)
    rFormat.f3 = mArray(i,  3)
   
    Put #fN, , rFormat
    Put #fN, , vbCrLf
  Next
  Close #fN
End Sub

画面から
A1,A2,A3を
1,2,3と指定すると
1△2△3△「改行」となるが△1△2△3「改行」としたい。

【39292】Re:固定長ファイルの作成
回答  ハト  - 06/6/21(水) 16:30 -

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

▼質問 さん:
>EXCELにて、CSVファイルを読み込み固定長ファイルに変換したいのですが
>うまく行かないので教えて下さい。
>
>色々捜して、変換する処理はできたのですが
>下の例では前詰めになります。
>後ろ詰めにするやり方を教えてください。
>画面から
>A1,A2,A3を
>1,2,3と指定すると
>1△2△3△「改行」となるが△1△2△3「改行」としたい。


Format関数を使えばいいのでは?

>    rFormat.f2 = mArray(i,  2)
    rFormat.f2 = Format(Trim(mArray(i,  2)), "@@")

のように置き換えて試してみてください

【39293】Re:固定長ファイルの作成
発言  ichinose  - 06/6/21(水) 16:49 -

引用なし
パスワード
   ▼質問 さん:
こんにちは。
モードをバイナリにしても出来ますが、固定長と言うのなら、
ランダムにしたほうがわかりやすいですよ!!

'=============================
Type recFormat
  f1 As String * 2
  f2 As String * 2
  f3 As String * 2
  crlf As String * 2
End Type
'=====================
Sub test()
  Dim rFormat As recFormat
  Dim fN   As Integer
  Dim myPath As String
  Dim mArray
  Dim i    As Long
  fN = FreeFile
  myPath = ThisWorkbook.Path
  Open myPath & "\AAAAAA.dat" For Random As #fN Len = Len(rFormat)
  mArray = Range("A1").CurrentRegion.Value
  For i = 1 To UBound(mArray, 1)
    With rFormat
     RSet .f1 = Len(mArray(i, 1))
     RSet .f2 = mArray(i, 2)
     RSet .f3 = mArray(i, 3)
     .crlf = vbCrLf
     End With
    Put #fN, , rFormat
    Next
  Close #fN
End Sub

【39297】Re:固定長ファイルの作成
回答  質問  - 06/6/21(水) 17:11 -

引用なし
パスワード
   1    999G123456789 

A1=1
A2=999G
A3=123456789
と指定してみましたが、1個目のデータが中途半端になります。
何か誤りありますか?


'*------------------------------------------------*
'* TXT形式変換サンプル            *
'*------------------------------------------------*
Type recFormat
  f1 As String * 10
  f2 As String * 4
  f3 As String * 12

End Type

Sub test()
  Dim rFormat As recFormat
  Dim fN   As Integer
  Dim myPath As String
  Dim mArray
  Dim i   As Integer   '整数型

 
  fN = FreeFile
  myPath = ThisWorkbook.Path
  Open myPath & "\デガサンヨウ.dat" For Binary As #fN
 
  mArray = Range("A1").CurrentRegion.Value
 
  For i = 1 To UBound(mArray, 1)
    rFormat.f1 = Format(Trim(mArray(i, 1)), "@@")
    rFormat.f2 = Format(Trim(mArray(i, 2)), "@@")
    rFormat.f3 = Format(Trim(mArray(i, 3)), "@@")

    Put #fN, , rFormat
    Put #fN, , vbCrLf
  Next
  Close #fN
End Sub

【39298】Re:固定長ファイルの作成
発言  ハト  - 06/6/21(水) 17:20 -

引用なし
パスワード
   Format関数のヘルプを参照してください

"@@"

とフォーマット指定したのは例としての文字数が2桁だったからです
10桁なら@は10個
12桁なら@は12個
必要です


▼質問 さん:
> 1    999G123456789 
>
>A1=1
>A2=999G
>A3=123456789
>と指定してみましたが、1個目のデータが中途半端になります。
>何か誤りありますか?
>
>
>'*------------------------------------------------*
>'* TXT形式変換サンプル            *
>'*------------------------------------------------*
>Type recFormat
>  f1 As String * 10
>  f2 As String * 4
>  f3 As String * 12
>
>End Type
>
>Sub test()
>  Dim rFormat As recFormat
>  Dim fN   As Integer
>  Dim myPath As String
>  Dim mArray
>  Dim i   As Integer   '整数型
>
> 
>  fN = FreeFile
>  myPath = ThisWorkbook.Path
>  Open myPath & "\デガサンヨウ.dat" For Binary As #fN
> 
>  mArray = Range("A1").CurrentRegion.Value
> 
>  For i = 1 To UBound(mArray, 1)
>    rFormat.f1 = Format(Trim(mArray(i, 1)), "@@")
>    rFormat.f2 = Format(Trim(mArray(i, 2)), "@@")
>    rFormat.f3 = Format(Trim(mArray(i, 3)), "@@")
>
>    Put #fN, , rFormat
>    Put #fN, , vbCrLf
>  Next
>  Close #fN
>End Sub

【39299】Re:固定長ファイルの作成
お礼  質問  - 06/6/21(水) 17:51 -

引用なし
パスワード
   ▼ichinose さん:

うまい具合にいきました。
助かりました。

【39300】Re:固定長ファイルの作成
お礼  質問  - 06/6/21(水) 17:52 -

引用なし
パスワード
   そうでしたか
助かりました。

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