dポイントプレゼントキャンペーン実施中!

非常に沢山のエクセルファイルがあります。そのエクセルファイル内のシートにある情報全てについて一発変換をしたいです。できればシートが複数に分かれているので複数のシートであっても一発変換で済めば最高です。でも単一シートごとでも構いません。頑張れます。
全角の英字・数字を半角に、そして「、」を「,」に変換したいです。
カタカナは変換したくないです。ウェブページにアップしたいからです。
色々と探しはしたのですが、セル一行しか一度に出来ないとか全く使うには程遠いものしかありませんでして、何か良いソフト、または方策がないでしょうか。

A 回答 (8件)

こんにちは。



最初に直接関係のない話ですが、興味を持っていただいた方にお知らせしておくと、このマクロは、もともと、汎用型を想定したもので、特に、Access に関しては、Excelのような半角を全角にした時に、濁音、半濁音は丸められません。そこで、単純に文字の半角・全角の変換を行うとできません。単純な方法は、Excelのワークシートのみにしか有効ではありません。

さて、ご質問の件ですが、

全角のスペースに関しては、

'Unicodeの英数記号の全角
× myPattern = "[\uff01-\uff5a]+"
myPattern = "[\uff01-\uff5a ]+" '←変更

全角スペースは半角になるはずです。半角は半角のスペースのままです。二重・三重の半角スペースは、そのままです。つづめることはしません。

☆ 汎用性のあるマクロの登録の仕方。

>変換したいファイルを開くと最初に登録したはずの今回のコードが見当たらず、その都度コードをつくるはめに陥っております。

ふたつの方法があります。

* ひとつは、「個人用マクロ」に登録することです。
「個人用マクロ」は、マクロの記録をすると、登録の保存先を指定されますので、そこに、「個人用マクロ」を選ばせられます。そこで、ちょっと試しに、セルペポインターでもクリックするか、移動すれば、書き込まれますので、その出来た場所に、上書き登録すれば、登録されます。(ただし、保存はしてください)

マクロボタンの登録の仕方は、
メニューの[ツール]-[ユーザー設定]-[コマンド]-で、
ニコチャンマークを、メニューバーにドラッグして貼り付けます。

次に、そのまま選択したボタンの編集で、[マクロの登録] で、マクロ名を登録すればよいです。「マクロの登録」で出てきたダイアログの中に、
「PERSONAL.XLS!MainMcr」と出てくるはずですから、それを登録します。
ニコチャンマークは、ボタンイメージ変更で、他のボタンを選ぶことが出来ます。

「ユーザー設定」のメニューを出してから、ボタンをクリックすると編集が可能になります。

** (お勧め)次は、「個人用マクロ」ブックを使わない方法です。常に、そのブックを開いておく必要がありますが、必要ではないときには、常駐していないので、メモリの負担にならずに済みます。(私がよく用いる、擬似的アドインです。)

そのワークシートには、使い方の説明を書いておきます。分からなくなったときに、それを読みます。(本当のアドインには、このようなことは簡単に出来ません。)使用しているときは、単に、ブックは、最小化しておくだけでよいです。

手順:

ブックがあけているときだけのショートカットにしたいなって思うようでしたら、

'<標準モジュール>
Sub Auto_Open()
 Application.OnKey "^w", "MainMcr"
 Application.OnKey "^W", "MainMcr"
 Beep '登録されたときの合図。
End Sub
Sub Auto_Close()
 Application.OnKey "^w"
 Application.OnKey "^W"
End Sub

ブックをオープンしている時だけ、このショートカットが動きます。Ctr+ w だけで、アクティブなブックの変換が行われます。

最初、登録した時だけは、Auto_Openのところにカーソルを置いて、F5 を押して、登録できたか様子をみます。後は、必要なときに、オープンすれば、ショートカットが働きます。閉じれば、ショートカットはなくなります。
私は、とてもこれは便利だと思っています。それに、アドインのように後々の痕跡も残らないです。
    • good
    • 0
この回答へのお礼

いやぁ・・・これまた素晴らしいですね・・・。
再びありがとうございました。
おっしゃるとおりだと思いました。マクロ常駐は重いですね。痕跡も残りませんし、アドインと違ってこのベースファイルさえ開けば、そこに使い方などいくらでも説明書きしておけばいいですから共有もしやすいですね! これが一番効果的のようです。
ショートカットのところあたりがまだ理解できていないのでゆっくり見てみますので。
ありがとうございました。

お礼日時:2005/07/22 18:01

Wendy02 です。



>ショートカットのところあたりがまだ理解できていないのでゆっくり見てみますので。

すみません。解説が抜けていました。

'<標準モジュール>
Sub Auto_Open()
 'オープン時にショートカットを登録
 Application.OnKey "^w", "MainMcr"
 Application.OnKey "^W", "MainMcr"
 Beep '登録されたときの合図。
End Sub

Sub Auto_Close()
 '終了時に、ショートカットをクリア
 Application.OnKey "^w"
 Application.OnKey "^W"
End Sub


「^w」

は、「^」は、Ctrl キーを指し

「w」は、小文字で、Ctrl キーを押しながら「w」 を押すことです。
つまり、「W」も加えるのは、大文字にした時のショートカットのためです。

なお、ファンクションキーの場合は、"{F1}" などとします。
Alt キーの場合は、% ですから、

"%a" とすれば、「Alt」 キーを押しながら、「a」を押すことになります。
なお、これは、ほとんどのキーに登録することが可能です。例えば、Enter キーにも登録が可能です。
    • good
    • 0
この回答へのお礼

何度もありがとうございました。
オープン時にショートカットが稼動し、閉じたら開放されるわけですね。
色んなことができるのですね

お礼日時:2005/07/25 09:41

変換したいセルを範囲指定して


Sub test01()
Dim cl As Range
For Each cl In Selection
cl = StrConv(cl, vbNarrow)
Next
End Sub
を実行してみてください。
十分テストしてませんが、長い回答が多いのでつい。
処理が十分でない場合はお許しを。
「、」は置換操作でできそう。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2005/07/25 09:37

こんにちは。

KenKen_SP です。

置換文字を定義しておいて、グリグリ置換する方法です。
つまり、#2 や #4 の方の方法を VBA で実現しています。

Sub WEB用文字変換()

  Dim SH As Worksheet
  
  Application.ScreenUpdating = False
  For Each SH In ActiveWorkbook.Sheets
    Call ConvStrCase(SH.Name)
  Next SH
  Application.ScreenUpdating = True
  MsgBox "Complete", vbInformation

End Sub

Private Sub ConvStrCase(strSheetName As String)

  Dim Num    As String
  Dim Alb    As String
  Dim ConvTbl  As String
  Dim TargetArea As Range
  Dim TargetChar As String
  
  '半角化対象文字
  Num = "0123456789"
  Alb = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  ConvTbl = Num & Alb & StrConv(Alb, vbLowerCase)
  '置換範囲
  Set TargetArea = Sheets(strSheetName).UsedRange
  '置換
  For i = 1 To Len(ConvTbl)
    TargetChar = Mid$(ConvTbl, i, 1)
    TargetArea.Replace _
      What:=TargetChar, _
      Replacement:=StrConv(TargetChar, vbNarrow), _
      LookAt:=xlPart, _
      MatchCase:=False
  Next i
  'その他の文字
  TargetArea.Replace What:="、", Replacement:=","
  Set TargetArea = Nothing

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

うぉぉぉっ! これまたすごいですね。
私の希望した変換内容を完璧に含んでらっしゃいます・・・。す、素晴らしい。
「、」も「,」にバッチリなってますね!
ざっと見た感じですが、全角のままのところは今のところ見当たりません。
ホント、皆さんのお陰です。助かります。
ファイルがメチャ多いので、昨日まで普通にやったらどれだけかかるんだ?と思ってたので、ホント、嬉しいです。ありがとうございました。

お礼日時:2005/07/22 18:13

置換処理でどうですか?


<編集>-<置換>  
<検索する文字列>・・・「、」
<置換後の文字列>・・・「,」
<すべて置換>
で、OKです。
シートごとですが。
    • good
    • 0
この回答へのお礼

自分が使いこなせてないだけでしょうか? これで叶うんなら一番簡単でいいんですが、全角英数字を半角英数字にできますかね?

お礼日時:2005/07/22 14:08

こんにちは。


VBAのコードを紹介しておきますので、Alt + F11 で、Visual Basic Editor 画面が出たら、挿入-標準モジュールをクリックして、エディタ画面を開きます。
そして、以下のコードを貼り付けます。

後は、メニューボタンに「MainMcr」の名前を登録すれば、便利かと思います。
これは、開いてアクティブになっているワークブックのそれぞれのワークシート(グラフシートは除きます)すべてが、変換されます。ただし、定数のみで、式については変換されません。

変換の状態
あいうアイウ123abcABC、か12
   ↓
あいうアイウ123abcABC,か12


'<標準モジュール>
Dim objRE As Object
Sub MainMcr()
'実行ファイル
 Dim ws As Worksheet
 Set objRE = CreateObject("VBScript.RegExp")
 For Each ws In ActiveWorkbook.Worksheets
  Call Han2ZenR(ws.UsedRange)
 Next
 Set objRE = Nothing
End Sub

Private Sub Han2ZenR(rng As Range)
 'VBA汎用型+Excel 用に改変
 Dim myPattern As String
 Dim buf As String
 Dim soc As String
 Dim c As Variant
 Dim Match As Object, Matches As Object
 '正規表現パターン
 'Unicodeの英数記号の全角
 myPattern = "[\uff01-\uff5a]+"
 With objRE
  .Pattern = myPattern
  .Global = True
  For Each c In rng
   If VarType(c) = vbString And Not c.HasFormula Then
    soc = StrConv(c, vbWide)
    '一旦全角にします
    Set Matches = .Execute(soc)
    For Each Match In Matches
     buf = StrConv(Match, vbNarrow)
     'パターンにあった部分は半角にしています
     soc = Replace(soc, Match, buf)
     soc = Replace(soc, "、", ",")
    Next
    c.Value = soc '※出力
   End If
  Next
 End With
End Sub

この回答への補足

VBコード、ありがとうございます。今試し中です。
まだ完全にチェックしてませんが、何か、いけてそうな・・・。

ひとつ確認させてもらっていいでしょうか。

>メニューボタンに「MainMcr」の名前を登録すれば、便利

とありましたよね。VBの画面を色々と見てるんですがさわったことがないのもあり、登録の仕方がわからないんです。
変換したいファイルを開くと最初に登録したはずの今回のコードが見当たらず、その都度コードをつくるはめに陥っております。
おそらくこの手間をなくすことが「登録」とおっしゃっていると思うのですが。
デフォルトでは「Module1」と出るので、それを「MainMcr」(何でもいいんでしょうが)と名称を書き換えるところまではわかるんですが・・・。

補足日時:2005/07/22 13:32
    • good
    • 0
この回答へのお礼

極めて具体的なご回答、誠にありがとうございます。大感謝で感激しております。
ひとつのシートに沢山の情報があり、かつシートも4・5枚あるので全てをチェックしたわけではありませんが、どうもうまくいっているようです。
試しに自分で全角英語を空いたところに入れた上でマクロりましたが、変換できてます。
しかも、ちゃんと「、」も「,」になってるじゃあありませんか! 素晴らしいですね!

ひとつ気づいたのは、なぜかしらん、単語間が全角スペースに変換されてますね・・・。が、私の作業の場合は英語サイトをつくっていて、ウェブページに持っていく段階で勝手に半角スペースに変わってましたんで問題なかったんでいいんですが気づきとして。

あとは補足欄でお尋ねしたところさえクリアになれば完璧です。今こちらでも色々と触って調べている最中ですが

お礼日時:2005/07/22 14:05

置換はダメ?



「、」→「,」で"すべて置換"は面倒かな?
    • good
    • 0
この回答へのお礼

そうですね、ファイルがむちゃくちゃ多いもので無理です・・・

お礼日時:2005/07/22 13:46

ASC関数、 SUBSTITUTE関数ではダメですか?

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

そうですね、掲載してあるサイトをいくつか見ましたが何をどうすればよいのかわからずじまいでした・・・

お礼日時:2005/07/22 13:44

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