[[20160923114810]] 『英数字だけを半角に変換したい』(関数がにがて) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『英数字だけを半角に変換したい』(関数がにがて)

こんにちは

仕事で色々な人が入力したデータをまとめて、一覧にしているのですが、
書式が人によりまちまちなので、私が英数字だけを半角に空欄は全角に統一しています。

VBAの勉強がてらマクロで一気に変換したいと思い、ネットで探したところfunctionプロシージャで書かれたものは見つけました。
今後のために、これをマクロに書き換えるにはどうしたらよいのかを教えてください。

一応、subとfunctionの意味の違いは理解しています。
でも、それをどのように活用したらよいのかが分かりません。

Function AscEx2(strOrg As String) As String

  Dim strRet As String
  Dim intLoop As Integer
  Dim strChar As String

  strRet = ""

  For intLoop = 1 To Len(strOrg)

    strChar = Mid(strOrg, intLoop, 1)

    If (strChar >= "0" And strChar <= "9") _
    Or (strChar >= "A" And strChar <= "Z") _
    Or (strChar >= "a" And strChar <= "z") Then
      strRet = strRet & StrConv(strChar, vbNarrow)
    Else
      strRet = strRet & strChar
    End If

  Next intLoop

  AscEx2 = strRet

End Function

どうぞ、よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


strOrgを参照したいセルを指定し、繰り返し指定しましょう
(HARA) 2016/09/23(金) 12:21

早速の回答、ありがとうございます。
subプロシージャにすると、置き換えただけでは動いてくれません。
どうすれば良いのでしょうか?
(関数がにがて) 2016/09/23(金) 13:59

 >一応、subとfunctionの意味の違いは理解しています。

なら、まず 一度functionプロシージャ のまま使用してみては

その上で不都合点をあげて解決を探るのがよろしいかと

 >一応、subとfunctionの意味の違いは理解しています。

に疑問が有ります。
ああ 意味の違いが判るのであって、使用方法等は判らないと言うことかな?
(?) 2016/09/23(金) 14:13


そうなんです。
意味の違いは分かるのであって、使用方法がわかりません。
functionがユーザー関数だと言うことと、関数での使い方はわかります。
でも関数ではなく、マクロで行いたいのです。
(それなりの数があるので…)

よろしくお願いします。
(関数がにがて) 2016/09/23(金) 14:33


変換したいセルは何処なのかを教えて欲しいところ。

現在のFunctionを呼び出すプロシジャを書く、という手もありますが、とりあえず、A列に変換対象文字列があるとして、B列に変換後の文字列を出力する別な例なぞ。

 Sub test()
    Dim cw1 As String
    Dim cw2 As String
    Dim cw As String
    Dim i As Long
    Dim j As Long

    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        cw1 = StrConv(Cells(i, "A").Value, vbWide)
        cw2 = ""
        For j = 1 To Len(cw1)
            cw = Mid(cw1, j, 1)
            If cw Like "[0-9A-Za-z]" Then
                cw = StrConv(cw, vbNarrow)
            End If
            cw2 = cw2 & cw
        Next j
        Cells(i, "B").Value = cw2
    Next i
 End Sub
(???) 2016/09/23(金) 14:50

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

変換したいセルはまとめるbookごとに違うので、セルを選択してその列を行いたいです。
???さんの例を参考に試行してみます。

(関数がにがて) 2016/09/23(金) 15:18


こんにちは

???さんのを参考に自分用に試行してみました。
これで私がしたいことが出来ました。

Sub test()

    Dim cw1 As String
    Dim cw2 As String
    Dim cw As String
    Dim j As Long

    Do Until ActiveCell.Value = ""
        cw1 = StrConv(ActiveCell.Value, vbWide)
        cw2 = ""
        For j = 1 To Len(cw1)
            cw = Mid(cw1, j, 1)
            If cw Like "[0-9A-Za-z]" Then
                cw = StrConv(cw, vbNarrow)
            End If
            cw2 = cw2 & cw
        Next j
        ActiveCell.Value = cw2
        ActiveCell.Offset(1, 0).Select
    Loop

 End Sub

VBAの勉強も頑張ります。
ありがとうございました。
(関数がにがて) 2016/09/30(金) 10:09


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.