• 締切済み

Excel VBA 固定長のテキストの作成方法

Excel2003のデータを固定長のテキストに書き出す方法について 質問させてください。 ■仕様: A列・・・文字列データ(1バイト文字 最大4桁、それ未満のデータあり) B列・・・数字データ(1バイト文字 最大6桁、それ未満のデータあり) A列の値が最大桁数に満たない場合、右側に空白を挿入し4桁とする B列の値が最大桁数に満たない場合、左側にゼロを挿入し6桁とする A・B列合わせて、1件10バイトで改行するテキストデータを作成したい と考えています。 ■補足: B列の下2桁は小数点以下であり、Excelの書式設定で"ユーザー定義" の"種類"に"0000.00"と設定されている。テキスト生成時には、この小数 点を消したい(123.45 → 012345) ■その他仕様 ・Excelのデータ件数は毎回変化 ・上記の内容をCドライブ中の特定のフォルダに書き込み ・テキストデータのファイル名は固定 3冊ほど本を見てみたのですが、固定長出力の記述が無く、また ネット上のお手本を元に作成したものは、A・B間に無用のブラ ンクが挿入されたり、桁数がバラつき、10バイト固定長になら ずに困っております。 ■追記 上記、”補足”の箇所は、計算用の列を挿入して、そこで100倍した 値を使ってはどうかと思うのですが、より洗練された方法があれば知 りたいと思いました。

みんなの回答

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

Excelの書式設定はValueプロパティで取得すれば、値で取得できるので関係ないですよ。 Dim dataA As Variant Dim dataB As Variant Dim A As String * 4 Dim B As String * 6 dataA = Worksheets("Sheet1").Cells(1, 1).Value dataB = Worksheets("Sheet1").Cells(1, 2).Value A = dataA B = Format(dataB * 100, "000000") とりあえず、A列のデータに関しては固定長の文字列型に突っ込むだけではだめなのでしょうか。 >そこで100倍した 値を使ってはどうかと思うのですが 小数点の桁位置が決まっているのであればその方法でもよいと思いますよ。

griffin-aki
質問者

お礼

御礼が遅くなり申し訳ありません。 お蔭様で大変助かりました。

関連するQ&A

  • 数値の抽出方法がわからず困っています

    テキストデータの処理がうまくいかず困っています。 ----------------------------------------------- a:0.001 b:-11.111 c:50.5 d:-12.345 ----------------------------------------------- といった文字列から ----------------------------------------------- 0.001 -11.111 50.5 -12.345 ----------------------------------------------- といった形で符号や小数点を含めて抽出したいのですが どのようにするのが良いのでしょうか。 各値は、それぞれの値がスペースによって区切られています。 また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。 split や substr を用いてやろうとしているのですが、 なかなか思ったとおりの形で出力できません…

  • 固定長データのテキストファイルのスペースについて

    固定長データのテキストファイルをExcelで読み込むと、スペース部分が前詰めされてしまいます。 スペースもそのままカラムとして読み込む方法はありませんでしょうか。 例えば次のような固定長データがあるとします; No.  項目名   タイプ   桁数 1    コード    文字    6 2    状態    文字    10 テキストファイルで開くと下記のような表示です(以下、便宜上スペースを”_”で表します); data011________1 data02_________1 data03____1_____ これをExcelにて固定長フィールドのデータとして読み込む際、 フィールドの区切り位置として6カラム目と16カラム目に矢印を置き 全てのフィールドを文字列として読みこむとExcelでは下記のように表示されます;       A列   B列    1行目  data01 1________1 2行目  data02 1 3行目  data03 1 ここで、B2セルとB3セルがそれぞれ _________1 ____1_____ とスペースを保持したままの形で読み込む方法はありませんでしょうか。 手動でもVBでもかまいません。ご教示頂ければ幸いです。

  • Excel VBAでの固定長のテキストファイル読み込み

    こんにちは。 会社にてEXCELをちょろっとかじっていると言う理由から、あまり触ったことのないVBAを使って固定長のテキストファイルを読み込むプログラムを作るように言われてしまって困っています。 利用している固定長のテキストファイル中の各行の桁数は同一でなく、行によってまちまち。しかし、各行の始めの3ケタはヘッダになっています。 例) ABCTTTTTTTTTTTTTTTTKKKKKOOOOOOPPPPPPPPWWWWWWWWWWWWWWWWWWWWWWWSS XYZLLLLL <ABCとXYZがヘッダ。同じ文字が固定長で決まったあるデータ項目と考えて下さい> もちろん、1ファイルにはもっとたくさんの行がずらずら並んでおります。 中身自体は、ある伝票の内容なのですが、1ファイル中には複数の伝票内容(ヘッダABC~XYZで1伝票)が記されております。 なので、ヘッダで言うとABC,DEF,GHI...XYZとなってまたABC~が続く。 しかも、ある伝票では途中存在しないヘッダがあったり、同じヘッダが何回も繰り返されたりするものもあります。 (ABC,DEF,DEF,DEF,GHI..やABC,GHI,JKL..など) これをどうやってEXCELの各セルに貼り付けるかがどう頑張っても分かりません。どうすればよいのでしょうか?

  • EXCELのマクロにて、ゼロパティングをしたい

    A列とB列に3バイトと4バイトの数字がずらっとはいっています。 A列の数値はA2からB列の数値はB2から入っています。、 A列には1ケタから3ケタまでの数が入り、桁数が足りない場合はゼロパティングします。 B列同じです。 やりたいことは、A列とB列の値を縦のセルごとに最終レコードまで結合していきたいのです。 これをVBAでやりたいのです。 入力値によって0の個数が変わる場合の処理がどうしても思い浮かびません。 どなたか知恵を貸していただきたいです。 過去ログに似たようなものがあったのですが、なかなか考えられませんでした。

  • エクセルVBAでテキストファイルにして保存する方法

    エクセル「Sheet2」のA列、C列、D列にそれぞれ100個の文字列が入力されています。 B列は空欄になっています。 (作業内容) C列とD列のデータを結合して、B列に入力 A1~B100のデータを1つのテキストファイルとして保存する。 ファイル名はその都度指定する。 よろしくお願い申し上げます。

  • Excel 2000 四捨五入について教えて下さい

    セルの書式設定で 表示形式        通貨 小数点以下の桁数    0 としてます。 そうすると、四捨五入されてしまうのですが、止める方法はありますか。 やりたいこと・・・・・・  A列         B列 整数部       小数点以下 A列に小数混じりの数字を記入するとB列に少数以下の文字を返す。 A列は整数部のみを表示する。 A列に25.5を記述すると A | B 25 | 5 B列関数  =IF(A6="","",IF((A6-INT(A6))*10=0,"",(A6-INT(A6))*10)) A列には関数は入れてません。 すみません。宜しくお願いします。 ついでに・・・・・ 623,154,241.5 上の値を桁区切りでセル別に表示させることは可能でしょうか?? A | B | C | D | 623 | 154 | 241 | 5 | の様にさせたい。 無理なら良いです。 なるべくVBAを使用したくありません。 最悪は使用してみようと思いますが。 宜しくお願いします。

  • Excelを利用したグラフについて質問

    Windows Vista Excel2007です。 下記に示すように、A列には年月日を、B列には値を入力し、 グラフを作成しました。(添付図を参照ください) A列         B列 2013/5/15    15096.03 2013/5/24    14612.45 2013/5/31    13774.54 2013/6/20    13014.58 2013/7/19    14589.91 2013/8/22    13365.17 2013/9/11    14425.07 2013/9/20    14742.42 質問 1.グラフの式のXに2013/5/15(=41409:シリアル)を代入すると  15096.03にはならず、1.05712E+21となります。  小数点以下の桁数を、5,8,9,10,20,25桁のそれぞれの式に  2013/5/15(=41409:シリアル)を代入しましたが、それらしい値にはなりません。  どのように対処すれば宜しいのでしょうか。 2.仮に、小数点以下の桁数が問題だとした場合、何桁が最適なのかを一発で分かる  方法がありますか。 ちなみに、式はy=-2E-07x^6+0.0473x^5-4903.7x^4+3E+08x^3-8E+12x^2+1E+17x-1E+21 です。

  • エクセルで、、、桁数を自分で決めたい

    例えば、 A    B 279   235 455   145 448   361 288   288 379   216 っと、ある場合 A/BをC列に実行したら桁数がばらばらになって表示されました 288/288も1ではなくて、1.000と表示したいのですが 小数点三桁まで表示する命令はどうすればいいのですか?

  • Excelで値と値をくっつけたり、+1する方法を教えてください

    添付した画像のような表を作成しています(添付用に加工しています) A列とB列は、手入力します。  A列:2桁の半角英数  B列:3桁の半角英数 C列に入るものは、  11(固定された数字)+A列の値+B列の値+001から始まる連番 ですので、3行目でいうとC3に「11 A1 B22 001」(分かりやすく半角スペースを空けています)      4行目ですとC4に「11C3D44002」 という値をA列、B列に入力をしたら、C列に上記のような10桁の値を 自動で入力されるしたいのですが、関数などで行うことでできないものかと思い質問しました。 現状は、C列も手入力で行っておりまして、  ・最初の2桁は、固定数値  ・A列とB列の値を使用している  ・最後の3桁は001からの連番を使用している    ※終わり3桁は無条件で001~の連番にしている もし関数などで対応可能でありましたら、どのような数式にすればよいのか ご教示頂けるとありがたく思います。 よろしくお願い致します。

  • EXCELで数値範囲を指定してカテゴライズ

    Excel2010です。 フィールドA(数値型)には、小数含む様々な数値があり、 フィールドB(文字列)にカテゴライズしたいと思います。 フィールドAの値から「1未満」「1以上5未満」「10以上30未満」「30以上」 というように分類して、フィールドBに「1未満」等の値を付与します。 どの様に行えばよいでしょうか。