• ベストアンサー

エクセルで、テキストデータと数値データを加工したい

いつもお世話になります。 エクセルに、下記の表があります。 商品コード 商品名 空白行 幅 高 奥行 4901234567890 A商品 30 60 20 このデータを、 商品コード 商品名 空白行 幅 高 奥行 "4901234567890" "A商品" "" 30 60 20 という形にマクロで自動的に加工したいのです。 やりたいことをまとめると、 ・商品コード(8ケタ~13ケタの数値)と、商品名などのテキストデータには、データの頭と後ろにタブをつけたい。 ・サイズ情報など、3ケタ程度の数値はそのままにしたい。 ・空白行には、タブを2コ入れたい。 以上の3つを同時に行うマクロの作成は可能でしょうか。 以上宜しくお願い致します。

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

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

(テストデータ) 商品コード 商品名 空白行 幅 高 奥行 4901234567890 A商品1 30 60 20 4901234567891 A商品2 31 62 23 4901234567892 A商品3 32 64 26 4901234567893 A商品4 33 66 29 4901234567894 A商品5 34 68 32 4901234567895 A商品6 35 70 35 4901234567896 A商品7 36 72 38 (コード) Sub test01() Open "c:\My documents\aaa4.txt" For Output As #1 For i = 2 To 8 Write #1, Cells(i, "A") _ , Cells(i, "B"), Cells(i, "C") _ , Val(Cells(i, "D")), Val(Cells(i, "E")) _ , Val(Cells(i, "F")) Next i Close #1 End Sub ・ファイル名は適当にかえること。 ・Write#ステートメントは文字列はクオーテーションつき 数値はそのまま、カンマ区切りで出力してくれます。 D,R,F列はVAL()で数値化しないと、ダブルコーテーションつきになってしまいます。ここが今回のミソです。 その代わりA列は数値とも言えますが、そのままでダブルコーテーションつきになってくれますので、好都合でした。 ・最下行数のFor i = 2 To 8の8は、手を抜いています。 人間が表を見てその数字をセットしても良いし、End(xlUP)とか、Currentregion.Rows.Countや空白を聞く ことによって処理してください。 (結果) "4901234567890","A商品1",,30,60,20 "4901234567891","A商品2",,31,62,23 "4901234567892","A商品3",,32,64,26 "4901234567893","A商品4",,33,66,29 "4901234567894","A商品5",,34,68,32 "4901234567895","A商品6",,35,70,35 "4901234567896","A商品7",,36,72,38

7-samurai
質問者

お礼

いつもありがとうございます。 いただきました回答をもとに、問題解決しました。

その他の回答 (2)

noname#29107
noname#29107
回答No.3

セル上で何とか出来ないか考えてみましたが、思うような結果が得られませんでしたので、ファイルに出力させる形にしました。 #2と似た考え方です。 Sub test() Dim ix As Long, SvStr As String Open "test.txt" For Output As #1 SvStr = """商品コード""" & Chr(9) & """商品名""" & Chr(9) _ & """空白行""" & Chr(9) & """幅""" & Chr(9) & """高""" & Chr(9) & """奥行""" Print #1, SvStr ix = 2 Do   If Cells(ix, 2) = "" Then     Exit Do   End If   SvStr = """" & Cells(ix, 1) & """" & Chr(9) & _   """" & Cells(ix, 2) & """" & Chr(9) & _   """" & Cells(ix, 3) & """" & Chr(9) & _    Cells(ix, 4) & Chr(9) & _    Cells(ix, 5) & Chr(9) & _    Cells(ix, 6)    Print #1, SvStr   ix = ix + 1 Loop Close #1 End Sub

7-samurai
質問者

お礼

いつもお世話になります。 お礼を言うのが遅くなり、申し訳ございません。 #2と同じく試させていただきましたら、問題解決しました。 ありがとうございました。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

別にマクロを使用しなくても、別のシートに ="""&セル&""" とすれば、「"(ダブルクォーテーション)」を付加することは出来ます。

7-samurai
質問者

補足

実は、最初にこのアドバイスと全く同じ形で試してみたのですが、セルには、 "&セル&" と表記されてしまいました。 何が原因か分かりますでしょうか。

関連するQ&A

  • 数値の時ではなく、データがあるとき

    エクセルマクロについて質問です。 以前に教えていただいたコードですが、おそらく指定したセルがひとつのとき反応するコードだと思います。 これを、なおかつ、数値データがあるときに実行するにはどのように変更すればよいでしょうか? 数値データか空白しかありません。 お手数かけますがよろしくおねがいします。 With Target If .Count = 1 Then

  • エクセルのマクロでリストを加工する

    いつもお世話になります。 エクセルで同一の商品コードが複数存在するリストがあり、商品コード順に並べ替えています。違うデータは"導入店舗"のみです。 商品コード 商品名 導入店舗 100 A商品 a店 100 A商品 b店 100 A商品 c店 101 B商品 a店 101 B商品 d店 102 C商品 a店 102 C商品 e店 ・・・・ このリストを、 商品コード 商品名 導入店舗1 導入店舗2 導入店舗3 100 A商品 a店 b店 c店 101 B商品 a店 d店 102 C商品 a店 e店 ・・・・・・ という形に自動的に修正したいのですが、 可能でしょうか。 商品コードが同じデータの店舗名を、最初の行に切り取って横方向に貼り付けていくことが出来れば、後は店舗名が無くなったデータを並べ替えて削除すればよいだけだと思うので、そこのマクロだけお願いできますでしょうか。 以上宜しくお願い致します。

  • エクセル 数値を抜き取って並べたい

    エクセルでの質問です。お願いします。 1行目に次のようなデータが並んでいるとします。 51 64 44 37 65 78 34 45 53 66 6 18 26 8 11 30 2行目には77以上の数を抜き取って並べる、 3行目には51以上77未満の数を抜き取って並べる 4行目には36以上51未満の数を抜き取って並べる 5行目には36未満の数を抜き取って並べる というように自動的に数を抜きとって並べるようにしたいのです。 <このようにしたい> 78 51 64 65 53 66 44 37 45 34 6 18 26 8 11 30 <こうではない(--は空白セル)> -- -- -- -- -- 78 51 64 -- -- 65 -- -- -- 53 66 -- -- 44 37 -- -- -- 45 -- -- -- -- -- -- 34 -- -- -- 6 18 26 8 11 30 1行目のデータによって2行目以降を自動的に作成させるには、 各セルにどのような数式を入れれば良いのでしょうか。 マクロを作るとか複雑な方法はなるべく避けたいのですが。 よろしくお願いします。

  • エクセルの自動リンクで質問です。

    エクセル2000を使用しています。 あるフォルダの中に二つのファイルがあります。 一つは「商品リスト」もう一つは「納品書」という名前です。 商品リストには1行目には項目、2行目からA、B、C、Dの列に順に商品コード (5桁か6桁の数字のみ)、メーカー名、商品名、定価と入っています。 約1000件のデータがあります。 納品書には項目やその他があり実際の数値の入力欄は9行目から開始です。 B9に商品コードを入力すると自動でE9にメーカー名、H9に商品名、Y9に 定価が入るようにしたいのです。 ちなみにシート名は納品書ですが控えを作成する為、作業グループでもう一つのシートと合わせて入力しています。(もう一つのシート名は納品書控) あと、たまに商品リストに載っていない商品を入力する場合も有ります。 その場合は納品書の商品コードの欄は空白で、メーカー名、商品名、定価 のみを手入力します。 以上なんですがこの説明で解りにくければ補足させて頂きますので お申し付け下さい。

  • エクセルマクロでデータの検索と転記方法

    エクセル2000です。 sheetAの 10行~165行に表Aがあります。 途中に、空白行や小計行もかなりあります。 C列のコード(文字列、数値両方あります)をキーにして、SheetBの4行目から91行目までの表B(A列にコードがあります)のB列の数値を、sheetAの10行~170行のD列に転記したいのです。sheetAの表の小計行のC列は空白です。SheetBの表Bのコードは、sheetAの表Aのコードの一部しかありません。ですから、sheetAの表AのコードがSheetBの表Bになかったらそこは何も転記しません。 わかりづらい説明かと思いますが、マクロの記述をお教えいただければ幸いです。

  • エクセルで空白セルにコピーする方法を教えてください

    エクセルのデータ加工について質問です。 A1 60 A16 70 A19 50 というように、全部で1万行以上ふきそくにデータがあり、間の行は空白セルです。 それぞれ空白セル、A2からA15は60、A17からA18には70と上にある数値をコピーしたい時に、どのような数式、またはマクロを作成したらよいでしょうか。 宜しくお願い致します。

  • エクセルで質問です

    いつもすいませんが教えて下さい。 例えば A列の4行目~16行目に空白と数値がランダムにはいっています。 これをB列の2行目から空白を除いて、数値のみを順番に並び替えるには、マクロが必要なのでしょうか? 、必要ならマクロを教えてください。 できればマクロなしが希望ですが。 よろしくお願い致します。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • excel2000マクロ記述

    シート名JISEKIの中のF列には2行目から4桁のコードが入っています。 X列の2行目から数値データが入っています。 条件としてF列のコードがA310又はA505で、X列の数値がマイナスの場合は、 R列からW列の数値データを非表示にしたい。 これをマクロ化したいのですが、記述の仕方を教えてください。

  • ExcelのVLOOKUPについて

    B2に商品名を出したいと思っています。 A2の12桁の数値コードを使ってVLOOKUPにてD1~E4の表の商品名を参照することはできますでしょうか? A2に12桁はD2の13桁と違ってわざと一桁少なく入力して参照したいのです。

専門家に質問してみよう