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

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

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

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

Q&A

解決済

4回答

11295閲覧

「10桁の値の頭から4桁目の数字が何か」というのを見たいです。

sumire_cl

総合スコア228

VBA

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

0グッド

0クリップ

投稿2017/11/22 07:23

10桁の値がいっぱいセルに入れてあります。
必ず10桁で、たいていは数字ですけど、もしかしたらアルファベットが混じるかもしれません。
こんなかんじ

6170807942 5252531929 6530129749 3270879329 4109506321 5979403547 8894818880 1946147951 5167185123 2071739034 …(後略

これの頭から4桁目の数字は何でしょうか
というのを見るためのものを書きました。

VBA

1Function atama4(ByVal strNum As String) 2 3Dim arrNum(9) As String 4Dim i As Long 5 6For i = 0 To 9 7 arrNum(i) = Mid(strNum, i + 1, 1) 8Next i 9atama4 = arrNum(3) 10 11End Function

atama4(5167185123)
ってやると
7
が返ります。

これでいいんですけど
なんか
初心者みたい…
いや初心者なんですけど…

世の中の皆様は
頭から何桁目の値を持ってくる
というときには、普通はどのようにしていらっしゃるのでしょうか?

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

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

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

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

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

guest

回答4

0

折角Mid使ってるんだから、活用しないと!

VBA

1Function atama4(ByVal strNum As String) 2 atama4 = Mid(strNum, 4, 1) 3End Function

投稿2017/11/22 07:29

ttyp03

総合スコア16998

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

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

sumire_cl

2017/12/03 10:17

あ そっか midだけでもいけますね(^^; 難しく考えすぎてました…
guest

0

ベストアンサー

現在macの環境しかなく動作確認出来ていないのですが、今までの回答などを踏まえ、
実装してみました。

[要件]
*指定の文字列(あらゆる文字が混じる)から指定した番目に登場した数字を返却
*(自分で追加)上記が存在しない場合は異常と皆し、異常値を返却する

[補足]
*もしかしたらアルファベットが混じるかもしれません
提示頂いたコードはこの要件が満たせていません。
回答されている方のコードの多くも満たせていません。

VBA

1 2' 引数 pStr から pNumber 回目に登場する数字を返却 3' (pStr に pNumber 個の数字が存在しない場合は -1 を返却) 4Private Function GetNumber(ByRef pStr As String, Optional ByRef pNumber as Long = 4) as Long 5 6 ' 変数宣言 7 Dim numCount as Long 8 Dim i As Long 9 10 ' 数字出現回答初期化 11 numCount = 0 12 13 ' 全文字走査 14 For i = 1 To Len(pStr) 15 16 ' 文字が数値だった場合 17 If IsNumeric(Mid(strNum, i, 1)) Then 18 19 ' 数字出現回数をカウントアップ 20 numCount = numCount + 1 21 22 ' 出現回数が pNumber に達した場合はその値を返却し処理終了 23 If pNumber = numCount Then 24 GetNumber = Mid(strNum, i, 1) 25 Exit Function 26 End If 27 28 End If 29 30 Next 31 32 ' 対象が見つからなかった場合は -1 を返却 33 GetNumber = -1 34 35End Function

投稿2017/12/03 10:12

yamashita_yuich

総合スコア316

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

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

sumire_cl

2017/12/03 10:31

うわあありがとうございます! ご推察のことと思いますがこの10桁はコードで 頭から4桁目(この桁は絶対数字のはず)の数字で、このデータがどのDBに入ってるかを見分ける というものです。 別の桁にはアルファベットが来るかもしれない桁もあります。 実はアルファベットが来たらそこを抜かして数字だけ数えて何個目みたいな判定もしないといけないところもあり そこんとこはどうしようかなと思っていました。 質問が稚拙で足りなかったのにそこらへんまて回答していただいてマジすごい!エスパーですか!と喜んでおります。
guest

0

何桁目?も可変にするなら、こんな感じで。

VBA

1Function atama(ByVal strNum As String, n As Integer) 2 atama = Mid(strNum, n, 1) 3End Function 4

4桁目なら、n=4で。
しかしここまで書いてみて、セルにmid関数入力するのと何が違うの?と自問してしまいました^^;

投稿2017/11/24 07:59

Wolf

総合スコア38

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

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

sumire_cl

2017/12/03 10:37

ありがとうございます。 関数をセルにぴゃーって入れちゃえばラクチンなんですが そのようなわけにいかない事情があり…(´・ω・`)
guest

0

Right(Left(Num,4),1) なんてのも見たことあるような笑

折角なんで、数字かどうかの判定用関数を参考まで。
※単純に数値だけで良ければ IsNumeric で十分です。
場合によっては、円マークはいいとか、小数の有無とか、
そういう微調整が簡単にできるマニア向けな感じです。

Public Function IsNumbers(Expression As Variant) As Boolean '対象が数字か判定 If CStr(Expression) = "" Then Exit Function '各文字毎に、数字かどうか判定し、 Dim i As Long For i = 1 To Len(CStr(Expression)) '対象外があれば終了 If InStr(1, "0123456789", Mid$(Expression, i, 1), vbTextCompare) = 0 Then Exit Function Next IsNumbers = True End Function

投稿2017/11/22 07:56

ExcelVBAer

総合スコア1175

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問