文字列が含まれるなら文字列、数値なら数値として値を持ってきたい

解決済

回答 5

投稿 編集

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

Naoko_Coco

score 39

Excelを読込、文字列が含まれるならならそのままもってきて数値なら数値?半角英数字として持ってきたいです。
現状はすべて文字列になってしまいます。
コメントアウトしてるところはいろいろ試したけど、出来なかった痕跡です。。。

Private Sub openPS(fp As String)
    '職員マスタ
    Dim i As Long
    Dim r As Long
    Dim c As Long
    Dim iLine As Long
    Dim wb As Workbook
    Dim sh As Worksheet
    Dim sData(9) As String
    Dim Err As Long

    Set wb = Workbooks.Open(Filename:=fp, ReadOnly:=True)
    Set sh = wb.Worksheets(1)
    iLine = 14
    r = sh.Cells(sh.Rows.Count, 5).End(xlUp).Row

    For i = 2 To r
'        If sh.Cells(i, 6) <> "" Then
            sData(0) = CLng(sh.Cells(i, 5).Value)
            sData(1) = sh.Cells(i, 6).Value
            sData(2) = sh.Cells(i, 7).Value
            sData(3) = sh.Cells(i, 8).Value
            sData(4) = sh.Cells(i, 9).Value
            sData(5) = sh.Cells(i, 12).Value
            sData(6) = sh.Cells(i, 13).Value
            sData(7) = sh.Cells(i, 14).Value
            sData(8) = sh.Cells(i, 15).Value
            sData(9) = sh.Cells(i, 17).Value
'            For c = 1 To Len(sData(0))
'                If Mid(sData(0), c, 1) Like "[A-z]" Or Mid(sData(0), c, 1) Like "[0-9]" Then
'                   Me.Cells(iLine, 3).Value = Me.Cells(iLine, 3) & StrConv(Mid(Trim$(sData(0)), c, 1), vbNarrow)
'                Else
'                    Me.Cells(iLine, 3).Value = Me.Cells(iLine, 3) & Mid(Trim$(sData(0)), c, 1) '職員コード
'                End If
'            Next
'            sData(0) = CLng(sData(0))
            Me.Cells(iLine, 3).Value = Trim$(StrConv(sData(0), vbNarrow)) '職員コード
            Me.Cells(iLine, 4).Value = Trim$(sData(1))  '漢字氏名
            Me.Cells(iLine, 5).Value = Trim$(StrConv(sData(2), vbWide))  'カナ
            Me.Cells(iLine, 6).Value = Trim$(StrConv(sData(3), vbNarrow)) '性別
            Me.Cells(iLine, 7).Value = Format(Trim$(sData(4)), "yyyymm") '入庫年月
            Me.Cells(iLine, 8).Value = Trim$(StrConv(sData(5), vbNarrow)) '郵便番号
            Me.Cells(iLine, 9).Value = Trim$(sData(6)) '住所1
            Me.Cells(iLine, 10).Value = Trim$(sData(7)) '住所2
            Me.Cells(iLine, 11).Value = Trim$(sData(8))  '住所3
            Me.Cells(iLine, 12).Value = Trim$(sData(9)) '連絡欄
            iLine = iLine + 1


    Next
    Me.Range("C13:L" & CStr(iLine - 1)).Borders.LineStyle = xlContinuous
    wb.Close
'    r = Me.Cells(Me.Rows.Count, 3).End(xlUp).Row
'    For i = 14 To r
'         Me.Cells(iLine, 3) = CLng(Me.Cells(iLine, 3))
'    Next



    Call ErrCheck


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 5

0

Dim sData(9) As String

sDataがString型で定義されているからでは?
横着せずセルごとに適切な型でそれぞれ用意してあげればよいと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/09/12 08:56

    なんか仕様がよくわからんです。
    「お客さんがどのようにデータを入れるのかがわからない」と言っても、コード上、職員コード、漢字氏名・・・と順番は決まっているのですよね?
    であれば自ずと型は決まるのではないでしょうか?

    キャンセル

  • 2019/09/12 09:17

    「お客さんがどのようにデータを入れるのかがわからない」・・・の意味は
    「お客さんがどのような順番でデータをいれるかわからない」ではなくて、
    「お客さんが何のデータを入れるのかがわからない」という意味にも取れます。
    つまり、「数字が入力されるべきセルに文字が入力されるかも知れない」・・・というようなことかと。

    キャンセル

  • 2019/09/12 09:47

    なるほど。
    一般的には一旦文字列で持っておいて、各セルごとに適したチェックを行えばよいだけだと思いますけどね。
    となると結局何に詰まっているのかが良くわからなくなりました。

    キャンセル

0

          Me.Cells(iLine, 3).Value = Trim$(StrConv(sData(0), vbNarrow)) '職員コード

この部分のことですよね。
他の氏名、カナ・・・連絡欄が数値ということはないと思いますので。

職員コードとした場合、コードは数字だけだとしても数値ではないので、文字列でいいのではないですか。
職員コードを加算したりとかの演算はしませんよね。
逆に、数値と文字列を混在させると、検索の時とか並べ替えの時に想定外の動作になりかねません。


一応、数字だけの場合と、数字以外が含まれている場合の判定は、下記のコードで可能です。

sData(0) = sh.Cells(i, 5).Value
If sData(0) Like *[!0-90-9]*" Then
    '数字(0-90-9)以外の文字が含まれていた時の処理
Else
    '数字(0-90-9)のみの時の処理
End If

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/09/11 20:39

    質問を小出しにせずに全体の流れを整理して提示してくだいさい。
    で、現状の処理(コード)でどこが想定と違うのか、を明確にしてください。

    数値を数値して扱いたい

    半角英数字以外はセルを赤くしたい

    SQLに流し込むときにエラーになる

    というように質問内容が変化していますし、
    かつ、すべてにおいて、曖昧で情報不足です。

    キャンセル

  • 2019/09/11 21:31

    説明不足でごめんなさい🙇💦

    キャンセル

  • 2019/09/12 18:15

    謝られても、、、
    大分、時間か経ちましたが、結局、何も説明不足が解消されてません。

    説明不足な点を補うように、質問文を修正してください。
    で、どこでどのような問題点が出ているのか明確にしてください。

    キャンセル

0

>データは半角英数字を想定してます。
>それ以外を入れた場合にそのセルを赤くしてるんです。

入力可能な文字は、半角のAからZ、半角のaからz、半角の0から9のいずれかとします。これ以外はすべてエラーになります。(全角はエラー、小数点はエラー)

以下のようなチェック関数を作成します。
チェックしたいセルの内容を渡して、trueが返れば、半角の英数字であり、falseが返れば、先以外の文字があることになります。(空白文字列""はfalseが返ります)

Public Function IsAlphaNumeric(ByVal val As String) As Boolean
    Dim RE As Object
    Dim strPattern As String
    Set RE = CreateObject("VBScript.RegExp")
    RE.Pattern = "^[0-9A-Za-z]+$"
    IsAlphaNumeric = RE.test(val)
    Set RE = Nothing
End Function

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/09/11 21:33

    今日は帰宅してしまったので、明日試してみます!
    またご報告します。
    いつもありがとう*\(^o^)/*

    キャンセル

0

>現状はすべて文字列になってしまいます。

えっと、
開くファイルはエクセルのファイルですよね?
で、文字列になっているというのは、
セルの書式設定が「文字列」になっていてセルの値に「文字列」るのか、
セルの書式設定が「標準」または「文字列」以外になっているが、
セルの値として「文字列」が入っているのか、どっちですか?

前者だとして、一括でセルの書式設定を「標準」に戻せれば、よいのですか?
2~3行のサンプルデータのびふぉー&あふたーがあれば、
なにかしら案を提示できるとおもいます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

check解決した方法

-1

質問がうまくまとまっていないので再度別個で質問します。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/09/13 19:28

    解決方法が書かれていません。

    キャンセル

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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