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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

8回答

31647閲覧

VBA コピー時に1文字目「0」が省略される

Alice0225

総合スコア206

VBA

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2015/12/21 06:25

VBAにて集計ツールを作成しています。

その中に範囲コピーをする部分があるのですが、

VBA

1~一部抜粋~ 2 Range(Cells(A, 2), Cells(A, 6)).Copy .Cells(C, 1).PasteSpecial xlPasteValues 3 ※Book1のある範囲をBook2へ貼り付けるイメージです。 4

下記の例のような表をコピーする際、連番8~28までは問題ないのですが、
連番1~7までのような頭に「0」がついているものに限り、0が消された状態で貼り付けられてしまいます。
Format("0000")等を使用して0を表示させることは出来るのですが、元から3桁しかないものは
そのまま表示させる必要がある為使用が出来ないのです…。
その他コピー元・貼り付け先を文字列に指定しても上手くいきませんでした。

範囲コピー→貼り付けを行う際に、先頭の0を消さずに実行する方法はありませんでしょうか。

例

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

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

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

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

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

guest

回答8

0

.Cells(C, 5).NumberFormatLocal = "0000"
Range(Cells(A, 2), Cells(A, 6)).Copy
.Cells(C, 1).PasteSpecial xlPasteValues
.Cells(C, 5).Value = Format(Cells(A, 6).Value, "0000")

毎回書式を強制的に変更してからコピペしては良いんではないかと思います。
最後の4行目は無くても大丈夫かと思いますが、ダメ押しで(笑)
2013で同じ事象が起きた時には、上記で解決しました。

投稿2016/02/01 07:17

lovely.wolf

総合スコア15

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

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

0

見た目上4ケタ表示にするのであればコピペ後に、
セルの書式設定を変更してみてはいかがでしょうか?

Range("F3:F30").NumberFormatLocal = "0000"

貼付先が毎回範囲が変わるのであれば、最終行を指定してあげてください。

Dim eRow As Long eRow = Cells(Rows.Count, 2).End(xlUp).Row Range(Cells(3, "F"), Cells(eRow, "F")).NumberFormatLocal = "0000"

投稿2016/02/01 05:42

miysk

総合スコア10

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

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

0

はじめまして、thom.jpです。
私もExcel2010ですが、事象は再現せず、何度やってもAlice0225さんと同じ結果にはならず、ゼロは残ったまま張り付きます。

考えられる原因と対策をまとめました。

#コードの問題
貼り付けの後に0を消すような処理があるのかもしれません。
貼り付けコード自体を単体で動作するように書き換えて試すとどうなりますか。
また、マクロの実行をF8キーでのステップ実行すると、貼り付けの瞬間に0が消えているのか、それとも張り付けた後の処理で消えるのか確認することができます。
#ブックの問題
ブックの破損も疑ってみてください。
新規ブックを作り直してコードを実行するとどうなりますか。
#Excel環境の問題
他に実行を試せるPCがあれば試してみてください。
無い場合は、Officeの修復機能で設定を初期に戻して試すこともできますが、いろいろ環境設定を行っている場合は元に戻ってしまいますので、試す場合は自己責任でお願いします。
方法:Windows7なら、コントロールパネルのプログラムのアンインストールから、Officeを探して選択し、変更ボタンを押して表示されたウインドウで修復を選択します。
#Excelバージョンの問題
ファイルメニューのヘルプを開くと、Microsoft Excelのバージョン情報とあります。
私の環境は、バージョン:14.0.7163.5000(32ビット)です。
Windows UpdateでOffice関連の更新プログラムの未適用があれば適用してみて事象が改善されるか試してください。
#他のツールとの干渉
クリップボード拡張ツールなんかをつかっているとまさにそれが怪しいのですが、そうしたものでなくても外部ツールの影響を受けて結果が変化するといったことはありえます。
常駐プログラムがあれば終了させてみてください。
#OSの問題
OS設定の影響を受けて結果が変化することもありえます。
この問題を切り分けるには、別PCで試してみるしかありません。

最後の2つは可能性は極めて低いですが、100%ありえないとは言い切れないので上4つでダメなら試す価値はあります。

投稿2016/01/07 18:45

thom.jp

総合スコア686

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

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

ExcelVBAer

2016/01/07 23:27

ブックの破損に関して、自分の経験から補足させて頂くと、 破損したブック・シートからコピペでデータを移すのはNGです。 なぜなら、破損部分も移ってしまう可能性が高いからです。 ですので、一から作りなおして再現するか試すのが良いと思われます。
guest

0

文字列セルにせっていしたセルを含む範囲コピーをペーストさきに、xlpastevalues でペーストすると、値だけがコピーされるようです。

ペースト先が、as,at,au,av,aw,ax,ay,az であるとき、as に貼り付け左上を決めたら、aw 列は、全セルを文字列に設定しておかないと駄目っぽいでづね。jawa さんの環境で、頭ゼロのままのセルを入力カーソル置いて、編集せずにフォーカスあうとするとたぶん、前ゼロが除去されてしまうのではないでしょうか。

投稿2015/12/21 09:00

ipadcaron

総合スコア1693

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

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

jawa

2015/12/21 11:05

仰るとおり管理コード列のセル上でダブルクリックやF2押下により一度編集モードに入ればセルの書式が反映されるため、標準セルでは数値形式(頭0は除去される)に変更されます。 ただ、今回の質問はコードの実行結果として「0が消された状態で貼り付けられてしまう」ということのようでしたので、これとはまた別の問題かなと思っております。
Alice0225

2015/12/22 09:57

ご回答ありがとうございます。 全セルを文字列に指定して同じように検証しましたが変わらず。。。 書式ごとコピーでも変化は見られませんでした。
guest

0

手元のExcel2010で同様のコードを作成し実行してみましたが、こちらの環境では提示のCopy&Paste処理で0は消えずに出力されました。

VBA

1For A = 2 To 12 2 Range(Cells(A, 2), Cells(A, 6)).Copy 3 C = A + 20 4 ActiveSheet.Cells(C, 1).PasteSpecial xlPasteValues 5Next

まず、管理コードの列を文字列セルとしてから「0120」等のデータ入力を行いマクロ実行したところ、結果は「0120」でした。
その後管理コードの列を標準セルに変更して再度マクロ実行しましたが、結果はかわらず「0120」でした。
さらに入力データ全体をコピーし、別シートに「値を張り付け」してマクロ実行しましたが、結果はかわらず「0120」でした。

通常、標準セルに「0120」を手入力すると「120」と数値形式で表示されるものと思いますが、Alice0225さんの実行環境で管理コードはどのように入力されましたでしょうか?
また、このCopy&Paste処理のみ実行しても同様の結果になりますでしょうか?
(Copy&Paste処理の後に他の処理が行われることで0が除去されていたりしないでしょうか)

データの作成方法やExcelバージョン等も提示いただけると原因解明の手掛かりになるかもしれません。

投稿2015/12/21 07:29

編集2015/12/22 00:14
jawa

総合スコア3013

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

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

jawa

2015/12/21 07:33

他の方への回答を見ると、データ入力は文字列型のセルに手入力されているようですね。 こちらの環境とあまり変わらない状況のようですが・・・。
Alice0225

2015/12/22 09:59

元データの入力は文字列書式としてからの手入力になります。 Excelのバージョンは2010です。
guest

0

以下のように書き換えて実行するとどうなりますか?

VBA

1 Range(Cells(A, 2), Cells(A, 6)).Copy .Cells(C, 1).PasteSpecial xlPasteAll

これで 0 が付くなら、コピー先のセルの書式が 0000 でない
(おそらく「標準」のままか「数値」)ところに
xlPasteValues (値のみコピー)したことが原因だと思います。

投稿2015/12/21 06:51

kozuchi

総合スコア1193

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

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

Alice0225

2015/12/22 09:55 編集

ご回答ありがとうございます。 現在別のマクロ(時間がかかってしまうもの)の実行を行っております為、 そちらが終了次第で試行させて頂きますm(_ _)m 【追記】 結果は変わらずでした。。。
guest

0

管理コードが右寄せになっていますが、
これは意図的に横位置を右寄せにしているのでしょうか?

横位置が[標準]の状態でしたら、
何らかの一時的なバグで、Excelが数値として認識しいるままかもしれません。

セルの表示形式を文字列にした状態で、
各セルで編集状態→Enter とするか、
selection.value= selection.value等を実行し、
その後で再度コピペをしてみてはどうでしょうか?

投稿2015/12/21 06:35

ExcelVBAer

総合スコア1175

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

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

Alice0225

2015/12/21 06:49

ご回答ありがとうございます。 管理コードは「文字列」設定で、見栄え上右寄せにしています。
guest

0

元のシート、0120という表示は120という数値と何か書式設定した結果として実現されているのですよね。
ならば xlPasteValues ではなく xlPasteValuesAndNumberFormats を使用して書式ごとコピーしてはいかがでしょう。

投稿2015/12/21 06:30

yuba

総合スコア5568

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

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

Alice0225

2015/12/21 06:35

ご回答ありがとうございます。 早速試しましたが変化は見られませんでした。。。
yuba

2015/12/21 06:35

だめでしたか。残念。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問