Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3874 / 13646 ツリー ←次へ | 前へ→

【59654】半角数字を全角数字にする pico 08/12/29(月) 20:48 質問[未読]
【59655】Re:半角数字を全角数字にする かみちゃん 08/12/29(月) 20:56 発言[未読]
【59656】Re:半角数字を全角数字にする kanabun 08/12/29(月) 21:27 発言[未読]
【59721】Re:半角数字を全角数字にする pico 09/1/4(日) 8:56 質問[未読]
【59722】Re:半角数字を全角数字にする かみちゃん 09/1/4(日) 9:48 発言[未読]
【59729】Re:半角数字を全角数字にする pico 09/1/4(日) 21:21 お礼[未読]
【59730】Re:半角数字を全角数字にする かみちゃん 09/1/4(日) 22:09 発言[未読]
【59744】Re:半角数字を全角数字にする pico 09/1/6(火) 20:12 発言[未読]
【59747】Re:半角数字を全角数字にする かみちゃん 09/1/6(火) 23:03 発言[未読]
【59723】Re:半角数字を全角数字にする りん 09/1/4(日) 10:15 発言[未読]
【59736】Re:半角数字を全角数字にする pico 09/1/5(月) 20:23 お礼[未読]

【59654】半角数字を全角数字にする
質問  pico  - 08/12/29(月) 20:48 -

引用なし
パスワード
   住所の番地が半角になっているものを
全角にしたいのですが…
例えば
奈良県吉野郡吉野町美山32-2-1
がF列にあります。
この番地の32-2-1を全角の数字にしたいのですが…


With Sheets("氏名リスト")
Dim i As Long
For i = 7 To .Range("F65536").End(xlUp).Row
.Cells(i, 6) _
.Replace _
  What:=xlIMEModeAlpha, Replacement:=xlIMEModeAlphaFull, _
  SearchOrder:=xlByColumns, MatchCase:=True
Next i
End With

とコードを書きましたが、全角に変換できません。
アドバイスお願いします。

【59655】Re:半角数字を全角数字にする
発言  かみちゃん E-MAIL  - 08/12/29(月) 20:56 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>奈良県吉野郡吉野町美山32-2-1
>がF列にあります。
>この番地の32-2-1を全角の数字にしたい

以下のような感じで、StrConv関数を使うとできると思います。

 Dim strData As String
 
 strData = "奈良県吉野郡吉野町美山32-2-1"
 MsgBox strData & vbCrLf & StrConv(strData, vbWide)

【59656】Re:半角数字を全角数字にする
発言  kanabun  - 08/12/29(月) 21:27 -

引用なし
パスワード
   ▼pico さん:

お邪魔します。

StrConv関数の他には、
ワークシートのJIS関数を使ってもいいと思います。
アプリケーションオブジェクトのメソッドとしてこれを使えば、
範囲に一括設定できます。(ループ不要となりま)

(JISは VBAでは DBCS関数になります)

  With Sheets("氏名リスト")
    With .Range("F7", .Range("F65536").End(xlUp))
      .Value = Application.Dbcs(.Cells)
    End With
  End With

【59721】Re:半角数字を全角数字にする
質問  pico  - 09/1/4(日) 8:56 -

引用なし
パスワード
   ▼かみちゃんさん kanabun さん:

今年もよろしくお願いします。
お礼が遅くなりました。有難うございました。

かみちゃんさんのご指導を使い
With Sheets("氏名リスト")
  For i = 7 To .Range("F65536").End(xlUp).Row
   .Cells(i, 6) = StrConv(.Cells(i, 6), vbWide)  '数字を全角に…
  Next i
End With
のコードで実行すると 下のアドレス12が全角に変わらないケースもありました、
何かコードが悪かったのでしょうか。
 ○○市××野村12


>(JISは VBAでは DBCS関数になります)

全角→半角は
エクセル関数でASC で出来ますが、VBAではどのような関数になるのでしょうか。

後一点ですが算用数字を漢数字、漢数字を算用数字にするには、
マクロの記録では下のようなコードになりますが、他にVBAでの関数が
あるのでしょうか。もしありましたら教えてください。
Selection.NumberFormatLocal = "[DBNum1][$-411]G/標準"
Selection.NumberFormatLocal = "[DBNum3][$-411]0"

有難うございました。

【59722】Re:半角数字を全角数字にする
発言  かみちゃん E-MAIL  - 09/1/4(日) 9:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> With Sheets("氏名リスト")
>  For i = 7 To .Range("F65536").End(xlUp).Row
>   .Cells(i, 6) = StrConv(.Cells(i, 6), vbWide)  '数字を全角に…
>  Next i
>End With
>のコードで実行すると 下のアドレス12が全角に変わらないケースもありました、
>何かコードが悪かったのでしょうか。
> ○○市××野村12

この部分だけコメントさせていただきます。

全角に変わらないというのは、どのように判断しているのでしょうか?
試しに、以下のコードを実行して、バイト数(半角1バイト、全角2バイト)を確認
してみてください。

Sub Sample()
 Dim ss1 As String
 Dim ss2 As String
 
 ss1 = "○○市××野村12"
 ss2 = StrConv(ss1, vbWide) '全角に変換
 
 MsgBox ss1 & " バイト数" & LenB(StrConv(ss1, vbFromUnicode)) & vbCrLf & _
     ss2 & " バイト数" & LenB(StrConv(ss2, vbFromUnicode))
End Sub

変数ss1は、16バイト(全角7文字、半角2文字)
変数ss2は、18バイト(全角9文字)
になっていることが確認できませんか?

【59723】Re:半角数字を全角数字にする
発言  りん  - 09/1/4(日) 10:15 -

引用なし
パスワード
   pico さん、おはようございます。

>全角→半角は
>エクセル関数でASC で出来ますが、VBAではどのような関数になるのでしょうか。
逆の場合は、
StrConv関数の引数を「vbNarrow」にします。
Sub test()
  s1 = "アイウエオ"
  MsgBox s1 & vbCrLf & StrConv(s1, vbNarrow)
End Sub

です。

>後一点ですが算用数字を漢数字、漢数字を算用数字にするには、
>マクロの記録では下のようなコードになりますが、他にVBAでの関数が
>あるのでしょうか。もしありましたら教えてください。
VBAではなくてワークシート関数ですが、NUMBERSTRING関数というのがあります。VBAで使うときはこんな感じです。

Sub Macro1()
  s1 = "1234567890"
  MsgBox Application.Evaluate("NUMBERSTRING(" & s1 & ",3)")
End Sub

但し、書式設定と同様に数値のみが対応なので、住所などのように文字列に含まれた数字を漢字にしたい時には向いてないと思います。

【59729】Re:半角数字を全角数字にする
お礼  pico  - 09/1/4(日) 21:21 -

引用なし
パスワード
   ▼かみちゃん さん:

有難うございます。
ご回答いただいた2点ともMsgBox内では正しく動作します。
F列に住所がずらっと並んでいて、小生の書きましたコードでは
全角になるものとならないものが発生しています。

どこかおかしいのだとは思います、もう少し検討してみます。
有難うございます。

【59730】Re:半角数字を全角数字にする
発言  かみちゃん E-MAIL  - 09/1/4(日) 22:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>F列に住所がずらっと並んでいて、小生の書きましたコードでは
>全角になるものとならないものが発生しています。

どのようにして全角になる、ならないを判断しているのでしょうか?

以下で紹介されている
http://vbatips.blog37.fc2.com/blog-entry-28.html#more

Function CheckHankaku(ByVal str As String) As Boolean

End Function
を使って、以下のようにチェックしてみるといいと思います。

Sub Sample()
 Dim ss1 As String
 Dim ss2 As String

 ss1 = "○○市××野村12"
 ss2 = StrConv(ss1, vbWide) '全角に変換

 If CheckHankaku(ss1) Then
  MsgBox "半角が混ざっています" & vbCrLf & ss1
 Else
  MsgBox "すべて全角です" & vbCrLf & ss1
 End If
 If CheckHankaku(ss2) Then
  MsgBox "半角が混ざっています" & vbCrLf & ss2
 Else
  MsgBox "すべて全角です" & vbCrLf & ss2
 End If
End Sub

【59736】Re:半角数字を全角数字にする
お礼  pico  - 09/1/5(月) 20:23 -

引用なし
パスワード
   ▼りん さん:

ご回答有難うございます。
良く理解できました。今後ともよろしくお願いします。

【59744】Re:半角数字を全角数字にする
発言  pico  - 09/1/6(火) 20:12 -

引用なし
パスワード
   ▼かみちゃん さん:
有難うございました。
判りました…
半角の数字がセルの書式設定が「標準」ですと
全角になってくれませんでした。
文字列に先ず変更すると、全て全角変換してくれました。
それからいただきましたコードですが
CheckHankaku(ss1)のところでエラーになります。
何か宣言しておく必要があるのでしょうか?
>Sub Sample()
> Dim ss1 As String
> Dim ss2 As String
>
> ss1 = "○○市××野村12"
> ss2 = StrConv(ss1, vbWide) '全角に変換
>
> If CheckHankaku(ss1) Then
>  MsgBox "半角が混ざっています" & vbCrLf & ss1
> Else
>  MsgBox "すべて全角です" & vbCrLf & ss1
> End If
> If CheckHankaku(ss2) Then
>  MsgBox "半角が混ざっています" & vbCrLf & ss2
> Else
>  MsgBox "すべて全角です" & vbCrLf & ss2
> End If
>End Sub

【59747】Re:半角数字を全角数字にする
発言  かみちゃん E-MAIL  - 09/1/6(火) 23:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>半角の数字がセルの書式設定が「標準」ですと
>全角になってくれませんでした。
>文字列に先ず変更すると、全て全角変換してくれました。

書式設定は、関係ないはずです。
Excel2002SP3で動作確認済みです。

>それからいただきましたコードですが
>CheckHankaku(ss1)のところでエラーになります。
>何か宣言しておく必要があるのでしょうか?

エラーメッセージを書くようにしましょう。

以下の記述が漏れているのではないでしょうか?
こちらも動作確認済みです。

>>以下で紹介されている
>>http://vbatips.blog37.fc2.com/blog-entry-28.html#more
>>
>>Function CheckHankaku(ByVal str As String) As Boolean
>>
>>End Function
>> を使って、以下のようにチェックしてみるといいと思います。

3874 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free