• 締切済み

CSV形式でのエクセルなんですが

CSV形式でのエクセルなんですが 状況としては B列を商品名にしている。 エクスポートしたデータを貼り付け、それをほかのソフトに取り込むというような形です。 しかし、取り込むソフト側が商品名が全角20文字、半角40文字と決まっていることと、 エクスポートした時点では商品名がそれ以上の長さのものが多いため取り込めません。 そこで、字数制限などを設け 自動的に全角20文字、半角40文字以降は削除するというようなやり方はできないでしょうか?

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

対象となるシートに下記マクロを定義してください。 前提条件 (1)A列を全角20文字とする  A列中の半角は除去し、20文字以内に切り詰める (2)B列を半角40文字とする  B列中の全角は除去し、40文字以内に切り詰める Option Explicit Dim 中 As Boolean Private Sub Worksheet_Change(ByVal Target As Range) Dim 半, 全, 値 Dim 行 As Long, 列 As Long, 文 As String '処理中なら何もしない If 中 Then Exit Sub '列位置を求める 列 = Target.Column '1列目、2列目以外は何もしない If 列 <> 1 And 列 <> 2 Then Exit Sub '処理中にする 中 = True '行位置を求める 行 = Target.Row 'データ内容を取得する 値 = Target.Value '半角用の正規表現を設定する Set 半 = CreateObject("VBScript.RegExp") 半.Global = True 半.Pattern = "[\u0000-\u00FF\uFF61-\uFF9F]" '全角用の正規表現を設定する Set 全 = CreateObject("VBScript.RegExp") 全.Global = True 全.Pattern = "[^\u0000-\u00FF\uFF61-\uFF9F]" If IsArray(値) Then     '複数セルを処理している場合     Dim 横 As Long, 縦 As Long     '行方向のループ     For 縦 = 1 To UBound(値, 1)         '列方向のループ         For 横 = 1 To UBound(値, 2)             '行と列の位置を算出する             Dim X As Long, Y As Long             X = 列 + 横 - 1             Y = 行 + 縦 - 1             If X = 1 Then                 '1列目(全角側)の処理                 文 = 半.Replace(値(縦, 横), "")                 文 = Left(文, 20)                 Target.Worksheet.Cells(Y, X).Value = 文             ElseIf X = 2 Then                 '2列目(半角側)の処理                 文 = 全.Replace(値(縦, 横), "")                 文 = Left(文, 40)                 Target.Worksheet.Cells(Y, X).Value = 文             End If         Next     Next Else     '単一セルの処理     If 列 = 1 Then         '1列目(全角側)の処理         文 = 半.Replace(値, "")         文 = Left(文, 20)     Else      '2列目(半角側)の処理         文 = 全.Replace(値, "")         文 = Left(文, 40)     End If     Target.Value = 文 End If '処理中を解除する 中 = False End Sub 後、間違うといけないのですが、VBAの文字コードは 内部ではUniCodeなので、半角でも2バイトあります。 Lenbでは判定できませんので、注意してください。 (やるならKERNEL32にあるstrlenAを使う) 尚、マクロ登録前に記述してあるデータは処理できません。

回答No.3

相手先の仕様に合わせて項目の文字数を制限したデータを作ってお いて、それをcsvに吐き出すのが順当でしょう。「全角20文字、半角 40文字」ってのは要するにShift_JISで40バイトに違いないので、日 本語版Excelオリジナル関数のleftbで =leftb(B1,40) とするだけで トリミングできます。どこかの列か、もしかしたら別のシートで やって、そっちを吐き出して下さい。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

削除は、VBA使えばできます。 例えば、 どのタイミングで、どのセルで編集させるのが良いのでしょうか。 CSVファイルを編集する。(CSVファイルにて全角20文字状態。) セルB列へ取り込むとき編集する。(B列が全角20文字状態。) セルへ取り込んだ後C列へ編集する。(C列が全角20文字状態。) 別シートを追加してそこへ編集する。(別シートB列が全角20文字状態。)

  • violet430
  • ベストアンサー率36% (27472/75001)
回答No.1

自動削除は難しいと思いますが、マクロを作ったら一括削除はできると思いますよ 。

関連するQ&A

  • Excelである文字列を読み込むと日付にされてしまうのを回避したい

     CSVファイルに以下のような文字列(全角、半角どちらでも)が ありまして、これをエクセルで開くと、下のように日付として解釈 されてしまうのですが、ファイルを開く時点でこれを回避する方法 はありますでしょうか。保存もCSVにするため、形式を文字列に することは出来ません。 1-1-9 1-1-11 1-1-14 1-1-16  ↓ 2001/1/9 2001/1/11 2001/1/14 2001/1/16

  • ExcelのCSV形式について

    ExcelデータをCSV形式で保存するとき文字列はダブルコーテーション、数字列はそのままでカンマ区切りしたいです。確か123のCSV形式はそうなってたと思います。お手数ですが御回答、宜しくお願い致します。

  • csvとexcelについて

    csvファイルは一般的には半角の,でデータを区切りますが、 この方法だと、データに半角の,を使用することが出来ません。 たとえばデータを滅多に使用しない文字列@~(@と~が連続)等で区切り、 それをexcelのcsv形式で普通に開けるようにできるのでしょうか? これ以外にもなにか良い方法があれば教えてください。

  • 困っています!! ExcelをCSVファイルにしたあと。

    ご存知の方にとっては恥ずかしいくらいの質問かもしれませんが、どうか教えて下さい! win xp、Office2000を使用しています。 Excelでデータの編集が終わったあとに、ファイル形式をCSVで保存するよう言われ、入力後に「ファイルの名前を付けて保存」→ファイルの種類で「CSV」を選択して保存を致しました。 その際、ファイル名は「英小文字のみ.csv」にしています。 保存後、確認の為に再度そのファイルを開いたところ、 1、文字幅に合わせて大きさを変えた列幅が基準値に戻ってしまっている。 2、「文字列」を使用して、ゼロから始まる数字を打ち込んだ列がゼロを表示しない(01>1)、数字を全角で打ち込んでいるのに半角に戻ってしまう(15>15)。 という状態になってしまいます。 テキストエディタで確認したところ、きちんとカンマで区切られてはいるのですが、上記の2に関しては、半角になったままだったりと、入力した状態での表示ではありませんでした。 保存する際に、 「英小文字のみ.csv」はCSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。 というメッセージが出ます。 Excelに関しては、まったくといっていいほど初心者です。苦手で逃げていた自分が悪いのですが…。 今回CSVというファイル形式も初めて知りました…。 NETで調べたりしてみたのですが、どうしてもわかりません。 CSVにしたあとに、通常1のようになってしまうものなのでしょうか? また、入力したままの状態が表示されるようにするには、どうしたらよいのでしょうか? ご存知の方がいらっしゃいましたら、ぜひお知恵を貸してください! よろしくお願い致します!

  • 文字数の制限の確認

    エクセルで C列に商品名が入ってます。以前から文字数を気にせず商品名を決めていたのですが、販売ソフトの導入で文字数の制限を掛けることになりました。文字数は全角18文字以内です。半角もつかえます。現状は名称に半角・全角が混じっています。文字数制限内か否かを関数で調査し、全角18文字より長い場合は「ながいですよ」ってD列に記入したいのです。教えてください。

  • CSVをExcelで開いた時の文字形式について

    いつもお世話になっています。 CSVをExcelで開いた時の文字形式について教えてください。 「aaa.csv」というファイルの中には以下のような文字列が記載されています。 --------------------------------- "2014/3","000123" --------------------------------- これをExcelで開くと、 --------------------------------- Mar-14, 123 --------------------------------- こうなってしまいます。 Excel上で、セルの書式設定を直せば正しく表示されるのは分かっているのですが、 CSVをExcelで開いたときに、自動で  ・年月を「2014/03」と表示、  ・数字の前0を落ちないように表示 させるにはどうしたらよいのでしょうか? よろしくお願いします。

  • yahooショッピングでCSVから商品登録できない

    yahooショッピングでお店を運営しています。 ストアクリエイターProで、access2007からCSVファイルにエクスポートして、それをストアクリエイターの商品データアップロード画面にて、商品を一括登録しようと思っているのですが、 CSVファイルにエクスポートした段階で、文字列が途中でカットされてしまいます。 数千文字ほどの文字数が入力された項目がすべて途中までしかCSVになりません。 どうやったらaccess2007からCSVにエクスポートできるのでしょうか? ちなみに、windows7のパソコンで作業しており、 yahooにアップロードする際のCSVの形式は、 "あああ","いいい","ううう" といった、ダブルクォーテーションで括って、カンマで区切る、という形式となっています。 その形式のCSVに、数千文字のHTML文を放り込みたい、と、いうわけなのですが・・・ どうにもうまくいきません。 どうすればよいのか、わかる方いらっしゃいましたら、ぜひご教授いただけたら幸いです。 よろしくおねがいします。

  • エクセルのCSV形式で保存される内容

    エクセルで、数百文字の原稿を1セルに書くという作業を集団でやっています。だいたいひとつのシートに4~5ぐらいの原稿を書いてCSV形式で保存し、それをファイルサーバーにアップして他の人が閲覧するというスタイルです。 で、CSV形式ではセルの幅などの情報が飛んでしまうので、ファイルを開いた時点では文章はほとんど読めません。セルの幅を大きくオーバーしているからです。そこで、ある程度セルの幅を広げ、書式設定で「折り返して全体を表示する」にチェックを入れるという作業を毎回やっています。 ところが、ある人の原稿だけ、ファイルを開いた時点で自動的に文章が「折り返して全体を表示」されていることに気づきました。 これは、CSVにこうした書式情報を含ませることができるのか、あるいはエクセルの仕様で何らかの文章の要素を自動判定して折り返しを行っているのか、ということが考えられます。 できれば、全員をそれと同じ設定にしたいので、ご存知の方がおられましたらご教授願います。

  • xls.形式だと0があり、csv.形式だと消える

    0120111222 という数値がxls.形式では表示されるのですが、 csv.ファイルで保管すると先頭の0が消えてしまいます。 (メモ帳にこのファイルをドラッグして参照してもやはり先頭の0が消えている) →メモ帳にドラッグした際に先頭の0が残るようにするためには、どこを 直す必要がありますでしょうか?? <参考> xls.のセルの表示形式:文字列 csv.のセルの表示形式:標準

  • エクセル操作について

    エクセルにはA、B、Cなどの列がありますが、例えばAの列には全角文字(名前など)を、Bの列には半角数字(金額など)を打ちたい場合、その列に移動したら自動的に全角⇔半角になるようにするにはどのようにしたらいいか教えてください。 職場のノートPCは随分古くて、テンキーが付いてないので、列が変わるたびに「全角/半角」ボタンをいちいち押して全角・半角を切り替えています。 列が変わるたびに全角/半角が切り替わるやり方があるようなので、この際覚えようと思います。 ご教示のほど宜しくお願いします。

専門家に質問してみよう