Excelには、固定幅のテキストファイルをインポートする機能があり、ダイアログを表示して、列のどこにフィールドの開始と終了を配置するかを選択できます。
既存のスプレッドシートがあれば、固定幅のテキストファイルにエクスポートできる機能もありますか?
もしそうなら、どうすればこれにアクセスできますか?[名前を付けて保存]を使用して[テキストファイル]を選択しようとしましたが、タブ区切りでのみ保存されるようです。これは役に立ちません。
それが重要な場合、これはExcel 2003です。
Excelには、固定幅のテキストファイルをインポートする機能があり、ダイアログを表示して、列のどこにフィールドの開始と終了を配置するかを選択できます。
既存のスプレッドシートがあれば、固定幅のテキストファイルにエクスポートできる機能もありますか?
もしそうなら、どうすればこれにアクセスできますか?[名前を付けて保存]を使用して[テキストファイル]を選択しようとしましたが、タブ区切りでのみ保存されるようです。これは役に立ちません。
それが重要な場合、これはExcel 2003です。
回答:
ネイティブのExcel機能から最も近いものは、[ 名前を付けて保存]です。書式付きテキスト(スペース区切り)(* .PRN) 。自動的に幅を決定し、必要に応じてその幅にパディングするスペースを挿入します。
それ以上に、マクロや他のアドインが必要です。
Office Professionalをお持ちの場合は、AccessでExcelファイルを開き、Accessからエクスポートできます。Accessでは、エクスポートされたファイルの固定幅レイアウトを指定でき、それらの幅を指定するための非常にきめ細かい制御が可能になります。
うわー、私は自分でこの質問をするつもりでしたが、すでに質問されていました。すべてのExcelクリップボード出力はtabデフォルトで区切られています。これは、固定幅のフォントを持っているがタブ区切り文字のサポートが必ずしも必要ではない場合の「実際の」プレーンテキスト出力にとってはやっかいです。
とにかく、現在選択されている領域を単純な固定幅の列ASCIIテーブルとしてコピーする小さなExcelマクロを見つけて変更しました。
187712 201 37 0.18 2525 580 149 0.25 136829 137 43 0.31
これがマクロコードです。これを使用するには、Excel 2007以降を使用している場合は、Excelオプションの[開発]タブを有効にしてください。
Sub CopySelectionToClipboardAsText()
' requires a reference to "Windows Forms 2.0 Object Library"
' add it via Tools / References; if it does not appear in the list
' manually add it as the path C:\Windows\System32\FM20.dll
Dim r As Long, c As Long
Dim selectedrows As Integer, selectedcols As Integer
Dim arr
arr = ActiveSheet.UsedRange
selectedrows = UBound(arr, 1)
selectedcols = UBound(arr, 2)
Dim temp As Integer
Dim cellsize As Integer
cellsize = 0
For c = 1 To selectedcols
temp = Len(CStr(Cells(1, c)))
If temp > cellsize Then
cellsize = temp
End If
Next c
cellsize = cellsize + 1
Dim line As String
Dim output As String
For r = 1 To selectedrows
line = Space(selectedcols * cellsize)
For c = 1 To selectedcols
Mid(line, c * cellsize - cellsize + 1, cellsize) = Cells(r, c)
Next c
output = output + line + Chr(13) + Chr(10)
Next r
Dim MyData As MSForms.DataObject
Set MyData = New DataObject
MyData.SetText output
MyData.PutInClipboard
MsgBox "The current selection was formatted and copied to the clipboard"
End Sub
ジェフ・アトウッドの答えを拡張します。そこにコメントすることはできません。
彼のマクロを変更して、列幅をその列の最も広いセルに設定し、各列に独自の幅を持たせました。彼のマクロは、最初の行で最も幅の広いセルのみを見つけ、すべての列の幅をそれに設定しました。
Sub CopySelectionToClipboardAsText()
' requires a reference to "Windows Forms 2.0 Object Library"
' add it via Tools / References; if it does not appear in the list
' manually add it as the path C:\Windows\System32\FM20.dll
Dim r As Long, c As Long, linesize As Long
Dim selectedrows As Integer, selectedcols As Integer
Dim arr
arr = ActiveSheet.UsedRange
selectedrows = UBound(arr, 1)
selectedcols = UBound(arr, 2)
ReDim CellSizes(1 To selectedcols, 2) As Integer
Dim temp As Integer
Dim cellsize As Integer
linesize = 0
For c = 1 To selectedcols
cellsize = 0
For r = 1 To selectedrows
temp = Len(CStr(Cells(r, c)))
If temp > cellsize Then
cellsize = temp
End If
Next
CellSizes(c, 0) = cellsize + 1
CellSizes(c, 1) = linesize
linesize = linesize + cellsize + 1
Next c
Dim line As String
Dim output As String
For r = 1 To selectedrows
line = Space(linesize)
For c = 1 To selectedcols
Mid(line, CellSizes(c, 1) + 1, CellSizes(c, 0)) = Cells(r, c)
Next c
output = output + line + Chr(13) + Chr(10)
Next r
Dim MyData As MSForms.DataObject
Set MyData = New DataObject
MyData.SetText output
MyData.PutInClipboard
MsgBox "The current selection was formatted and copied to the clipboard"
End Sub
これは私にとってキラーです。いくつかのオプションもあります。
http://www.sensefulsolutions.com/2010/10/format-text-as-table.html
すぐにアクセスできるAccess:https : //support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps with this Excelを使用するよりもはるかに簡単かつ迅速に管理できました。私の場合、それはテーブルの変換でした。