
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) Excelの関数についておしえてください。 3 2023/04/20 18:36
- Visual Basic(VBA) 列を指定して値を左から5文字にそろえる 1 2022/06/10 20:28
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで来月以降の日付のセルを...
-
エクセルのセルが縦方向にのびる
-
Excelで年月日データから下二桁...
-
エクセル 時刻表作成
-
EXCEL:フォントがなぜか透明
-
Excelで、セル内改行もそっくり...
-
エクセルでセルに何も入力して...
-
エクセルで勝手に表示された打...
-
エクセルで特定のセルを表示の...
-
エクセルで文字の上に重ねがき...
-
Excelの条件付き書式で、計算式...
-
エクセルのセルに「=A13」...
-
エクセル 関数 セルの値が0...
-
エクセル「折り返して全体を表...
-
concatenate関数で片方のセルの...
-
エクセルでシート保護してもフ...
-
エクセルで下線を二重線にする...
-
ワードの表の中に文字を入れる...
-
エクセルで下詰めを解除できない
-
異なったセルに入っている「年...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで年月日データから下二桁...
-
Excelで、セル内改行もそっくり...
-
Excelで来月以降の日付のセルを...
-
エクセルのセルが縦方向にのびる
-
エクセルで特定のセルを表示の...
-
Excelの条件付き書式で、計算式...
-
エクセル 関数 セルの値が0...
-
エクセルでセルに何も入力して...
-
エクセルのセルに「=A13」...
-
ワードの表の中に文字を入れる...
-
エクセルで勝手に表示された打...
-
EXCEL:フォントがなぜか透明
-
セルA1とB1の数値が一致しな...
-
おねがいします>< エクセルで...
-
エクセルで文字の上に重ねがき...
-
横書きで縦の波線の書き方
-
concatenate関数で片方のセルの...
-
EXCELでCELL一杯の文字を書きた...
-
Excel 日付を比較したら、同じ...
-
【Excel】セルの中の文字の下の...
おすすめ情報