• 締切済み

エクセルで質問です。外部から文字と半角数字の混じったデータをコピーして

エクセルで質問です。外部から文字と半角数字の混じったデータをコピーしてセルに貼り付ける際、強制的に半角数字だけ入力される、という事はマクロ等を使用すれば可能でしょうか? 例えば、Bの列にはX180、X250、X20という風に、数字以外の文字が混じっています。 これを、セルに入力する際、強制的に180、250、20という風にすることは出来るでしょうか? 言い換えれば、入力後に数字以外の部分を削除するのではなく、入力する際に数字以外を受け付けなくしたいです。

みんなの回答

  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.5

Private Sub Worksheet_Change(ByVal Target As Range)   Dim R As Range   Dim MyStr As String   Dim i As Long   For Each R In Target     If R.Column = 4 And R.Row <> 1 And R.Text <> "" Then       MyStr = ""       For i = 1 To Len(R.Text)         If IsNumeric(Mid(R.Text, i, 1)) Then           MyStr = MyStr & Mid(R.Text, i, 1)         End If       Next i       If MyStr = "" Then         R.Value = ""       Else         R.Value = MyStr + 0       End If     End If   Next R End Sub とif文をひとつかませばよいです。 ※ 蛇足です。Ifの条件のR.Text <> ""は気まぐれで入れました。絶対必要というものではないですが、貼り付けするときに空欄が多い場合には飛ばしてくれるので少しだけ早くなるはずです。 なお、ifのあと3つの条件をandでつなぎましたが、ほんとはifを3重に使った方が少しだけ早くなります。そのとき、なるべくはじかれる数の多い条件を先においた方がより早くなります。

SleipnirQ
質問者

お礼

分かりやすいご説明を付け足していただき、ありがとうございました。 無事解決しました。 スピードに関しては全く気になりません。 おかげさまで効率よく仕事を進める事が出来ます。 本当にありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

>つまりD2~D65535以外は通常どおりのセルにしたいですが、 変更前: for each h in target.specialcells(xlcelltypeconstants, xltextvalues) 変更後: for each h in application.intersect(range("D2:D65536"), target).specialcells(xlcelltypeconstants, xltextvalues) みたいな。 #言わずもがなですが私の回答したマクロに組み込まないと,上手くありません。

SleipnirQ
質問者

お礼

大変迅速にご回答を頂き、ありがとうございました。 無事解決しました。 おかげさまで効率よく仕事を進める事が出来ます。 本当にありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>手間を省きながらいかに素早く数値だけが入力された状態にできるか、 こだわりはあくまでそこであって「入力前に」というのは別にどうでもよいなら,普通にマクロでやれば十分です。 手順: シート名タブを右クリック,コードの表示を選び 現れたシートに下記をコピー貼り付ける。 private sub worksheet_change(byval Target as excel.range)  dim h as range  dim i as long  dim res as string  on error resume next  application.enableevents = false '止めておかないと無限ループします  for each h in target.specialcells(xlcelltypeconstants, xltextvalues)  res = ""  for i = 1 to len(h)   if isnumeric(mid(h, i, 1)) then    res = res & mid(h, i, 1)   end if  next i  if res = "" then   h.clearcontents  else   h = val(res)  end if  next  application.enableevents = true end sub てなぐあい。

SleipnirQ
質問者

お礼

再びのご回答をありがとうございます。 早速試してみました。 そうです!こんなイメージです。 すみません、先に書けばよかったのですが、 対象としたいのはシート全体では無くて、D1以外のD列全てです。 つまりD2~D65535以外は通常どおりのセルにしたいですが、 そんな事は可能なのでしょうか? 度々すみません。

  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.2

貼り付けたときにそのようにしたいシートに次のように記述してみてください。(VBE起動後、「プロジェクト」から目的のシートをダブルクリックして、右のウィンドウに貼り付け) Private Sub Worksheet_Change(ByVal Target As Range)   Dim R As Range   Dim MyStr As String   Dim i As Long   For Each R In Target     MyStr = ""     For i = 1 To Len(R.Text)       If IsNumeric(Mid(R.Text, i, 1)) Then         MyStr = MyStr & Mid(R.Text, i, 1)       End If     Next i     If MyStr = "" Then       R.Value = ""     Else       R.Value = MyStr + 0     End If   Next R End Sub ただし、そのシートのどこにどんな入力をしても数字以外除外してしまいます。 特定のエリアだけやりたかったらRの条件を加えないといけないです。

SleipnirQ
質問者

お礼

詳しいご回答をありがとうございます。 早速試してみました。 そうです!こんなイメージです。 すみません、先に書けばよかったのですが、 対象としたいのはD1以外のD列全てです。 つまりD2~D65535以外は通常どおりのセルにしたいですが、 そんな事は可能なのでしょうか? 度々すみません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

いいえ。ご質問の直接の回答としては,エクセルで何か出来るのは「入力した後」からになります。 例えばマクロを使い,入力「された」際に完全自動でデータを直ちに逐一自動検査し,必要があれば自動で修正させる(修正後のデータを自動で再入力させる)といった具合ですね。 つまり >入力後に数字以外の部分を削除するのではなく、入力する際に数字以外を受け付けなくしたいです。 少なくとも検査のために,あなたがマクロのボタンを押してマクロをイチイチ起動してようやくチェックできる,といった手間やタイムラグは,自動化により省略できます。 そういった状況で「本当に入力させたくない」のか,本当に必要な段取りについて再度検討してみてください。

SleipnirQ
質問者

お礼

早々に詳しいご説明を頂き、ありがとうございます。 やはり無理ですか。。。 一旦文字混入の状態でセルへ入力した後で、 マクロを使用するのが無難な路線かもしれませんね。 手間を省きながらいかに素早く数値だけが入力された状態にできるか、 さらなる検討を進めてみようと思います。 ありがとうございました。

関連するQ&A

  • excelでの数字つきの文字の出し方

    エクセルで、一つ一つのセルに数字つきの文字を出したいです。 例えば、x1、x2、x3、x4、x5、、、、と言ったものを一つ一つのセルに出したいのです。 地道にx1、エンター、x2、エンター、、、、と入力していけば出ますが、1000個ぐらいあるとちょっとうざいです。 どうにかうまいこと、出せるようにできないものでしょうか。 念のため言っておきますが、出したいのはA1などのセルの番号ではなく、文字列です。  _____ | x1 |  ―――― | x2 |  ―――― | x3 |  ―――― 見たいな感じです。分かりますでしょうか??

  • エクセルで半角数字には数値と文字列がある?

    http://okwave.jp/qa/q6473596.html の質問を見て私も納得がいかず質問させていただきます。 たとえば、A1セルの書式を文字列に設定してから半角で数字を打ち込むと数字は数値でなく文字列としてセルに入ります。 この入力後、A1セルの書式を標準や数値に直してもそのセルの中の数字は左に寄ったままで文字列のままでいるようです。 (でもこれをセルの中でエンターキーを押したりすると数値になってしまいますが) 次にB1セルの書式を標準あるいは数値にして数字を打ち込むと、当然のことですが数字は数値としてセルに入ります。 この入力後、B1セルの書式を文字列に変えると数字は左に寄りますから一見文字列になったように見えます。 ところが上記のセルとこのセルをA1=B1で試してみるとFALSEが返ります。 逆に同じ数字を数値として打ち込んだセルと=で試すとTRUEが返ります。 これはA1とB1は同じ文字列としての数字ではないという証拠だと思います。 B1セルの書式を標準に戻すとまた数字は右よりにもどりますから、セルの中の数字は数値のままのようです。 つまり、半角の数字にはセルの書式にかかわらず文字列と数値の二つがあるということなのでしょうか? だとしたらこの二つはどうやって区別すればいいのでしょうか?

  • セルの入力制限(半角数字と半角空白限定)

    今更ですが、あるセルに 12345 56789 10111 と半角数字(文字列)と半角空白のみの入力制限をしたいと思います。 すみません、調べたんだけど以外に分かりませんでした。 できればコピペした際も常に半角数字&空白の条件が引き継げると 幸いです。

  • エクセルのセル内の数字を一発で(または、2発、3発)で半角にする方法

    エクセルで、 パソコン初心者が入力した半角や全角交じりの数字を、 簡単に、列ごと行ごとに半角(全角)数字に揃える方法をご存知の方おられましたら、教えてください。 元々のセルの書式設定は、文字列にしてあります。 (ゼロで始まる数字もあるため。)

  • 《エクセル2000》なぜか文字列になっている半角数字を、一気に数字扱いにするには?

    LEFT関数を使って切り取った半角数字が、文字列扱いになっています。(文字数字混在のセル…つまり文字列であるセルから切り取ったからでしょうか?) セルをダブルクリックし、エンターキーを押すと、こちらもなぜか数字扱いになるのですが(以上一連の作業はISNUMBER関数で確認)、データが数百件あるので、これを一気に行う方法はないでしょうか。 よろしくお願いします。

  • 1つのセルに入力する半角数字の数

    1つのセルに 20桁のの数字を入力したいのですが、15文字以上になると入力できません、 1.23457E+18 と表示されます。 これを、20桁の文字列でなく半角数字で入力したいのですが方法はありませんか。

  • Excelでセルに入っている数字又は文字のうしろに決められた数のスペースを入れるようにするには?

    エクセルでセルに入っている数字又は文字のうしろに決められた数のスペースを入れるようにすることって出来ますか? 例えば、 A1セルに 123456 という数字が入っていた場合 123456 の後ろに半角スペースを6コつけて 「123456_ _ _ _ _ _ 」 いう風に。 B1セルに 山田太郎 という文字が入っていた場合 山田太郎のあとに全角スペースを5コ入れて 「山田太郎_ _ _ _ _ 」 セルの数字を入力すると半角又は全角スペースを決められている数だけ自動で入力されるようにしたいのですが 何かいい方法はないでしょうか? accessでマクロ使ったほうが簡単かもしれないんですが、accessあまり分からないので・・。 説明がわかりにくくて申し訳ないんですがよろしくお願いします!!

  • EXCEL コピーの方法

    お世話になっております。 EXCEL2000です コピー方法なのですが、一番早い方法を教えてください 半角の数字たとえば「1」のセルの右下にカーソルを あわせて+?の形になったらドラックすると、 コピーされますが、 セルの書式設定を文字列にして全角で入力して、 (ちなみに実際のデータは一つのセルに 「111 品川」 というような感じ。) 同じようにオートフィルをしても、 コピーではなく、次の数字 112 品川 とうようになってしまうんです。 しかたがないので、普通にコピーしまくっていますが、 いい方法はありますか? ちなみに 書式設定は「文字列」が条件です。

  • Excel 全角数字が半角数字に変化してしまう

    Excel 2003 です。 文字列に設定してある、文字より充分大きいセルに 全角数字5を入力して (a)Enterキーを押すと (b)Enterキーを押してから矢印キーを押すと (a)又は(b)の場合 全角数字5が半角数字5に自動的に変化してしまうことがありました。 (「・・・ありました」ということで、いつもそうなるということではありませんが。) なにか設定を変えたこともありませんし、 どのようなときその現象がでるのかも把握できていません。 Q1. このような変化を防ぐ方法を教えてください。 Q2. 「おかしいな?」と思って再入力を繰り返しているとセルの左上の隅に 三角マークが表示されるようになりました。 この三角マークの意味と表示させない方法を教えてください。

  • エクセルで、半角文字列を抽出するには

    使用機種はXPでEXCEL2003です。 住所のデータ整理をしています。 地名の後の番地のみ半角数字(ハイフンも半角)で入力されており、その部分だけを別の列に移動させる作業です。 関数で、半角文字列だけを抽出することはできますか? left関数を使おうとも思いましたが、文字数がバラバラなので、難しいと思いました。 私は、一つひとつコピー→ペーストをするしか思いつかないほどの初心者です。 どうぞよろしくお願いいたします。

専門家に質問してみよう