セルの書式が標準なのに文字列にできるのはなぜ?
会社のシステムで吐き出したデータですが
セルの書式設定が標準なのに文字列となっています。
マクロを利用して、あるセルの値を別セルへ転記すると、
数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。
会社のシステムが吐き出したエクセルはセルの書式が標準なのに
中の数字が文字列でいられるのが疑問です。
会社のシステムの吐き出したデータは
Microsoft Excel 2.1ワークシートで
全てのセルの書式設定は「標準」です。
で例えば
12345678901234
は
12345678901234
と表示されていて
「数値が文字列として保存されています」
となっています。(先頭に ' は入っていません)
0101という値のセルでも
表示は0101ですが
「数値が文字列として保存されています」
となっています。(先頭に ' は入っていません)
それらのセルの値をマクロとかで別セルに転記すると
転記先では1.23457E+13
と表示されてしまいます。
(0101は101になります。)
まっさらなエクセルに自分で手入力すると
・セルの書式設定が標準だと
12345678901234
↓
1.23457E+13になります。
・セルの書式設定が数値だと
12345678901234
↓
12345678901234
・セルの書式設定が文字列だと
12345678901234
↓
12345678901234
(ただし 数値が文字列と保存されています と注釈有)
なのに会社のシステムの吐き出しデータは
セルの書式設定が標準なのにもかかわらず
12345678901234
↓
12345678901234
(ただし 数値が文字列と保存されています と注釈有)
となっています。
手入力で書式設定が標準の状態でセルに12345678901234
と表示させるには先頭に ' をつける方法しか知りませんが
' が無いのに表示されています。
でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると
1.23457E+13
となります。
またシステムが吐き出したエクセルの同じシート内に
以下のマクロで転記すると
↓
Sub 転記()
行 = 2
Do
If Cells(行, 6).Value = "" Then Exit Do
If Cells(行, 6).Value >= 10 Then
Cells(行, 7).Value = Range("A2")
Else
Cells(行, 7).Value = Range("A3")
End If
行 = 行 + 1
Loop
End Sub
↓
このマクロだと
A列~F列が書式設定が標準なのに文字列として表示されているのですが
転記先のG列が書式設定が標準であっても
12345678901234
(数値が文字列と保存されています と注釈有)
と同じ状態のまま転記できます。
新しいBOOKのシート2に
会社の吐き出しデータをシートコピーした後、
(セルの書式設定:標準だが文字列で表示されている)
そのBOOKに登録されているマクロで
シート2のセルからシート1のセル(書式設定:標準)に転記すると
数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示
となってしまいます。
ちょっと混乱しています。
理屈等教えていただければと思います。お願いします。
補足
violet430様 ご回答ありがとうございます。 補足いたします。質問で書きましたが、シート全体を方眼紙状に調整しています。その上に画面いっぱいのある図形を貼り付け、図形と、セルに記載する文字列で構成した資料を作っています。セルや行の幅が変わると、図形と文字列の位置関係が狂ってくるため、セルはあくまで方眼紙状のまま崩したくありません。宜しくお願いします。