• ベストアンサー

excelで1セル毎のバイト数指定できますか?

excelのデータをテキスト(スペース区切り)形式で保存した時、セル1マスを10バイト右詰め(半角10文字以下はスペース)にしたいのですがどのようにすればよいでしょうか?どなたかアドバイスお願いします。 例)  ______ |7.50│ ----- ↓ テキスト形式に変換 □□□□□□7.50 ※□1個を半角スペースと考えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • takibo
  • ベストアンサー率57% (116/200)
回答No.4

No.2 takibo です。こちらはAccess2002での確認となります。また、テーブル作成の手順は省かせていただきます。 エクスポートの手順は下記サイトを参考にしてください(ここで手順を説明するより分かりやすいかと思います) http://www.tsware.jp/study/vol7/table60_45.htm 上記の方法で行うと各フィールドが左詰になって出力されます。 もし質問のように右詰の結果をご希望であればクエリを作成する必要があります。(フィールドの数が多いと少々面倒になりますが) 【例】テーブル名『明細』として以下のようなテーブルがあるとします。 商品名  単価  数量 AAAAA   50.5   30 BBBBB   150   40 明細テーブルの数値フィールドを右詰固定長(8桁)として設定する場合 (1)クエリの画面で「ウィザードを使用してクエリを作成する」を実行 (2)[テーブル/クエリ(T)]で[テーブル:明細]を選択、全てのフィールドを選択し([>>]を押す)  [次へ] → [次へ] → [完了] とすすむ(途中の設定は必要ありません) (3)出来上がった『明細 クエリ』をデザインビューで開く (4)フィールド欄を以下のように入力・・・必要な桁数分の @ を入力します 単価 → Format([単価],"@@@@@@@@") 数量 → Format([数量],"@@@@@@@@")   ※入力するとフィールド名が自動で「式1」「式2」と変換されます    任意のフィールド名に設定するには       デザインビューで目的のフィールドにカーソルを置き、右クリック → プロパティ(P) で [標題] の部分に項目名を入力 あとはテーブルのエクスポートと同じ手順でクエリをエクスポートすれば完成です。 フィールドに入力する関数として以下のような方法もあります Right(String(11," ") & [単価],11) こちらだと桁数を数字で入力できるのでわかりやすいかもしれません。 (説明が長くなって見づらくなってしまいました。すみません)

wagner0322
質問者

お礼

ありがとうございました、アクセスはまだ使ったことがないので、これから勉強ということになりますが能力向上のためにがんばってみようと思います。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 固定長ということですね。 それで、全て半角でないと、通常、テキスト出力でしたら、文字化けの原因になりますから、以下は、全角文字は除外しています。 '<標準モジュール> Sub 固定長出力()   Dim Fname, Fno As Integer, myR As Long, myC As Long, k As Integer   Dim buf As String, i As Long, j As Long   'ファイル名は、ブック名を使用   Fname = Mid$(ThisWorkbook.Name, 1, _   InStr(ThisWorkbook.Name, ".") - 1) & ".txt"   '範囲は、使用範囲。Withの次は、変更可能   With ActiveSheet.UsedRange    myR = .Rows.Count    myC = .Columns.Count   End With   Fno = FreeFile()   Open Fname For Output As #Fno   For i = 1 To myR    For j = 1 To myC      k = LenB(StrConv(Cells(i, j).Value, vbFromUnicode))      '半角・全角チェック。もし全角があれば、文字は出力しない      If Len(Cells(i, j).Value) = k Then       buf = buf & Space(10 - k) & Cells(i, j).Value       Else       buf = buf & Space(10)      End If    Next j    Print #Fno, buf    buf = ""   Next i   Close #Fno   MsgBox "終了!" End Sub

wagner0322
質問者

お礼

ご回答ありがとうございます。しかし、まだまだVBAやマクロに関しては勉強不足のためわからないところが多いのでイマイチわかりませんが試してみようと思います。

  • takibo
  • ベストアンサー率57% (116/200)
回答No.2

Accessだととても簡単に変換できるんですが。 以下のようなフリーソフトがあります。 私は試してないので(すみません)使い勝手の感じ方はそれぞれだと思いますが どちらもVBAによるものでシステムへの影響等はないはずですので試してみてはいかがでしょう。 「固定長テキストファイル読み込み/書き出し.xls」 http://www.vector.co.jp/soft/win95/business/se129041.html 「可変長テキスト←→固定長テキスト変換コマンド」 http://www.vector.co.jp/soft/dos/util/se176624.html

wagner0322
質問者

お礼

ご返答ありがとうございます。 さっそくご紹介いただいたフリーソフトを使ってみようと思います。 あと、後々の勉強のためにMicrosoft Accessで上記の操作を実行する場合の手順を簡単にでいいので教えていただけませんでしょうか? お暇がある時でよいのでよろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

エクセルの操作や設定ではできないでしょう。 (1)できたとして、その後何につかうのでしょう。あまり使い道がないようにおもう。 エクセルに読みこますと、普通では、元の木阿弥になる。 (2)スペースを先頭部に確保するのは、スペース以外の区切り文字(標準は”)が必要と思うので、そうするとスペース区切りでなくなるというジレンマあり 一応考えた案を上げます。 エクセルVBAで標準モジュールに貼り付け実行します。 Sub test01() d = Range("A65536").End(xlUp).Row Close #1 Open "aaa2.prn" For Output As #1 For i = 1 To d s = "" For j = 1 To 3 n = Cells(i, j) If IsNumeric(n) Then l = Len(n) m = Mid(" ", 1, 10 - l) & n MsgBox "=" & m & "=" s = s & m Else s = s & " " & n End If Next j MsgBox "=" & s & "=" Print #1, s Next i Close #1 End Sub テスト結果は 12 2333 ab 234 345678 sd のようなものです。(メモ帳などで、MS明朝などPつき以外で表示のこと) シートのデータが3列の例です。 MSGBOXの行は確認のため入れたが、削除して可。

wagner0322
質問者

お礼

ご返答ありがとうございます。 VBAの事はまだわからない点が多いですが試してみようとおもいます。

関連するQ&A