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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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
総合スコア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
総合スコア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
総合スコア686
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
文字列セルにせっていしたセルを含む範囲コピーをペーストさきに、xlpastevalues でペーストすると、値だけがコピーされるようです。
ペースト先が、as,at,au,av,aw,ax,ay,az であるとき、as に貼り付け左上を決めたら、aw 列は、全セルを文字列に設定しておかないと駄目っぽいでづね。jawa さんの環境で、頭ゼロのままのセルを入力カーソル置いて、編集せずにフォーカスあうとするとたぶん、前ゼロが除去されてしまうのではないでしょうか。
投稿2015/12/21 09:00
総合スコア1693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア3020
0
以下のように書き換えて実行するとどうなりますか?
VBA
1 Range(Cells(A, 2), Cells(A, 6)).Copy .Cells(C, 1).PasteSpecial xlPasteAll
これで 0 が付くなら、コピー先のセルの書式が 0000 でない
(おそらく「標準」のままか「数値」)ところに
xlPasteValues (値のみコピー)したことが原因だと思います。
投稿2015/12/21 06:51
総合スコア1193
0
管理コードが右寄せになっていますが、
これは意図的に横位置を右寄せにしているのでしょうか?
横位置が[標準]の状態でしたら、
何らかの一時的なバグで、Excelが数値として認識しいるままかもしれません。
セルの表示形式を文字列にした状態で、
各セルで編集状態→Enter とするか、
selection.value= selection.value等を実行し、
その後で再度コピペをしてみてはどうでしょうか?
投稿2015/12/21 06:35
総合スコア1175
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。