[[20170609132025]] 『文字列→数値をセルで一括処理』(hym) ページの最後に飛ぶ

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

 

『文字列→数値をセルで一括処理』(hym)

お世話になっております。
表題の件について、助言を頂ければと思います。

桁数が可変のとある数値が文字列としてセルに入っています。
それを.value = .valueで数値に変換しようとしたところ、

3232→20000964
4315→446102
8610→3232
4084→20000964

といった具合に元の数値より桁数が変わり、
数字も全く別物に変わってしまいます。

特に「20000964」という数字が多いように感じます。
これは元のデータにも存在する数値なのですが、
これが何か変換の妨げになっているのでしょうか。

調べてもこのような事象について情報を得られず、
困っております。宜しくお願い致します。

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


Valueということはマクロでしょうけど、そのコードとデータを見せてもらわないと、さっぱり…。あり得ない数字の変換ばかりですし。
シート指定を間違えたとか、シート指定していなくてアクティブなシートがいつもと違うとか、何か気づくことはありませんか?
(???) 2017/06/09(金) 14:16

???さん

説明不足ですみません。以下、コードです。

Set findCell = Range(Cells(1, 1), Cells(1, 50)).CurrentRegion.Find _
(What:=keyList(keyCt, 0), LookIn:=xlValues, LookAt:=xlWhole)

 If findCell Is Nothing Then
    MsgBox "ファイルに当該項目が見つかりませんでした。" & vbLf & _
           "項目名の相違、存在有無を確認してください。" & vbLf & vbLf & _
           "ファイル名:" & fileName & vbLf & _
           "項目名:" & Replace(keyList(keyCt, 1), vbLf, "")
    MsgBox "処理を終了します。"
    Application.StatusBar = False
    Exit Sub
Else
    'コードは数値データに変換
    If keyList(keyCt, 0) = "品目" & vbLf & "コード" Or keyList(keyCt, 0) = "仕入先" & vbLf & "コード" Then
        If keyList(keyCt, 0) = "品目" & vbLf & "コード" Then
            keyList(keyCt, 1) = Val(keyList(keyCt, 1))
        End If
        ★Range(Cells(2, findCell.Column), Cells(Cells(Rows.Count, 1).End(xlUp).Row, findCell.Column)).Value = _
        Range(Cells(2, findCell.Column), Cells(Cells(Rows.Count, 1).End(xlUp).Row, findCell.Column)).Value

    End If

    '仕入先が区分の場合は別処理
    If keyList(keyCt, 0) <> "仕入先" & vbLf & "コード" And keyList(keyCt, 1) <> "個別指定" Then
        Range("A1").AutoFilter findCell.Column, keyList(keyCt, 1)
    ElseIf keyList(keyCt, 0) = "仕入先" & vbLf & "コード" And keyList(keyCt, 1) = "個別指定" Then
        keyList(5, 1) = Val(Me.venCode.Value)
        Range("A1").AutoFilter findCell.Column, keyList(keyCt, 1)
    ElseIf keyList(keyCt, 0) = "仕入先" & vbLf & "コード" And keyList(keyCt, 1) <> "個別指定" Then
        sumFlg = 1
    End If
End If

この処理はループの中にあり、
?@指定の列名を検索し、あれば特定のキーでフィルタをかけています。
?Aその中で更に特定の項目名について、文字列→数値に変換しています。
?Bデバックで当該処理(★)に分岐し、指定の場所に処理がされることを確認しています。

★の処理を行う元データは文字列だったり、数値になっていたりします。
文字列の場合は書式エラー(セルの左上に緑がついている)状態です。

再度別ファイルにて同じ処理を行った結果も載せておきます。
元データ(文字列)→変換後
0918→1102182
3984→1590102
1147→1409534
3083→1590101
4355→1100060

(hym) 2017/06/09(金) 14:52


文字化けしていました。
?@などは項目番号なので気にしないで下さい…
(hym) 2017/06/09(金) 14:53

気付いたことというか、気がかりな点ですが…

★の処理を行う前にフィルタがかかっていたとしても、
特に影響はありませんよね…?;

処理では同じ範囲をVelue値で埋めているわけですし…

(hym) 2017/06/09(金) 15:18


 >Range(Cells(2, findCell.Column), Cells(Cells(Rows.Count, 1).End(xlUp).Row, findCell.Column))
 Range(開始セル,終点セル)という記述にならないとエラーになるよね。
 ここでは何をしたいのかな?
(seiya) 2017/06/09(金) 16:14

コメント返信:

[ 一覧(最新更新順) ]


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