A列からT列、
行は10000行ほどあるのですが
全てを半角にしたいのですがマクロでないと無理でしょうか?

Sub 全てを半角にする()
Dim row行 As Long
Dim col列 As Long

For col列 = 1 To Range("IV1").End(xlToLeft).Column

For row行 = 2 To Cells(65536, 2).End(xlUp).Row
Cells(row行, col列) = StrConv(Cells(row行, col列), vbNarrow)
Next row行

Next col列
End Sub
でやるしかないですか?

もっと効率のいい方法があったら教えてください!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんにちは。



本当は、「具体的に、何を半角にするのでしょうか。」を教えてほしかったのですが、見切りで作ってみました。


Sub Test1()
  Dim c As Range
  Dim rng As Range
  On Error GoTo ErrHandler
  Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
  Application.ScreenUpdating = False
  For Each c In rng.Cells
    'そのままでも一応同じですが、全角数字をプレフィックスで保護しました。
    If c.Value Like "[0-9]*" Then
      c.Value = "'" & StrConv(c.Value, vbNarrow)
    Else
     c.Value = StrConv(c.Value, vbNarrow)
    End If
  Next c
  Set rng = Nothing
  Application.ScreenUpdating = True
ErrHandler:

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

ありがとうございます。

お礼日時:2009/05/23 20:50

こんにちは。



質問の主旨は、時間が掛かるから、「効率のいい方法」はないか、ということですね。

>For col列 = 1 To Range("IV1").End(xlToLeft).Column
>For row行 = 2 To Cells(65536, 2).End(xlUp).Row

まず、ありえないです。UsedRange で範囲を取って、
For Each c in 範囲

で処理します。Evaluate は、オブジェクトを呼び出すわけですから、StrConv のほうがよいです。
しかし、全部を半角にするというけれど、カタカナがあったら、それも半角にするのでしょうか?
具体的に、何を半角にするのでしょうか。Excelの場合は、総なめに半角するほどのものはないような気がします。

文字列だけになるはずですから、UsedRangeから、SpecialCellsで、文字列だけを拾い出して、半角をするようにすればよいと思います。これは、記録マクロで取れるはずです。それに、数字だけに限定していくとか、範囲を絞ればよいのです。

ただし、SpecialCells で取ると、その範囲は、Areas になってしまいますから、

For Each c in 範囲.Cells として、c にセルが入るようにするのがコツです。

>置換や検索のようにピッ!とできないかなと思い質問しました。
セルには、Range オブジェクトがあるので、一括でするというのは、基本的にはないはずです。正規表現ツールを考える人もいますが、オブジェクトのインスタンスを作ってから使うのですから、オーバーヘッドが掛かって意味がないと思います。テクにこだわると、本質が見えなくなります。まあ、やってみないとわかりませんが。
    • good
    • 0
この回答へのお礼

大変参考になりました。
早速やってみます。

お礼日時:2009/05/23 11:47

こんなでいいのかな?



Sub 全てを半角にする()
Dim row行 As Long
Dim col列 As Long
Dim range範囲 As Range
col列 = Range("IV1").End(xlToLeft).Column
row行 = Cells(65536, 2).End(xlUp).Row
Set range範囲 = Range("A1", Cells(row行, col列))
range範囲 = Evaluate("asc(" & range範囲.Address & ")")
End Sub

>でやるしかないですか?
方法はいくらでもあると思いますが

>もっと効率のいい方法があったら教えてください!
理解してるやり方で、いいと思いますけどね
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。

お礼日時:2009/05/22 22:59

こんにちわ。


関数だと
=asc()
で全角→半角になります。

仮にシート1にデータがある場合、
シート2で
A1 : =asc(シート1!A1)
あとは必要な場所までコピペ。

更に効率が悪くなったよーな気もしますが、参考まで
    • good
    • 0
この回答へのお礼

置換や検索のようにピッ!とできないかなと思い質問しました。
関数も使えますね。
ありがとうございます。

お礼日時:2009/05/22 22:59

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


人気Q&Aランキング