VBAでセルのデータを下記のように他のセルに持っていく場合、文字として入れてある数字(例えば先頭に0がつくようなもの)は、自動的に数値に変えられて0が消えてしまいます。
また、長いものは指数表示になってしまい、15桁を超えるものは後ろが0になってしまいます。
持っていく先のセルを文字列に設定しておけばいいのでしょうが、持っていく元データが全て文字列ではなく、数値の場合もあります。
元データが数値であれば数値として、文字列であれば文字列として持っていくにはどうすればいいのでしょうか?
Sub test()
Cells(3, 3).Value = Cells(1, 1).Value
End Sub
No.4ベストアンサー
- 回答日時:
#3 maruru さま
>文字列を表す接頭文字「'」は、PrefixCharacterプロパティで参照出来ます。
>(参照だけで、設定は出来ません。)
おお。なるほど。知りませんでした(^^;)
勉強になりました。ありがとうございます。
では、merlionXX 様、蛇足かもしれませんが、
Sub Sample()
Dim rngOrg As Range
'元データ
Set rngOrg = ActiveCell 'Cells(3, 3)
'書込み先セル
With Cells(1, 1)
.NumberFormat = rngOrg.NumberFormat
If Len(rngOrg.PrefixCharacter) > 0 Then
'接頭文字あり(Prefixを追加して転記)
.Value = "'" & rngOrg.Value
Else
'接頭文字なし(そのまま転記)
.Value = rngOrg.Value
End If
End With
End Sub
こんな風に、PrefixCharacterプロパティで接頭辞の有無を調べ、あれば接頭辞を追加して値を転記するようにすれば、セル書式も生かされますね。
No.3
- 回答日時:
こんにちは。
maruru01です。文字列を表す接頭文字「'」は、PrefixCharacterプロパティで参照出来ます。
(参照だけで、設定は出来ません。)
このプロパティは、接頭文字が付いていれば「'」を、付いていなければNullを返します。
したがって、文字列長で判別してやります。
No.2の方のコードを拝借して、こんな感じになります。
Sub Sample()
Dim rngOrg As Range
'元データ
Set rngOrg = ActiveCell 'Cells(3, 3)
'書込み先セル
With Cells(1, 1)
If Len(rngOrg.PrefixCharacter) > 0 Then
'接頭文字あり(文字列型にする)
.NumberFormat = "@"
Else
'接頭文字なし(元のデータ型をコピー)
.NumberFormat = rngOrg.NumberFormat
End If
'データ転記
.Value = rngOrg.Value
End With
End Sub
No.2
- 回答日時:
#1です。
>書式は「標準」でデータの頭にシングルクォーテーションを入れて文字列化した
>数字の場合は書式の転記ではだめでした。
それなら、VarType関数でデータ型を調べ、かつ数値化可能なデータの場合、セル書式を文字列に、その他のデータ型はコピー元と同じ書式にしておくのはどうですか?
元データのシングルクォーテーションは無くなりますが。
Sub Sample()
Dim rngOrg As Range
'元データ
Set rngOrg = ActiveCell 'Cells(3, 3)
'書込み先セル
With Cells(1, 1)
'元データセルのデータ型が文字列かつ数値化可能であれば、
'転記先セルの表示形式を文字列に設定しておく
If VarType(rngOrg.Value) = 8 And _
IsNumeric(rngOrg.Value) Then
.NumberFormat = "@"
Else
'その他のデータ型ならそのまま
.NumberFormat = rngOrg.NumberFormat
End If
'データ転記
.Value = rngOrg.Value
End With
End Sub
No.1
- 回答日時:
こんにちは。
難しく考えず、転記前に元データセルの書式を調べておき、転記先セルにそれを予め設定してから値を転記すれば良いかと。
Sub Sample()
'元データ
Set rngOrg = Cells(4, 3)
'書込み先セル
With Cells(1, 1)
'元データのセルと同じ表示形式を設定しておく
.NumberFormat = rngOrg.NumberFormat
'データ転記
.Value = rngOrg.Value
End With
End Sub
この回答への補足
さっそくありがとうございます。
試してみましたが、以下の点で躓きました。
元データのセルが文字列となっていれば問題なしです。
しかし、書式は「標準」でデータの頭にシングルクォーテーションを入れて文字列化した数字の場合は書式の転記ではだめでした。
データ数がたくさんあり困っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
5
エクセルvbaで転記したのですが、数字のゼロが消えてしまいます。 ゼロも転記するためにはどうしたらい
Excel(エクセル)
-
6
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
7
エクセルへのデータの貼付時に書式が反映されない!
Visual Basic(VBA)
-
8
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
9
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
10
エクセルでオブジェクトを常に表記する
Excel(エクセル)
-
11
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
12
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
13
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
14
【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
Excel(エクセル)
-
15
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
16
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
17
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
18
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで年月日データから下二桁...
-
エクセルで特定のセルを表示の...
-
エクセルのセルが縦方向にのびる
-
エクセルでセルに何も入力して...
-
ワードの表の中に文字を入れる...
-
concatenate関数で片方のセルの...
-
横書きで縦の波線の書き方
-
Excelで前ゼロを取る方法
-
エクセル 関数 セルの値が0...
-
エクセル「折り返して全体を表...
-
Excelで来月以降の日付のセルを...
-
Excelで、セル内改行もそっくり...
-
EXCELでセルを選択中に、ウィン...
-
【Excel】セルの中の文字の下の...
-
セルA1とB1の数値が一致しな...
-
エクセルで文字の上に重ねがき...
-
エクセルで名簿作り・・均等割...
-
勤務時間を10進法で合計を出したい
-
エクセルで左寄せ かつ 空間...
-
Excel 「選択範囲で中央」に設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで年月日データから下二桁...
-
エクセルで特定のセルを表示の...
-
エクセルのセルが縦方向にのびる
-
エクセル 関数 セルの値が0...
-
Excelの条件付き書式で、計算式...
-
Excelで、セル内改行もそっくり...
-
横書きで縦の波線の書き方
-
ワードの表の中に文字を入れる...
-
Excelで来月以降の日付のセルを...
-
エクセルでセルに何も入力して...
-
エクセルのセルに「=A13」...
-
エクセルで文字の上に重ねがき...
-
【Excel】セルの中の文字の下の...
-
EXCELでCELL一杯の文字を書きた...
-
concatenate関数で片方のセルの...
-
セルA1とB1の数値が一致しな...
-
エクセル「折り返して全体を表...
-
Excel2007でセルに値があるはず...
-
Excelで、あるセルだけ入力させ...
-
エクセルで、文章の右端をそろ...
おすすめ情報