質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

8627閲覧

【VBA】コピー&ペーストした際指数表示させないようにしたい

momo842

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2021/04/08 07:08

前提・実現したいこと

お世話になります。

以下やりたいことフローです。
①データシートから特定範囲のセルをコピー
②新しくワークブック作成
③作成したワークブックにペースト
④csv形式で保存

流れは一通りできているのですが、下記問題が解決できません。

ご助言願います。

発生している問題・エラーメッセージ

コピー範囲はZ列にID、AA列に数値が記載されています。
Z列のデータをコピーペーストすると、そのまま文字列として
使いたいのですが、数値(指数表示)されてしまいます。

Ex)正)30141e01 → 誤)301410(3.01E+05)

該当のソースコード

VBA

1 2 Worksheets("転送シート").Activate 3 4 nname = a & "\" & Sheets("転送シート").Range("V3").Value 5 6 Dim fPath As String 7 Dim fName As String 8 Dim rng As Range 9 10 fName = a & "\" & Sheets("転送シート").Range("V3").Value & "." & "csv" 11 12 Application.DisplayAlerts = False 13 14 '■現在選択しているセル情報をrngに格納 15 Range(Cells(5, 26), Cells(58, 26)).Select 16 Set rng1 = Selection 17 Range(Cells(5, 27), Cells(58, 27)).Select 18 Set rng2 = Selection 19 20 21 22 '■新規ブック作成→rngをA1にコピー→CSV保存→CSV閉じる 23 Workbooks.Add 24'Z列のコピペ 25 rng1.Copy 26 ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats 27'AA列のコピペ 28 rng2.Copy 29 ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues 30 31 ActiveWorkbook.SaveAs Filename:=fName, FileFormat:=xlCSV 32 ActiveWindow.Close 33 34 Application.DisplayAlerts = True 35 36 37

試したこと

csvファイル作成時にカンマ区切りにすればできそうな記事を読んだので、
Fileformat:=xlCSVをいれましたが効果なし

ペーストの形式が悪いと思い、Z列とAA列を分け、Z列のペーストを下記種類お試ししたが効果なし
xlPasteAll
xlPasteAllExceptBorders
xlPasteAllUsingSourceTheme
xlPasteFormulasAndNumberFormats
xlPasteValues
xlPasteValuesAndNumberFormats

補足情報(FW/ツールのバージョンなど)

環境:Excel2016

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

では、

VBA

1rng1.Copy 2ActiveSheet.Columns("Z").NumberFormatLocal = "@" 3ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues

または、Z列の内容の語頭に ' を付加しておくか、" " で囲むかを試してみましょう。

投稿2021/04/09 01:33

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xail2222

2021/04/09 11:53

「ActiveSheet.Columns("Z").NumberFormatLocal = "@"」 は 「ActiveSheet.Columns("A").NumberFormatLocal = "@"」 の間違いじゃないでしょうか! でも、私の所では質問者さんの症状が再現しません! いったいどうやったら発生するんだろう…
seastar3

2021/04/10 05:27

質問文から、Z列に文字列としてIDが入っていると解釈してZ列のフォーマットを文字列と規定するコードを示しました。
xail2222

2021/04/10 05:41 編集

そのコードの場所は、Workbooks.Addの後でActiveSheet.Columns("Z")なのだから Z列がある元のbookではなく、新しく作成したbookのZ列を指すことになるではないでしょうか。 コピー先を文字型として設定し、値のみそこに入れる。と上手く行くと私は考えていたので そういうことだと思ったのですが、何か違ってのかな
guest

0

VBAから直接CSVに出力するのはいかがでしょうか?

以下はCSVへの出力を行う手順をざっくり書いたものです
高速化、データ整形などの改善点はいくつかありますが、参考までに

Sub writeCSV() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim csvFile As String csvFile = ActiveWorkbook.Path & "\data.csv" Open csvFile For Output As #1 Dim v As Variant v = Range(Cells(5, 26), Cells(58, 27)) Dim i As Long, j As Long For i = 5 - 4 To 58 - 4 '1始まりに調整 For j = 26 - 25 To 27 - 25 '1始まりに調整 Print #1, v(i, j) & ","; Next Print #1, vbCr; Next Close #1 MsgBox "data.csvに書き出しました" End Sub

投稿2021/04/09 01:27

編集2021/04/09 01:55
Third_Kei

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1rng1.Copy 2ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats

の部分を

VBA

1Columns("Z").NumberFormatLocal = "@" 2rng1.Copy 3ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats

としてみてはどうでしょうか。

投稿2021/04/08 08:37

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo842

2021/04/08 23:28

ご回答ありがとうございます。 お試ししてみたのですが、改善せずでした、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問