• ベストアンサー

文字の列を揃えるには

お世話になります。 次のようなスペースを含むテキストデータがあります。 コード 名称  材料 個数 00001  座金   sus   3  00002  ボルト   sus  4   00003ナット SWRM  5 これをエクセルで取り込む様次のように揃えたいのです。 コード  名称   材料  個数 00001  座金   sus   3 00002  ボルト  sus   4 00003  ナット  SWRM   5 ワードでマクロを組んだりしましたが、スペースの数等に 規則性が全くないため、うまくいきません。 なにか良い方策・ソフトなどご存知でしたら ご教授いただきたくお願いいたします。

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

  • ベストアンサー
  • antai
  • ベストアンサー率38% (88/227)
回答No.4

エクセルへ取り込むのは、No.2さんの方法でやってますが、その前段階として、テキストを整理するには『置換』機能のついたエディタを使ってます。とはいっても、Windowsなら『メモ帳』で十分です。 私の場合はとりあえず、TAB切りテキストにします。 TABで区切られると列がそろうので、おかしなところが目に付きやすいからです。 今回の質問にあるようなものだと、こんな具合にやります。(便宜上、全角スペースを□で表記します) まず、スペースをTABに置換します。 TABは検索の項目に入力したくても入力できないので(方法あるのかな?)、テキスト上に1つ打ち込んで『切り取り』しておきます。 それができたら 検索する文字列に“□” 置換する文字列に“TAB”(メモ帳の場合TABをペーストすると“・”が入ると思います。うちはWindows2000です。) そこで『すべてを置換』を実行します。 このままだと、スペースの数だけTABが入ってしまいますので、次に 検索する文字列に“TABTAB” 置換する文字列に“TAB” これで『すべてを置換』しましょう。 しかし今回はこの処理を何度か繰り返しやる必要があります。メモ帳だと検索した文字列がなかった場合でもとくに何も表示されないようです。これでもかというくらい『すべてを置換』をクリックしておけばいいでしょう。 最後に00001の前にTABを一つ入れます。 00003ナットのような部分には一括処理でどうやったらいいか思いつかないので、最終的には手作業をとってます。 TABでそろった物なので、ある程度はわかりやすくなるかと思います。 あとは、TEXTファイルで保存してエクセルで開けばウィザードがはじまると思います。 一番左に空の列ができますが、消去してしまえばOKでしょう。 例にあげられている物で試しましたが、一応できましたのでよければお試しください。

ddkamp
質問者

お礼

恐縮ですがここでまとめてお礼申し上げます。結果としてはNo.1様とNo.4様の方法で様子を見ながら加工し、最後にNo.2様、No.3様の方法で取り込みました。回答いただいた皆様ありがとうございました。

その他の回答 (3)

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

実際のデータ数とか、「00003ナット SWRM  5」のようなデータがどれだけ混じっているか判りませんが (1)メモ帳やエディターでテキストデータのファイルを表示し、人間が見て、、「00003ナット」のようなものを見つけて、1スペースを入れてください。 (2)また先頭のスペースは除いてください。 (3)そして保存します。 (4)それをエクセルに読ませて(コピー貼りつけして) 書式-セル-配置-全体を折り返して表示するのチェックを外す。 A列を指定して、データ-区切り位置-カンマやタブ・・・を選び、スペースで分離すれば旨くセルに収まります。 VBAでも出来ますが、1000件程度なら、総体的には上記が作業時間が短いと思います。

  • imaruya
  • ベストアンサー率34% (63/181)
回答No.2

Excelでテキストファイルの読込でうまくいくと思います。その場合、区切り文字をスペースで管理して下さい。 ファイル→開く→ファイルの種類をテキストに テキストを読み込むウィザードが開かれます。 しかし、例題では >コード 名称  材料 個数 >00001  座金   sus   3 > 00002  ボルト   sus  4 >  00003ナット SWRM  5 となっており、00003の行が、00003とナットがスペースで区切られていませんので、ここにもスペースが無いとうまくいかないと思います。 テキスト読込の場合、区切り文字として、Tab、,(カンマ)、スペースなどが利用できるほか、区切り文字を指定することも出来ます。

  • nota55
  • ベストアンサー率37% (138/366)
回答No.1

CSVではき出してVBScriptと正規表現を使って ”1文字以上連続するスペース”をスペース1文字に 変換するってーのはどうでしょう。

関連するQ&A

  • エクセルの集計

    エクセルで作成した使用材料表の集計で困っています。 ボルト,ボルトのサイズ,個数 ナット,ナットのサイズ,個数 というように,1枚のシートに 使用した材料が記入してあるのですが… それを ボルトでサイズも同じものは何個,ナットは…という具合に同じ形式の複数のファイルをすべて 集計した一覧表を作成したいと思っています。 ピボットはどうかと…やってみたのですが… なかなかうまくいきません… 何か方法がありましたら教えてください。 おねがいします。

  • Excelの入力規則に2列のリスト

    添付画像のようなA列に都道府県コード、B列に都道府県名が入力されていて、D2セルに入力規則でプルダウンリストを使用したいです。 プルダウンリストにはAとB列を結合(添付はスペース区切りにしていますがなんでもいいです)させたものを表示し、選択後はB列の名称のみを反映させたいのですが、このような制御は可能でしょうか? できればマクロやVBAは使用しない方が望ましいです。 よろしくお願いします。

  • Excel2010でファイルが開かない

    いつもお世話になっております Excelのファイルが急に「・・・開いています(100%)」で、止まってしまって 進まなくなってしまいました。 今回のファイルはExcel2010で拡張子.xslm(マクロ)です 直前の作業としてはボタン(4つ)を作成して、そのうち二つは マクロの登録の名前が被ってしまいました 「macro7」と「macro7」という名称です。但し中身のコードは違います ※コードの表示でコピペして中身のコードのみ書き換えていたので  そうなってしまいました 閉じる時に「コンパイルエラー・・・」のエラー文が出ていましたが クリック連打して閉じてしまいました^^; その次から立ち上がらず・・ 分かる方いましたら、ご教示願えますでしょうか

  • 振動環境でのサラねじ

    以下、考え方を含めご教授のほどよろしくお願いします。 常時振動のある環境(鉄道沿線)で、サラねじを使用する時の緩みに対する設計検証(保証)を問われております。仕様の条件で振動試験を行えば良いと思いましたが、実際の5年,10年の保証は?という難題に悩んでおります。 なにかしらの事例などがあれば、それを参考に(可能であれば比較などにより)、結果を導き出せればと考えていますが、なにかご紹介いただけますでしょうか。あるいは、アドバイスなどいただけると非常に助かります。 (なお、ナベねじ+バネ座金であれば問題ないという前提条件があります。) 事例など参考に、次のような検証が出来ると良いかと考えていますが、いかがでしょうか。  ?振動が有る時/無い時のサラねじの緩みトルクを比較し、   差が無いことを示す。  ?振動が有る時、サラねじとナベねじ+バネ座金の比較により、   緩みについて差が無いことを示す。 構造のご説明ですが、ADC12にサラ加工があり、SUS304,t1.5のL字金具にねじ穴があり、ねじ固定しています。このL字金具に繰返しの荷重が加わります。 よろしくお願いします。 なかなか見る時間がとれなく、遅くなりました。 こんなにご回答をいただけるとは思いませんでした。 改めまして1件1件について検討させていただきます。 たくさんのご意見、アドバイスをいただき、ありがとうございます。 いろいろ協議しました結果、ご回答にもありましたサラねじの危険性を考え、この度は低頭ねじ+固着剤とすることとしました。 (ただ、スペース的に座金は入れられないのですが) 今回はまた勉強させていただきまして、今後に生かしていきたいと思います。

  • 古物商についてお詳しい方 買取額1万円以下の取引

    古物商についてお詳しい方教えてください 少量ですが非対面の通信買取をしております 買取額1万円以下の取引(主にパソコンパーツ)が多いのですが、1万円以下の取引は相手に「住民票の写し」を請求する必要はあるのでしょうか? 身分証明書のコピーでは代用が出来ないことは承知しています 下記箇所が通信買取でも該当するのかどうかを知りたく、お詳しい方お願い致します。 古物営業法施行規則 (確認等の義務を免除する古物等) 第十六条  法(古物営業法)第十五条第二項第一号 の国家公安委員会規則で定める金額は、一万円とする。 2  法第十五条第二項第一号 の国家公安委員会規則で定める古物は、次の各号に該当する古物とする。 一  自動二輪車及び原動機付自転車(これらの部分品(ねじ、ボルト、ナット、コードその他のはん用性の部分品を除く。)を含む。) 二  専ら家庭用コンピュータゲームに用いられるプログラムを記録した物

  • アクセス2000のVBAで変数に係数をつける方法

    アクセス2000を使っています。 一つのレコード内に、下記のように、「半角4文字の番号+スペース」という規則正しいデータがあります。  ↓↓ 11A11 10A11 22B11 09A22 しかし、このデータの数は不規則で、番号が1個のものもあれば、20個のものもあります。  ↓↓ 11A11 11A11 10A11 22B11 09A22 ・・・ このデータ内にある半角4文字の番号を全て別々のデータにしたいと思い、VBAのコードを使って、InStr関数でスペースを検索し、そのスペースの手前から4文字のデータをleft関数やMid関数で抽出し、それを変数data(x)に代入し、次に、InStr関数で前のスペースの位置から次のスペースを探して、また、そのスペースの手前から4文字のデータをMid関数で抽出し、それを変数data(x)に代入する。 要するに、data(x) の中の x を1から1づつ増加させていき、data(1),data(2),data(3)という変数を自動的に生成し、その生成された各変数にデータを代入していきたいのですが、どうすればいいのでしょうか?

  • エクセルで変化する行数に対応してコピーするマクロ

    エクセルワークブックAを検索して見つかった範囲をワークブックBのシートとセルを指定して転記するマクロ。 このようなマクロコードを教えてください。 ブックAのシート1に以下のような配置で文字と数値が入っています。 A列        B列      C列      D列      E列 あいう えお            10       aa      かかか     123          20       ss      ききき     456                        くくく      8910                        けけけ     234                        こここ     5678                        さささ     9123 -------------スペース-------------------------------- かきく けこ             10      aa      かかか     123           20      ss      ききき      456           30      dd      くくく      8910                        けけけ      234                        こここ      5678 -------------スペース-------------------------------- さしす せそ             10      aa      かかか      123           20      ss      ききき      456                        くくく       8910                        けけけ       234 -------------スペース-------------------------------- 上記の様にスペースとスペースの間を1グループとしてコピーしたいのですが、行数が変化します。 また列によって入力されてる行数も違います。 ブックBから操作するマクロでブックAのシート1の”あいう”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート1のA1に貼り付ける。 (あいう えお~9123まで) 続いてブックAのシート1の”かきく”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート2のA1に貼り付ける。 (かきく けこ~5678まで) ブックAのシート1の”さしす”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート3のA1に貼り付ける。 (さしす せそ~234まで) *ブックAのファイル名は固定ですが、ブックBは毎回違います。 マクロの実行はブックBから行います。 この様な条件でのマクロを教えてください。 行数変化に対応している部分に但し書きを付けて頂けると応用が利きますので有難いです。

  • 集計表をマクロで作成したい。

    月末在庫を社内のシステムから抽出するとエクセルには 次のように表示されます。  A列  B列 C列  D列  E列 F列   G列 1(空欄) AQ73 (空欄) 白桃  31A  埼玉県   3 2    AQ74     オレンジ21B  宮城県B 1 3    AQ74     オレンジ31A  埼玉県   1 4    AQ75     メロン 11A  北海道  8 5    AN92     ラムネ 31A  埼玉県  240 6    AP28     グレープMYN  埼玉工場 15 下一桁が「A」か「B」のものは倉庫の在庫で「A」は通常品 「B」は出荷止め品です。 この情報から次のような表を作成するマクロを作りたいと思っています。 倉庫コード・名称 11A 31A  MYN   A  21B   B 合計 商品コード 商品名称 北海道 埼玉県 埼玉工場 小計 宮城県B 小計 AQ73  白桃       3        3         3 AQ74  オレンジ     1        1  1    1 2 AQ75  メロン 8            8 8 AN92  ラムネ      240  240 240 AP28  グレープ         15 15 15  合 計      8   244  15   267 1     1 268 A列に商品コード・B列に商品名称・C列から「通常品と小計」「出荷止め品と小計」「合計」というような表をマクロで作りたいのです。 マクロの記録をしようとしても、どうやってピボットテーブルを設定 したらよいのか思いつかず、うまく行きません。 アドバイスいただけませんか?

  • 文字列と文字列をつなげるには

    下記のようにプログラムを作りました。 簡略しているのでわかりづらいと思いますが、 文字の配列と文字の配列を文字の配列に格納したいので、 下記のように$arrayに”.=”として文字列を加えて いますが、うまくいきません。 どのようにしたらいいのでしょうか? ご教授お願いいたします。 while($text[$i] != ""){ if($i==1){ $array[$j] = $feild[$j]; $array[$j] .= " "; $array[$j] .= substr($text[$i], $no, $pos); } }

    • ベストアンサー
    • PHP
  • EXCEL2003 VBA リストボックス

    お世話になります。 質問の内容についてですが、 現在VBAの勉強をしながらデータベースを組んでいます。 そこで、次のようなものを作っています。 Sheet1に於いて、     A    B     C 1  追番  名称   個数 2   1   りんご   1個 3   2   みかん  2個 4   3   なし    3個 5   4   なす    5個 というような表があるとします。 そして、VBAでフォームをつくり、TextBox1(名称入力用)、TextBox2(個数入力用)、ListBox1(すでに入力されているもの及び追加分のリスト用)、CommandButton1(入力された「名称」と「個数」をSheet1の表の一番下に追加)、CommandButton2(フォームを閉じる)という構成にしています。 また、Sheet1上にコマンドボタンを作っており、そのボタンを押すとフォームを呼出すようにしています。 流れとしては、既存の表に追加する場合、コマンドボタンを押してフォームを呼出し、テキストボックスに入力した内容をSheet1の一番下に追加する。また、フォーム上のリストボックスでも現在の表の内容を見る事ができる、というものです。 フォームでのコードは以下のようにしています。 Private Sub CommandButton1_Click() If TextBox1.Value = "" Then MsgBox "「名称」は必須項目です。" End If If TextBox2.Value = "" Then MsgBox "「個数」は必須項目です。" End If If TextBox2.Value = "0" Then MsgBox "「個数」に0は登録できません。" End If Lrow = Range("B2").CurrentRegion.Rows.Count Range("B" & Lrow + 1).Value = TextBox1.Value Range("C" & Lrow + 1).Value = TextBox2.Value End Sub Private Sub CommandButton2_Click() Unload UserForm1 End Sub Private Sub UserForm_Initialize() Dim b As Long Dim a() As String ReDim a(1 To 100) UserForm1.ListBox1.ColumnCount = 2 UserForm1.ListBox1.List = Worksheets(Sheet1).Range("B2:C").Value For i = 2 To 104 If Range("B" & i) = "" Then ListBox1.AddItem Range("B" & i).Value ListBox1.AddItem Range("c" & i).Value b = b + 1 a(b) = Range("C" & i).Value End If Next i End Sub このコードでSheet1上のコマンドボタンを押して実行しようとするとエラーが出てしまいます。 エラーの原因は何なのでしょうか? (なお、コマンドボタンのコードは「UserForm1.Show」のみです。 コード自体は本などを読みながら似たようなVBAを使った物を参考にしています。

専門家に質問してみよう