【先着1,000名様!】1,000円分をプレゼント!

住所の表を整理しているのですが、数字が全角になっているので、半角に変換したいと思い、ASC関数を使ったのですが、カタカナまで半角になってしまいました。
カタカナは全角で、数字だけ半角にしたいのですが。。
数字だけを半角にする方法ってないんでしょうか?

A 回答 (5件)

問題は解決済みと思いますが、数字のみ全角→半角にするマクロです。

ご参考まで。

Sub MacroR()
Dim idx As Integer, trg As Range
 Set trg = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)
 For idx = 0 To 9
  trg.Replace What:=Right(StrConv(str(idx), vbWide), 1), _
   Replacement:=Right(str(idx), 1)
 Next
End Sub

マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。
    • good
    • 16
この回答へのお礼

ご回答ありがとうございます!

表の修正にはまだ手をつけておりませんでしたので、
早速試してみました。

“マクロアレルギー”で、パッと見ただけで一瞬くらくらしてひるんでしまいましたが、
ご説明のとおりに冷静にひとつずつ作業していったら、
無事、「数字のみを半角にする」という課題が解決しました!

すごいですね~~!!
おぉ~~~~みるみるうちに変換されていくでわありませんかっ!!
カンドーしましたっ!!!(涙)

エクセルっておもしろいですね。もっと勉強したいと思いました。

ホントにホントに、ありがとうございました。

お礼日時:2006/09/21 21:18

こんばんは。



お聞きになる前に、ここのカテゴリを検索しても良かったと思います。
同じような質問は、何度もありますね。いろんな人が回答しています。

以下の私の場合は、以下のようなものがあります。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2301108
(http://okwave.jp/kotaeru.php3?q=2301108)

SpecialCells で、セルを取得すればよいと思いますが、少し手直ししました。あまりきちんと調べてはいませんが、大丈夫のような気がします。

'標準モジュール

Sub HenkanMcr()
  Dim r As Range
  Dim c As Range
  Const MPATTERN As String = "([0-9]+)[^0-9]*"
  On Error Resume Next
  Set r = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
  On Error GoTo 0
  If Not r Is Nothing Then
  For Each c In r.Cells
   If StrConv(c.Value, vbNarrow) Like "*#*" Then
    c.Value = myRegExp2(c.Value, MPATTERN)
   End If
  Next c
  End If
  Set r = Nothing
End Sub

Private Function myRegExp2(str As Variant, STRPATTERN As String)
 Dim Matches As Object 'MatchCollection
 Dim Match As Object 'as Match
 Dim buf As String
 Dim buf2 As String
 Dim rep As String
 
 With CreateObject("VBScript.RegExp")
  .Pattern = STRPATTERN
  .IgnoreCase = False
  .Global = True
  If .test(str) Then
   Set Matches = .Execute(str)
   buf2 = str
   For Each Match In Matches
    rep = .Replace(Match.Value, "$1")
    buf = StrConv(rep, vbNarrow)
    buf2 = Replace(buf2, rep, buf)
   Next
   myRegExp2 = buf2
   Set Matches = Nothing
  Else
   myRegExp2 = str
  End If
 End With

End Function
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

せっかく詳細なお答えをいただいたのにもかかわらず、
私の知識ではよく理解することができませんでした。。
ごめんなさい。もっと勉強します。

お礼日時:2006/09/21 21:11

有料ですが下記のサイトのアドインを使うのが便利ですね。


仕事を加速する!Excel魔法のボタンコレクション」1,580円
http://www.freeformat.co.jp/AddInIndex.htm
    • good
    • 0
この回答へのお礼

へぇ~こんなのがあるんですね。
大変興味深いです。
まず、「仕事を加速する!」というキャッチコピーにやられました(笑)。かなりそそられますね!

使ったことありますか?大活躍ですか?
どれくらいエクセルやる人が使った方がいいのでしょう??

最近、データ入力・グラフ作成など、エクセルを使う機会が多くなってきましたので、
やっとエクセルのことを勉強し始めたしだいです。
と、言っても「こんなことできないだろうか」という疑問が生じたときに、調べてやってみるというようなカンジですが。

私が知らないだけで、世の中にはいろいろ便利なものがあるんだろうに、なかなか手を出せずじまいです。

お礼日時:2006/09/21 18:11

今回だけの対処でしたら


置換で処理してしまっては如何でしょう?
10回やれば済みます。(~_~;)
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
今回は置換処理で対応することにしました。
なんとかなりそうです。

お礼日時:2006/09/21 17:58

単純に、文字列の置換で出来ませんか?



シートの左上をクリックして、シート全体を選択しておいて、編集→置換から、全角数字を半角数字にするだけです。
0から9まで10回繰り返す程度でしたら、苦にもならないでしょう。
    • good
    • 0
この回答へのお礼

あ、なるほど。
そのテがありましたか!
10回くらいだったら、そんなに頻繁に起こることでもありませんし、
それほど大変ではないですね。
その方法で対処してみます。
ご回答ありがとうございました。助かりました。

お礼日時:2006/09/21 17:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel。英数字カタカナ混ぜこぜのセルで、カタカナのみ全角にする方法は?

とっても基本的なことで困ってます。
Excelの1つのセルの中に、英数字カタカナがごちゃ混ぜのデータが入っています。英数字は全角の場合もあれば半角の場合もありです。片仮名もしかり。
そのデータを、英数字のみ半角にし、カタカナは全角に修正したいんです。
間違ってASC関数を使ったら、カタカナまで半角になっちゃった・・・・。
本日午後一のミーティングにそろえなきゃいけない資料なんです!
誰かーーー!
助けてーーーー!!

Aベストアンサー

あー大変。
それでは。まず、お使いになっているPCにはWordが入っていますか?
Wordが入っていると前提して、ご説明します。
まず、ASC関数を使って、英数字カタカタを半角にしてしまいます。その後
カタカナを全角にしたいセルをすべて範囲指定をします。そして、コピー。そして、
ワードに貼り付けてください。(そのとき1行あけて2行目に貼り付けてください。)
そして、1行目にカーソルを置いて「ツール」→「オプション」→[文章校正]タブ
右下の「詳細設定」ボタンをクリック。その後、「カタカナ設定」を「全角に統一」を選んで、「OK」ボタンをクリック。そうすると、オプション(ダイアログボックス)に戻りますので、「再チェック」または「チェック実行」ボタンを押します。(バージョンによって呼び方が違います。左下のボタンです)
そうすると、半角カタカナの部分に、波線がつきます。そして、1行目にカーソルを置いて
再度「ツール」→「文章校正」をクリックし、「修正」ボタンで直して行きます。そして、修正が終わったら、また、範囲指定をして、コピーをして、Excelに貼り付けてください。
関数だとちょっときびしいかも?この後で考えてみます。とりあえず、試してください。あとは、マクロのわかる方にお任せします。

あー大変。
それでは。まず、お使いになっているPCにはWordが入っていますか?
Wordが入っていると前提して、ご説明します。
まず、ASC関数を使って、英数字カタカタを半角にしてしまいます。その後
カタカナを全角にしたいセルをすべて範囲指定をします。そして、コピー。そして、
ワードに貼り付けてください。(そのとき1行あけて2行目に貼り付けてください。)
そして、1行目にカーソルを置いて「ツール」→「オプション」→[文章校正]タブ
右下の「詳細設定」ボタンをクリック。その後、「カタカナ設定...続きを読む

Qエクセル 全角英文字のみを半角に!

全角英カナを半角にする関数「asc」は知っているのですが、
英文字のみを半角にする方法はありますでしょうか?

※英文字とカタカナが同セル内に存在しているのですが、カタカナは全角のままで、英文字のみを半角にする事を希望しています。

よろしくお願い致します。

Aベストアンサー

ユーザ定義関数を作って利用する方法です。
Alt+F11でVBAの画面を開きます。
「挿入」>「標準モジュール」を選択します。左側の画面にModule1というのができます。
右側の画面に、以下を貼り付けます。

Function ASC_A(str As String) As String
  Dim i As Integer
  For i = 1 To Len(str)
    If Mid(str, i, 1) Like "[a-zA-Z]" Then
      Mid(str, i, 1) = StrConv(Mid(str, i, 1), vbNarrow)
    End If
  Next
  ASC_A = str
End Function

Excelに戻って、任意のセルで =Asc_A(A1) とすると、A1の全角アルファベットだけを半角にします。

Qエクセルで英数のみを半角に変換するマクロ

エクセル2003を使っています
エクセルで英数のみを半角に変換するマクロの作り方を教えてください。
予め複数のセルを選択しておいて、それらに含まれる文字列の英数のみを半角に(カタカナは全角のまま)変換したいのです。
以前他のサイトで同様の機能のユーザー関数の作り方は見つけたのですが、マクロにする方法がわかりません。
よろしくお願いします。

Aベストアンサー

こんにちは。

まず、#3 のコードでバグ修正します。TextCompare ではマズかったです...

    SourceText = Replace$(SourceText, _
               M.Value, _
               StrConv(M.Value, ConvMode), _
               Compare:=vbTextCompare)
     ↓
    SourceText = Replace$(SourceText, _
               M.Value, _
               StrConv(M.Value, ConvMode))

次に...

> 英数、日本語、半角全角・大文字小文字が入り乱れていて、同じ曲でも
> 表記方法がバラバラなため、その表記を統一したいのです。

このような質問の核心部分は最初に提示すべきでしたね...

> それらに含まれる文字列の英数のみを半角に(カタカナは全角のまま)
> 変換したいのです。

目的が提示されると、これは手段の一部でしかなくなってしまいました。
何をしたいのか? を最初に明示しないと不要に補足+再回答を繰り返すこと
になります。

で実現方法ですが...

Sub Sample()
  ' 半角化できるものは全て半角化する+アルファベットは一度大文字へ
  Call RegStrConvRng(Selection, ".*", vbNarrow + vbUpperCase)
  ’半角カナは全て全角へ
  Call RegStrConvRng(Selection, "[\uff66-\uff9f]+", vbWide)
  ' 半角アルファベットの頭のみ大文字へ
  Call RegStrConvRng(Selection, "[A-z']+", vbProperCase)
End Sub

これで次のように変換されます。一応希望どおりですか?

i can’t speak english.
 ↓
I Can't Speak English.

ちなみに、頭のみ大文字は、単語の頭を大文字、それに続く文字を小文字
です。つまり、

this is a pen. → This Is A Pen.

です。これを This is a pen. にしたいというなら、正規表現のパターンの
設定次第で可能ですが、今回のご質問趣旨からはずれますからご自分で
お調べ下さい。

こんにちは。

まず、#3 のコードでバグ修正します。TextCompare ではマズかったです...

    SourceText = Replace$(SourceText, _
               M.Value, _
               StrConv(M.Value, ConvMode), _
               Compare:=vbTextCompare)
     ↓
    SourceText = Replace$(SourceText, _
               M.Value, _
               StrConv(M.Value, ConvMode))

次に...

> 英数、日本語...続きを読む

QExcel : 正規表現を利用して2文字の全角数字を半角数字に変換するには?

アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。
2文字の全角数字を半角数字に変換します。
かつ、3文字以上の全角数字は変換しません。

下記のようにコードを書いたのですが、希望通りに動作してくれません。
どこが悪いのでしょうか?
ご指摘いただければ幸いです。
よろしくお願いいたします。

※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に
 チェックは入れています。


Sub sample()
  Dim str
  Dim strPattern As String
  Dim strReplacement As String
  
  str = ActiveCell.Value
  str = myRegExp(str, "([^0123456789])([0123456789]{2})([^0123456789])", "$1$2$3")
  ActiveCell.Value = str
End Sub

Private Function myRegExp(str, strPattern, strReplacement)
  Dim objRegExp As RegExp
  Dim test As String
  Set objRegExp = New RegExp

  With objRegExp
    .Pattern = strPattern
    .IgnoreCase = False
    .Global = True
    myRegExp = .Replace(str, "$1" & StrConv("$2", vbNarrow) & "$3")
  End With

  Set objRegExp = Nothing
End Function

アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。
2文字の全角数字を半角数字に変換します。
かつ、3文字以上の全角数字は変換しません。

下記のようにコードを書いたのですが、希望通りに動作してくれません。
どこが悪いのでしょうか?
ご指摘いただければ幸いです。
よろしくお願いいたします。

※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に
 チェックは入れています。


Sub sample()
  Dim str
  Dim strPa...続きを読む

Aベストアンサー

こんばんは。

.Global =True にしてあるので、それをそのままにして作ってみました。

一応、CreateObject("VBScript.RegExp") で、オートメーション・オブジェクトを作っていますが、必要に応じて直してください。私は、$2 だけを取り出してみました。関数は、重複を避けるために、myRegExp2としました。

それから、myRegExp関数の strReplacement の引数は、生きていませんね。


Sub sample2()
  Dim str As String
  Dim strPattern As String
  str = ActiveCell.Value
  str = myRegExp2(str, "([^0-9])([0-9]{2})([^0-9])")
  ActiveCell.Value = str
End Sub

Private Function myRegExp2(str, strPattern)
 Dim Matches As Object 'MatchCollection
 Dim Match As Object 'as Match
 Dim buf As String
 Dim buf2 As String
 
 With CreateObject("VBScript.RegExp")
  .Pattern = strPattern
  .IgnoreCase = False
  .Global = True
  If .Test(str) Then
   Set Matches = .Execute(str)
   buf2 = str
   For Each Match In Matches
    buf = StrConv(.Replace(Match.Value, "$2"), vbNarrow)
    buf2 = Replace(buf2, Match.Value, .Replace(Match.Value, "$1" & buf & "$3"))
   Next
   myRegExp2 = buf2
   Set Matches = Nothing
  Else
   myRegExp2 = str
  End If
 End With

End Function
 

こんばんは。

.Global =True にしてあるので、それをそのままにして作ってみました。

一応、CreateObject("VBScript.RegExp") で、オートメーション・オブジェクトを作っていますが、必要に応じて直してください。私は、$2 だけを取り出してみました。関数は、重複を避けるために、myRegExp2としました。

それから、myRegExp関数の strReplacement の引数は、生きていませんね。


Sub sample2()
  Dim str As String
  Dim strPattern As String
  str = ActiveCell.Value
  str = myR...続きを読む

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q【エクセル】半角数字→全角数字

エクセルですでに半角で入力されている数字を全角数字に一括変換する方法はありますか?

(1)住所録で半角入力されている番地等の数字のみをを全角に変換する方法
(2)電話番号など、全て数字で入力しているセルを一括で全角に変換する方法

Aベストアンサー

両方とも「=JIS(文字列)」でできます。

参考:日経PC21 / 全角を半角に変換する
http://pc.nikkeibp.co.jp/pc21/tech/excel36/28/index.shtml

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルのセル内に全角数字を入力したいのにエンターを押すと自動で半角になってしまいます。

お世話になっております。
エクセルのセルに「202」と全角で入力したいのですが、全角で入力してもエンターを押すと勝手に半角数字に切り替わってしまいます。
全角のまま入力する方法はありますか?
アドバイス宜しくお願い致します。

Aベストアンサー

単純に全角にしたいのなら
セルの書式設定→表示形式(分類<文字列>)

でなります。

Qエクセルでひらがな・漢字はそのままでカタカナを全角・英数字を半角にする方法

エクセル2000を使っています。

会社で住所録作成を引き継ぎましたが、
一つのセルにひらがな、漢字、カタカナ、英数字
が半角・全角ごちゃ混ぜで入っているので
管理がしづらくて困っています。
例えば、

あいうアジアNET株式会社
株式会社ABC123

などなど・・・・

ひらがな・漢字はそのままで、
カタカナを全角、英数字を半角にする方法は
ありませんか?
最初にASC関数を使ってみたらカタカナも半角になり、
Phonetic関数を使うと、
カタカナだけ全角になりましたが、
ひらがなまでカタカナになり・・・
JIS関数も試しましたが今度は英数字まで全角になり、
どうしたものかと困っております。

よろしくお願いします。

Aベストアンサー

No.2です。遅くなりました。修正コード、、というより別物ですがアップします。

実は、以前に類似した質問に回答したことがあります。(参考URL)
今回はBLUEPIXYのコードも参考にさせてもらい、その時のコードに手を加えました。
関数myStrFmtはワークシートでも使えますし、他のプロシージャーでも使えます。

どうでしょうか?

========== 次行からコード ==================================

'***************************************************************
' カタカナは全角化、英数字および記号を半角化するユーザー定義関数
' 引数:文字列 変換対象となる文字列を指定します
' 引数:数字  数字半角化オプション(省略可) 規定値:True
' 引数:記号  記号半角化オプション(省略可) 規定値:False
'***************************************************************
Function myStrFmt(文字列 As String, Optional 数字 As Boolean = True, Optional 記号 As Boolean = False)

  Dim ReplaceList As String
  Dim TargetStr As String
  Dim MAK As String, NUM As String, ALB As String
  Dim i As Long

  '半角化の対象とする文字を全角で定義
  MAK = "!#$%&'()*+-./:;<=>?@[¥]^_{|}。、,,"
  NUM = "01234567890"
  ALB = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  '置換リスト作成
  ReplaceList = NUM & ALB & StrConv(ALB, vbLowerCase)
  If 数字 Then ReplaceList = ReplaceList & NUM
  If 記号 Then ReplaceList = ReplaceList & MAK

  '全角化
  文字列 = StrConv(文字列, vbWide)
  '置換
  For i = 1 To Len(ReplaceList)
    TargetStr = Mid(ReplaceList, i, 1)
    文字列 = Replace(文字列, TargetStr, StrConv(TargetStr, vbNarrow))
  Next i
  myStrFmt = 文字列

End Function

'マクロで関数を使用するサンプル(セルを選択した状態で実行)
Sub サンプル()

  On Error Resume Next
  Dim rngCell As Range
  Application.ScreenUpdating = False
  For Each rngCell In Selection
    If rngCell.Value <> "" Then
      rngCell.Value = myStrFmt(rngCell.Value, True, False)
    End If
  Next rngCell
  Application.ScreenUpdating = True

End Sub

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1100627

No.2です。遅くなりました。修正コード、、というより別物ですがアップします。

実は、以前に類似した質問に回答したことがあります。(参考URL)
今回はBLUEPIXYのコードも参考にさせてもらい、その時のコードに手を加えました。
関数myStrFmtはワークシートでも使えますし、他のプロシージャーでも使えます。

どうでしょうか?

========== 次行からコード ==================================

'***************************************************************
' カタカナは全角化、英数字お...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング