質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1184閲覧

VBAで「数字が1文字のとき全角で表示する」マクロを作成したいです

miya_machi

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/06/16 07:43

VBAを使用して「1文字の数字は全角、2文字以上の数字は半角」になるようなマクロを作成したいと考えています。

当方初心者のためプロシャージャの考え方がまだ完全に理解できておりません。
以下のコードにおいて、おそらくSub Macro1()とEnd Subの間の行に
何かしらを入れるのだと思いますが、何が正しいか分からず困っております。
2行目にいれるコードについてご教授いただきたいです。
どうぞよろしくお願いいたします。

========以下作成途中のコード===========

Sub Macro1() End Sub '文字列中の1桁の数字のみ全角にする関数 Function Num1ColWide(Source) As String End Function Dim Buf As String, flg As Boolean, i As Integer If IsNull(Source) Then Exit Function Num1ColWide = StrConv(Source, vbNarrow) For i = 1 To Len(Num1ColWide) Buf = Mid(Source, i, 1) If IsNumeric(Buf) And Not flg Then If Not IsNumeric(Mid(Source, i + 1, 1)) Then Mid(Num1ColWide, i, 1) = StrConv(Buf, vbWide) End If End If flg = IsNumeric(Buf) Next End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、簡単な説明として、
procedure(プロシージャ)=返り値(戻り値)がないもの、
Function(ファンクション)=返り値(戻り値)があるものとお考え下さい。
回答には届きませんが、個人的に気になったので少々添削させていただきます。
あと、VBAといってもAccessかExcelかでだいぶ変わると個人的には思うので、そこらへんも記載していただけると回答者的には助かります。

加えて、質問者様の「1文字の数字は全角、2文字以上の数字は半角」のマクロを作成したあとが気になります。
Excelならセルに記載するのでしょうか? Accessならフォームに転記するのでしょうか?
そこによってSub Macro1()の内容も変動しますことをご承知おきください。
下はあくまでも一例です。

VBA

1Sub Macro1() 2 3 Dim source, txt As String 4 5 source = Worksheets("sheet1").Cells(1, 1).Value 6 txt = Num1ColWide(source) 7 Worksheets("sheet1").Cells(1, 2).Value = txt 8 9 10End Sub 11 12'文字列中の1桁の数字のみ全角にする関数 13Function Num1ColWide(ByVal source As String) As String 14 15Dim Buf As String, num As Integer 16 17 If IsNull(source) Then Exit Function 18 Buf = StrConv(source, vbNarrow) 19 If Len(Buf) > 1 Then 20 Num1ColWide = Buf 21 End 22 Else 23 Num1ColWide = StrConv(Buf, vbWide) 24 End If 25 26End Function

投稿2022/06/16 08:39

vrRGk6Tg

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず、関数の方に、余分なEnd Functionがあるのでそれを削除します。

vba

1'文字列中の1桁の数字のみ全角にする関数 2Function Num1ColWide(Source) As String 3 Dim Buf As String, flg As Boolean, i As Integer 4 If IsNull(Source) Then Exit Function 5 Num1ColWide = StrConv(Source, vbNarrow) 6 For i = 1 To Len(Num1ColWide) 7 Buf = Mid(Source, i, 1) 8 If IsNumeric(Buf) And Not flg Then 9 If Not IsNumeric(Mid(Source, i + 1, 1)) Then 10 Mid(Num1ColWide, i, 1) = StrConv(Buf, vbWide) 11 End If 12 End If 13 flg = IsNumeric(Buf) 14 Next 15End Function

これで関数が使えるようになります。
で、この関数を使った何をしたいかが、不明ですが、
例えば、A1セルに入力されいるテキストを変換して、B1セルに表示させたいのなら、下記のようなコードになります。

vba

1Sub Macro1() 2 Range("B1").Value = Num1ColWide(Range("A1").Value) 3End Sub

列に入力されているセルを変換してB列に表示する場合は、ループ処理で1セルずつ変換します。

vba

1Sub Macro1() 2 Dim r As Range 3 For Each r In Columns("A").SpecialCells(xlCellTypeConstants) 4 r.Offset(, 1) = Num1ColWide(r) 5 Next 6End Sub

投稿2022/06/16 08:20

編集2022/06/19 15:47
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miya_machi

2022/06/19 14:42

回答ありがとうございました!!!大変助かりました。 質問が言葉足らずで申し訳ありませんでした。 ちなみに、「A1セルに入力されているセルを変換してB1セルに表示」ではなく、「A列に入力されているセルを変換してB列に表示」の場合はどのような書き方になりますでしょうか… Columnsなど試行錯誤したのですが、そうするとその後のFunctionとの型が合わなくなってしまって…
hatena19

2022/06/19 15:48

ループで1セルずつ処理することになります。 回答にコードを追記しましたので参照ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問