|    | 
     A列先頭行は列見出しとします 
 
Option Explicit 
 
Public Sub Sample() 
 
  Dim i As Long 
  Dim lngRows As Long 
  Dim rngList As Range 
  Dim vntData As Variant 
  Dim vntFilename As Variant 
  Dim dfn As Integer 
  Dim strFilter As String 
  Dim strBuff As String 
  Dim strProm As String 
 
  'フィルタ文字列を作成 
  strFilter = "Text File (*.txt),*.txt" 
 
  '出力ファイル名を取得 
  vntFilename = Application.GetSaveAsFilename(, strFilter) 
  If VarType(vntFilename) = vbBoolean Then 
    strProm = "マクロがキャンセルされました" 
    GoTo Wayout 
  End If 
 
  '◆Listの先頭セル位置を基準とする(先頭列の列見出しのセル位置) 
  Set rngList = ActiveSheet.Range("A1") 
 
  With rngList 
    '行数の取得 
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row 
    If lngRows <= 0 Then 
      strProm = "データが有りません" 
      GoTo Wayout 
    End If 
    '列データを配列に取得 
    vntData = .Offset(1).Resize(lngRows + 1).Value 
  End With 
   
  '出力ファイルをOpen 
  dfn = FreeFile 
  Open vntFilename For Output As dfn 
   
  'Key列に就いて繰り返し 
  For i = 1 To lngRows 
    strBuff = Right(String(4, "0") & vntData(i, 1), 4) 
    Print #dfn, "項番" & i & AdjustData(strBuff, 6, "R") 
  Next i 
   
  Close #dfn 
   
  strProm = "処理が完了しました" 
    
Wayout: 
 
  Set rngList = Nothing 
    
  MsgBox strProm, vbInformation 
      
End Sub 
 
Private Function AdjustData(ByVal strData As String, _ 
              ByVal lngLength As Long, _ 
              Optional ByVal strAlign As String = "L") As String 
 
'  Dataをフィールド長に調整 
 
'  lngLengthはフィールドの長さを半角何文字分(バイト単位)で 
'  strDataはデータを文字列の型で 
'  strAlignは、右詰なら"R"、"r"で、 左詰なら"L"、"l"で(ディフォルトは"L") 
 
  Dim strSpace As String 
  Dim strTmp As String 
  Dim i As Long 
  Dim lngCount As Long 
 
  If strData = "" Then 
    AdjustData = Space(lngLength) 
    Exit Function 
  End If 
 
  If Len(strData) > lngLength Then 
    strData = Left(strData, lngLength) 
  End If 
  '文字列を Unicode からシステムの既定のコード ページに変換します 
  strTmp = StrConv(strData, vbFromUnicode) 
 
  'フィールド長よりDataが長い場合、2バイト文字の処理を行います 
  i = 1 
  Do Until LenB(strTmp) <= lngLength 
    strTmp = StrConv(Left(strData, Len(strData) - i), vbFromUnicode) 
    i = i + 1 
  Loop 
 
  'Spaceで調整する必要がある場合 
  If lngLength > LenB(strTmp) Then 
    '長さ調整用のスペースを作成します 
    strSpace = StrConv(String$(lngLength, " "), vbFromUnicode) 
    '中央揃えの場合 
    If strAlign = "C" Or strAlign = "c" Then 
      'Spaceを文字列で置き換えます 
      MidB(strSpace, ((lngLength - LenB(strTmp)) \ 2) + 1) = strTmp 
    Else 
      'Dataをフィールド長に調整します 
      If strAlign = "R" Or strAlign = "r" Then 
        'Spaceを文字列で置き換えます 
        MidB(strSpace, lngLength - LenB(strTmp) + 1) = strTmp 
      Else 
        'Spaceを文字列で置き換えます 
        MidB(strSpace, 1) = strTmp 
      End If 
    End If 
    'システムの既定のコード ページを使って文字列を Unicode に変換します 
    AdjustData = StrConv(strSpace, vbUnicode) 
  Else 
    'システムの既定のコード ページを使って文字列を Unicode に変換します 
    AdjustData = StrConv(strTmp, vbUnicode) 
  End If 
 
 
End Function 
 
 | 
     
    
   |