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

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

ただいまの
回答率

91.35%

  • VBA

    1122questions

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

  • Excel

    966questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 4

投稿 2017/11/22 16:23

  • 評価
  • クリップ 0
  • VIEW 137

sumire_cl

score 40

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

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

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

Function atama4(ByVal strNum As String)

Dim arrNum(9) As String
Dim i As Long

For i = 0 To 9
    arrNum(i) = Mid(strNum, i + 1, 1)
Next i
atama4 = arrNum(3)

End Function

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+5

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

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

投稿 2017/11/22 16:29

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/03 19:17


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

    キャンセル

checkベストアンサー

0

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

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

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

' 引数 pStr から pNumber 回目に登場する数字を返却
' (pStr に pNumber 個の数字が存在しない場合は -1 を返却)
Private Function GetNumber(ByRef pStr As String, Optional ByRef pNumber as Long = 4) as Long

    ' 変数宣言
    Dim numCount as Long
    Dim i As Long

    ' 数字出現回答初期化
    numCount = 0

    ' 全文字走査
    For i = 1 To Len(pStr)

        ' 文字が数値だった場合
        If IsNumeric(Mid(strNum, i, 1)) Then

            ' 数字出現回数をカウントアップ
            numCount = numCount + 1

            ' 出現回数が pNumber に達した場合はその値を返却し処理終了
            If pNumber = numCount Then
                GetNumber = Mid(strNum, i, 1)
                Exit Function
            End If

        End If

    Next

    ' 対象が見つからなかった場合は -1 を返却
    GetNumber = -1

End Function

投稿 2017/12/03 19:12

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/03 19:31

    うわあありがとうございます!
    ご推察のことと思いますがこの10桁はコードで
    頭から4桁目(この桁は絶対数字のはず)の数字で、このデータがどのDBに入ってるかを見分ける
    というものです。
    別の桁にはアルファベットが来るかもしれない桁もあります。

    実はアルファベットが来たらそこを抜かして数字だけ数えて何個目みたいな判定もしないといけないところもあり
    そこんとこはどうしようかなと思っていました。
    質問が稚拙で足りなかったのにそこらへんまて回答していただいてマジすごい!エスパーですか!と喜んでおります。

    キャンセル

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 16:56

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿 2017/11/24 16:59

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/03 19:37

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

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    エクセルVBAの質問です

    VBA初心者です。よろしくお願いします。 以下のコードを記述しています。  Dim Rng1 As Range  Dim Rng2 As Range  Dim c As

  • 解決済

    VBAのユーザーフォームについてです

    前提・実現したいこと VBAをやっています。完全に初心者です。 ボタンを押したときに、ユーザーフォームのラベルに、5つのなかからランダムに言葉を選んで表示をさせたいです。 (

  • 解決済

    ADODB.Stream 保存時エラー

    ADODB.Streamでファイルを作成していてSaveToFileで保存する際に、 ’アプリケーション定義またはオブジェクト定義のエラーです’とエラーが発生します。 変数SA

  • 解決済

    vba  別ブック指定シートに追記

    お世話になります。 excelで実行すると作業結果を別ブックのシート名をYYYYMMDD_Xの連番で保存するようなマクロを組んでいるのですが、その別ブックに保存したシートに対して

  • 解決済

    【VBA】特定の文字までを取得する方法

    VBAのことでお聞きしたいことがあります。 ■やりたいこと ・サイトのディレクトリデータが入っている列から最後の「/」以降の文字を除いた文字を取得 例)「/test/tes

  • 受付中

    VBAのexec()について

    外部batファイルをexec()で実行しました。 ですがその際、StdOutには4096バイトしか出力出来ないそうで、結果が途中までしか出力出来ません。 batファイルを複数に分け

  • 解決済

    VBA高速化について

    20個のエクセルファイルを読み込み、特定のシートにあるテーブルから特定の値を探し出し、その右横にあるセルの値を取り出します。 集計用のエクセルのテーブルでも、同じ特定の値をテーブル

  • 解決済

    powerpointでタイトル(文字列+連続変数)をVBAで一括変換

    パワーポイントで、タイトルの位置に テキスト+数字 の形でFor文を使って作りたいです。 例)こんにちは1(スライド1枚目) こんにちは2(スライド2枚目) ...といった形です。

同じタグがついた質問を見る

  • VBA

    1122questions

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

  • Excel

    966questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。